Back


Android - OpenGL ES 1 - Tutorial 3 - Disegnare Triangoli

Lo scopo di questo tutorial è di disegnare 4 triangoli come nel seguente screenshot:


Modifichiamo il progetto precedente nel seguente modo:

- nella classe "ObjTriangle", il metodo "DrawTriangle()" diventa:
public void DrawTriangle(GL10 gl, int color) {
    gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
    gl.glVertexPointer(2, GL10.GL_FLOAT, 0, this.vertexBuffer);
    if (color == 1) // Red.
        gl.glColor4f(1.0f, 0.0f, 0.0f, 1.0f);
    else if (color == 2) // Green.
        gl.glColor4f(0.0f, 1.0f, 0.0f, 1.0f);
    else if (color == 3) // Blue.
        gl.glColor4f(0.0f, 0.0f, 1.0f, 1.0f);
    else // White.
        gl.glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
    gl.glDrawElements(GL10.GL_TRIANGLES, this.indices.length, GL10.GL_UNSIGNED_SHORT, this.indexBuffer);
    gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
}
Qui abbiamo aggiunto la variabile "color" che passiamo in fase di chiamata per specificare il colore da utilizzare.

- il metodo "onDrawFrame()" diventa:
@Override
public void onDrawFrame(GL10 gl) {
    gl.glClear(GL10.GL_COLOR_BUFFER_BIT);

    gl.glLoadIdentity();
    gl.glTranslatef(this.width / 4.0f, this.height / 4.0f * 3.0f, 0.0f);
    gl.glScalef(50.0f, 50.0f, 0.0f);
    this.objtriangle.DrawTriangle(gl, 1);
    
    gl.glLoadIdentity();
    gl.glTranslatef(this.width / 4.0f * 3.0f, this.height / 4.0f * 3.0f, 0.0f);
    gl.glScalef(100.0f, 100.0f, 0.0f);
    this.objtriangle.DrawTriangle(gl, 2);

    gl.glLoadIdentity();
    gl.glTranslatef(this.width / 4.0f, this.height / 4.0f, 0.0f);
    gl.glScalef(150.0f, 150.0f, 0.0f);
    this.objtriangle.DrawTriangle(gl, 3);

    gl.glLoadIdentity();
    gl.glTranslatef(this.width / 4.0f * 3.0f, this.height / 4.0f, 0.0f);
    gl.glScalef(200.0f, 200.0f, 0.0f);
    this.objtriangle.DrawTriangle(gl, 0);
}
Notiamo il reset della matrice modelview con "gl.glLoadIdentity();" prima di ogni disegno. Se non resettiamo la matrice, la traslazione o lo scalo verrà eseguito sulla base della precedente operazione.

Il codice:
gl.glLoadIdentity();
gl.glTranslatef(100.0f, 100.0f, 0.0f);
gl.glScalef(100.0f, 100.0f, 0.0f);
this.objtriangle.DrawTriangle(gl, 1);

gl.glLoadIdentity();
gl.glTranslatef(200.0f, 200.0f, 0.0f);
gl.glScalef(100.0f, 100.0f, 0.0f);
this.objtriangle.DrawTriangle(gl, 2);
ed il codice:
gl.glLoadIdentity();
gl.glScalef(100.0f, 100.0f, 0.0f);
gl.glTranslatef(1.0f, 1.0f, 0.0f);
this.objtriangle.DrawTriangle(gl, 1);
gl.glTranslatef(1.0f, 1.0f, 0.0f);
this.objtriangle.DrawTriangle(gl, 2);
producono lo stesso risultato:


Nel primo codice, per ogni triangolo, resettiamo, trasliamo, scaliamo e disegniamo.

Nel secondo codice, resettiamo, scaliamo (ottenendo come unità di base "100"), trasliamo di 1 (ovvero 100), disegniamo, trasliamo nuovamente di 1 (ovvero altri 100) sulla base della precedente traslazione, disegniamo.

Download Project:
OpenGL ES 1 Tutorial 3

Per maggiori approfondimenti sulle istruzioni, rimando a: khronos.org/registry/OpenGL-Refpages/es1.1/xhtml/

Pagina creata il 16/07/2020.






  Back


2007-2020 © Incastro.com
All rights reserved