WebGL - Disegnare Punti

Ciao, futuri programmatori! Oggi ci imbarcheremo in un viaggio emozionante nel mondo di WebGL, concentrandoci specificamente sul disegno di punti. Come il tuo amico insegnante di informatica del quartiere, ti guiderò in questa avventura passo per passo. Non preoccuparti se non hai mai programmato prima – inizieremo dalle basi e man mano ci affonderemo di più. Allora, prendi i tuoi matite virtuali e tuffati!

WebGL - Drawing Points

Cos'è WebGL?

Prima di iniziare a disegnare punti, capiremo cos'è WebGL. WebGL (Web Graphics Library) è una potente API JavaScript che ci permette di creare grafica 2D e 3D nei browser web. È come avere un pennello magico che può disegnare direttamente sulla tua pagina web!

Passaggi Necessari

Per disegnare punti utilizzando WebGL, dobbiamo seguire una serie di passaggi. Pensa a esso come una ricetta per creare arte digitale. Ecco una tabella che riassume questi passaggi:

Passo Descrizione
1 Ottenere l'elemento canvas
2 Ottenere il contesto di rendering WebGL
3 Definire la geometria (vertici)
4 Creare uno shader vertex
5 Creare uno shader frammento
6 Creare un programma shader
7 Caricare i dati nella GPU
8 Impostare la viewport
9 Pulire il canvas
10 Disegnare i punti

Ora, analizziamo ogni passaggio e vediamo come si uniscono per creare la nostra opera d'arte!

Esempio – Disegnare Tre Punti utilizzando WebGL

Analizziamo un esempio in cui disegneremo tre punti colorati sul nostro canvas. Spiegherò ogni parte del codice in dettaglio, così capireai esattamente cosa sta succedendo.

Passo 1: Impostare l'HTML

Prima, dobbiamo creare un file HTML con un elemento canvas:

<!DOCTYPE html>
<html>
<head>
<title$I My First WebGL Points</title>
</head>
<body>
<canvas id="myCanvas" width="400" height="400">
Il tuo browser non supporta l'elemento canvas.
</canvas>
<script src="webgl-points.js"></script>
</body>
</html>

Questo crea un canvas che sarà il nostro campo di disegno. Il file JavaScript che creeremo dopo farà tutta la magia!

Passo 2: Creare il File JavaScript

Ora, creiamo un file chiamato webgl-points.js e iniziamo a scrivere la nostra applicazione WebGL:

// Passo 1: Ottenere l'elemento canvas
const canvas = document.getElementById('myCanvas');

// Passo 2: Ottenere il contesto di rendering WebGL
const gl = canvas.getContext('webgl');

if (!gl) {
console.error('WebGL non supportato');
throw new Error('WebGL non supportato');
}

// Passo 3: Definire la geometria (vertici)
const vertices = new Float32Array([
0.0, 0.5,    // Punto 1
-0.5, -0.5,  // Punto 2
0.5, -0.5    // Punto 3
]);

// Passo 4: Creare uno shader vertex
const vertexShaderSource = `
attribute vec2 a_position;
void main() {
gl_Position = vec4(a_position, 0.0, 1.0);
gl_PointSize = 10.0;
}
`;

const vertexShader = gl.createShader(gl.VERTEX_SHADER);
gl.shaderSource(vertexShader, vertexShaderSource);
gl.compileShader(vertexShader);

// Passo 5: Creare uno shader frammento
const fragmentShaderSource = `
precision mediump float;
void main() {
gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
}
`;

const fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);
gl.shaderSource(fragmentShader, fragmentShaderSource);
gl.compileShader(fragmentShader);

// Passo 6: Creare un programma shader
const program = gl.createProgram();
gl.attachShader(program, vertexShader);
gl.attachShader(program, fragmentShader);
gl.linkProgram(program);
gl.useProgram(program);

// Passo 7: Caricare i dati nella GPU
const positionBuffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);
gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW);

const positionAttributeLocation = gl.getAttribLocation(program, 'a_position');
gl.enableVertexAttribArray(positionAttributeLocation);
gl.vertexAttribPointer(positionAttributeLocation, 2, gl.FLOAT, false, 0, 0);

// Passo 8: Impostare la viewport
gl.viewport(0, 0, canvas.width, canvas.height);

// Passo 9: Pulire il canvas
gl.clearColor(0.0, 0.0, 0.0, 1.0);
gl.clear(gl.COLOR_BUFFER_BIT);

// Passo 10: Disegnare i punti
gl.drawArrays(gl.POINTS, 0, 3);

Ora, analizziamo questo codice e capiamo cosa fa ogni parte:

Comprensione del Codice

Passi 1 e 2: Impostare WebGL

const canvas = document.getElementById('myCanvas');
const gl = canvas.getContext('webgl');

Qui, stiamo ottenendo il nostro elemento canvas e il contesto di rendering WebGL. È come prendere il nostro pennello e palette pronti!

Passo 3: Definire la Geometria

const vertices = new Float32Array([
0.0, 0.5,    // Punto 1
-0.5, -0.5,  // Punto 2
0.5, -0.5    // Punto 3
]);

Stiamo definendo tre punti in uno spazio 2D. Le coordinate vanno da -1 a 1 in entrambe le direzioni x e y. Immagina il nostro canvas diviso in quattro quadranti, con (0,0) al centro.

Passi 4 e 5: Creare Shaders

Gli shaders sono programmi speciali che funzionano sulla GPU. Abbiamo due tipi:

  1. Shader Vertex: Determina la posizione dei nostri punti.
  2. Shader Frammento: Determina il colore dei nostri punti.
const vertexShaderSource = `
attribute vec2 a_position;
void main() {
gl_Position = vec4(a_position, 0.0, 1.0);
gl_PointSize = 10.0;
}
`;

const fragmentShaderSource = `
precision mediump float;
void main() {
gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
}
`;

Lo shader vertex imposta la posizione e la dimensione dei nostri punti. Lo shader frammento imposta il colore a rosso (1.0, 0.0, 0.0 in RGB).

Passi 6 e 7: Creare il Programma e Caricare i Dati

Questi passaggi coinvolgono la creazione di un programma shader e il caricamento dei nostri dati nella memoria della GPU.

Passi 8 e 9: Impostare la Vista

Impostiamo la viewport per adattarla alla dimensione del nostro canvas e puliamo il canvas per renderlo nero.

Passo 10: Disegnare i Punti

gl.drawArrays(gl.POINTS, 0, 3);

Infine, disegniamo i nostri tre punti!

Conclusione

Congratulations! Hai appena creato la tua prima applicazione WebGL che disegna punti. Questo è solo l'inizio del tuo viaggio nel mondo affascinante della grafica computerizzata. Mentre continui a esplorare, sarai in grado di creare forme più complesse, aggiungere animazioni e persino cimentarti con la grafica 3D.

Ricorda, imparare WebGL è come imparare a dipingere – richiede pratica e pazienza. Non essere scoraggiato se le cose non funzionano perfettamente la prima volta. Continua a sperimentare, e presto creerai capolavori digitali!

Nella nostra prossima lezione, esploreremo come aggiungere diversi colori ai nostri punti e creare forme più complesse. Finché, coding felice!

Credits: Image by storyset