p05 nelson primitivas_opengl

29
Practica 05 Primitivas OpenGL OBJETIVO: Conocer las Primitivas de dibujo básicas que posee OpenGL.

Upload: angel-garcia

Post on 21-Jun-2015

62 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: P05 nelson primitivas_opengl

Practica 05Primitivas OpenGL

OBJETIVO: Conocer las Primitivas de dibujo básicas que posee OpenGL.

Page 2: P05 nelson primitivas_opengl

Descripción de Primitivas de OpenGL

Método Descripción

GL2.GL_POINTS Permite dibujar puntos de forma individual.

GL2.GL_LINES Para cada par de vértices en un bloque glBegin, glEnd, dibuja una línea.

GL2.GL_LINE_STRIP Para cada par de vértices consecutivos en un bloque glBegin, glEnd, dibuja una línea sólida.

GL2.GL_LINE_LOOP Igual que GL2.GL_LINE_STRIP, solo que también dibuja una línea entre el primer y último vértice.

GL2.GL_TRIANGLE Para cada grupo de 3 vértices en un bloque glBegin, glEnd, dibuja un TRIÁNGULO RELLENO.

GL2.GL_TRIANGLE_STRIP Para cada grupo de 3 vértices consecutivos dibuja un TRIÁNGULO RELLENO.

GL2.GL_TRIANGLE_FAN Dibuja triángulos entre el primer vértice, y cada pareja de vértices consecutivos del restro en un mismo bloque glBegin ... glEnd.

GL2.GL_QUADS Dibuja figuras cuadrangulares, por cada 4 vértices en un bloque glBegin, ... glEnd.

GL2.GL_POLYGON Dibuja polígonos convexos dado el conjunto de vértices dentro del bloque glBegin, ..., glEnd

Source: 3D Computer Mathematics – A Mathematical Introduction to OpenGL

Page 3: P05 nelson primitivas_opengl

Descripción de Primitivas de OpenGL

Método Descripción

GL2.GL_QUAD_STRIP Permite dibujar puntos de forma individual.

METODO NUEVO: gl.glPolygonMode(GL2.GL_FRONT_AND_BACK, GL2.GL_LINE);

La llamada a este método con los parámetros GL2.GL_FRONT_AND_BACK, GL2.GL_LINE, permite desactivar el modo de relleno de los polígonos, y sólo dibuja el contorno.

Para restablecer el modo de dibujado por relleno, sustituya GL2.GL_LINE, por GL2.GL_FILL

Source: 3D Computer Mathematics – A Mathematical Introduction to OpenGL

Page 4: P05 nelson primitivas_opengl

Descripción de Primitivas de OpenGL

Método Descripción

Bloque de dibujo Bloque donde se indican los vértices con los cuales se van a trabajar en una primitiva específica.

gl.glBegin(PRIMITIVA); gl.glVertex3f(...); //coordenadas del vértice 1 gl.glVertex3f(...); //coordenadas del vértice 2 gl.glVertex3f(...); //coordenadas del vértice 3 ... gl.glVertex3f(...); //coordenadas del vértice ngl.glEnd();

Source: 3D Computer Mathematics – A Mathematical Introduction to OpenGL

Page 5: P05 nelson primitivas_opengl

Método: GL2.GL_POINTS;Descripción

Permite dibujar cada punto indicado en el bloque begin...end.

Source: 3D Computer Mathematics – A Mathematical Introduction to OpenGL

    @Override    public void display(GLAutoDrawable glad) {          GL2 gl = glad.getGL().getGL2();        gl.glClear(gl.GL_COLOR_BUFFER_BIT);                                        

gl.glColor3f(0.0f, 0.0f, 1.0f);                        gl.glPointSize(10f);                gl.glBegin(GL2.GL_POINTS);                                        gl.glVertex3f(­0.5f, ­0.5f, 0.0f); //Punto 1                    gl.glVertex3f(­0.5f,  0.5f, 0.0f); //Punto 2                    gl.glVertex3f( 0.5f,  0.5f, 0.0f); //Punto 3                    gl.glVertex3f( 0.5f, ­0.5f, 0.0f); //Punto 4                gl.glEnd();    }

Cambia el tamaño (en pixeles) definido para los

puntos.

Page 6: P05 nelson primitivas_opengl

Método: GL2.GL_POINTS;Descripción

Los puntos aparecen de color azul, y con un tamaño de 10 pixeles. NOTA: Tanto los ejes, la malla, y las leyendas fueron añadidas con el propósito de mejorar la claridad del ejemplo.

Source: 3D Computer Mathematics – A Mathematical Introduction to OpenGL

Page 7: P05 nelson primitivas_opengl

Método: GL2.GL_LINES;Descripción

Permite dibujar una linea, por cada par de vértices en el bloque begin...end.

Source: 3D Computer Mathematics – A Mathematical Introduction to OpenGL

    @Override    public void display(GLAutoDrawable glad) {          GL2 gl = glad.getGL().getGL2();        gl.glClear(gl.GL_COLOR_BUFFER_BIT);                                        

gl.glColor3f(0.0f, 0.0f, 1.0f);

//... DIBUJA PUNTOS                        gl.glBegin(GL2.GL_LINES);                             gl.glVertex3f(­0.5f, ­0.5f, 0.0f); //Punto 1           gl.glVertex3f(­0.5f,  0.5f, 0.0f); //Punto 2           gl.glVertex3f( 0.5f,  0.5f, 0.0f); //Punto 3           gl.glVertex3f( 0.5f, ­0.5f, 0.0f); //Punto 4        gl.glEnd();    }

Línea 1

Línea 2

Page 8: P05 nelson primitivas_opengl

Método: GL2.GL_LINES;Descripción

Salida Esperada.

Source: 3D Computer Mathematics – A Mathematical Introduction to OpenGL

Page 9: P05 nelson primitivas_opengl

Método: GL2.GL_LINE_STRIP;Descripción

Permite dibujar linea, por cada par de vértices consecutivos en el bloque.

Source: 3D Computer Mathematics – A Mathematical Introduction to OpenGL

    @Override    public void display(GLAutoDrawable glad) {          GL2 gl = glad.getGL().getGL2();        gl.glClear(gl.GL_COLOR_BUFFER_BIT);                                        

gl.glColor3f(0.0f, 0.0f, 1.0f);

//... DIBUJA PUNTOS                        gl.glBegin(GL2.GL_LINE_STRIP);                             gl.glVertex3f(­0.5f, ­0.5f, 0.0f); //Punto 1           gl.glVertex3f(­0.5f,  0.5f, 0.0f); //Punto 2           gl.glVertex3f( 0.5f,  0.5f, 0.0f); //Punto 3           gl.glVertex3f( 0.5f, ­0.5f, 0.0f); //Punto 4        gl.glEnd();    }

Línea 1

Línea 3Línea 2

Page 10: P05 nelson primitivas_opengl

Método: GL2.GL_LINE_STRIP;Descripción

Salida Esperada.

Source: 3D Computer Mathematics – A Mathematical Introduction to OpenGL

Page 11: P05 nelson primitivas_opengl

Método: GL2.GL_LINE_LOOP;Descripción

Igual que GL2.GL_LINE_STRIP, solo que une el vértice final con el inicial.

Source: 3D Computer Mathematics – A Mathematical Introduction to OpenGL

    @Override    public void display(GLAutoDrawable glad) {          GL2 gl = glad.getGL().getGL2();        gl.glClear(gl.GL_COLOR_BUFFER_BIT);                                        

gl.glColor3f(0.0f, 0.0f, 1.0f);

//... DIBUJA PUNTOS                        gl.glBegin(GL2.GL_LINE_LOOP);                             gl.glVertex3f(­0.5f, ­0.5f, 0.0f); //Punto 1           gl.glVertex3f(­0.5f,  0.5f, 0.0f); //Punto 2           gl.glVertex3f( 0.5f,  0.5f, 0.0f); //Punto 3           gl.glVertex3f( 0.5f, ­0.5f, 0.0f); //Punto 4        gl.glEnd();    }

Línea 1

Línea 3

Línea 2

Línea 4

Page 12: P05 nelson primitivas_opengl

Método: GL2.GL_LINE_LOOP;Descripción

Salida Esperada.

Source: 3D Computer Mathematics – A Mathematical Introduction to OpenGL

Page 13: P05 nelson primitivas_opengl

Método: GL2.GL_TRIANGLES;Descripción

Dibuja un Triángulo, por cada 3 vértices del bloque glBegin()... glEnd();

Source: 3D Computer Mathematics – A Mathematical Introduction to OpenGL

    @Override    public void display(GLAutoDrawable glad) {          GL2 gl = glad.getGL().getGL2();        gl.glClear(gl.GL_COLOR_BUFFER_BIT);                                        

gl.glColor3f(0.0f, 0.0f, 1.0f);

//... DIBUJA PUNTOS                

gl.glBegin(GL2.GL_TRIANGLES);        gl.glVertex3f(­0.5f, ­0.5f, 0.0f); //Punto 1           gl.glVertex3f(­0.2f, ­0.4f, 0.0f); //Punto 2

gl.glVertex3f(­0.4f, ­0.2f, 0.0f); //Punto 3                               gl.glVertex3f( 0.4f,  0.2f, 0.0f); //Punto 4           gl.glVertex3f( 0.5f,  0.5f, 0.0f); //Punto 5                               gl.glVertex3f( 0.2f,  0.4f, 0.0f); //Punto 6

gl.glEnd();    }

Triángulo 1

Triángulo 2

Page 14: P05 nelson primitivas_opengl

Método: GL2.GL_TRIANGLES;Descripción

Relleno Activado (por default), o bien a través de la llamada a:gl.glPolygonMode(GL2.GL_FRONT_AND_BACK, GL2.GL_FILL);

Source: 3D Computer Mathematics – A Mathematical Introduction to OpenGL

Page 15: P05 nelson primitivas_opengl

Método: GL2.GL_TRIANGLES;Descripción

Desactivacion de relleno mediante:gl.glPolygonMode(GL2.GL_FRONT_AND_BACK, GL2.GL_LINE);

Source: 3D Computer Mathematics – A Mathematical Introduction to OpenGL

Page 16: P05 nelson primitivas_opengl

Método: GL2.GL_TRIANGLE_STRIP;Descripción

Dibuja un Triángulo, por cada 3 vértices consecutivos del bloque glBegin()... glEnd();

Source: 3D Computer Mathematics – A Mathematical Introduction to OpenGL

    @Override    public void display(GLAutoDrawable glad) {          GL2 gl = glad.getGL().getGL2();        gl.glClear(gl.GL_COLOR_BUFFER_BIT);                                        

gl.glColor3f(0.0f, 0.0f, 1.0f);

//gl.glPolygonMode(GL2.GL_FRONT_AND_BACK, GL2.GL_LINE);                

gl.glBegin(GL2.GL_TRIANGLE_STRIP);        gl.glVertex3f(­0.5f, ­0.5f, 0.0f); //Punto 1           gl.glVertex3f(­0.2f, ­0.4f, 0.0f); //Punto 2

gl.glVertex3f(­0.4f, ­0.2f, 0.0f); //Punto 3                               gl.glVertex3f( 0.4f,  0.2f, 0.0f); //Punto 4           gl.glVertex3f( 0.5f,  0.5f, 0.0f); //Punto 5                               gl.glVertex3f( 0.2f,  0.4f, 0.0f); //Punto 6

gl.glEnd();    }

Triángulo 1

Triángulo 3

Triángulo 2

Triángulo 4

Page 17: P05 nelson primitivas_opengl

Método: GL2.GL_TRIANGLE_STRIP;Descripción

Dibujo de triángulos usando TRIANGLE_STRIP, y con relleno desactivado.

Source: 3D Computer Mathematics – A Mathematical Introduction to OpenGL

Page 18: P05 nelson primitivas_opengl

Método: GL2.GL_TRIANGLE_FAN;Descripción

Dibuja Triángulos entre vértice 1, y cada pareja consecutiva en el bloque glBegin()... glEnd();

Source: 3D Computer Mathematics – A Mathematical Introduction to OpenGL

    @Override    public void display(GLAutoDrawable glad) {          GL2 gl = glad.getGL().getGL2();        gl.glClear(gl.GL_COLOR_BUFFER_BIT);                                        

gl.glColor3f(0.0f, 0.0f, 1.0f);

//gl.glPolygonMode(GL2.GL_FRONT_AND_BACK, GL2.GL_LINE);                

gl.glBegin(GL2.GL_TRIANGLE_FAN);           gl.glVertex3f( 0.0f,  0.0f, 0.0f); //Punto 1           gl.glVertex3f(­0.8f,  0.0f, 0.0f); //Punto 2           gl.glVertex3f(­0.5f,  0.4f, 0.0f); //Punto 3                               gl.glVertex3f( 0.0f,  0.6f, 0.0f); //Punto 4           gl.glVertex3f( 0.4f,  0.4f, 0.0f); //Punto 5                    

gl.glVertex3f( 0.8f,  0.0f, 0.0f); //Punto 6gl.glEnd();

    }

Pareja paraTriángulo 1

Pareja paraTriángulo 3

Pareja paraTriángulo 2

Pareja paraTriángulo 4

Vértice Común

Page 19: P05 nelson primitivas_opengl

Método: GL2.GL_TRIANGLE_FAN;Descripción

Uso de triángulo fan, con relleno desactivado.

Source: 3D Computer Mathematics – A Mathematical Introduction to OpenGL

Page 20: P05 nelson primitivas_opengl

Método: GL2.GL_QUADS;Descripción

Dibuja un polígonos de 4 lados, por cada 4 vértices del bloque glBegin()... glEnd();

Source: 3D Computer Mathematics – A Mathematical Introduction to OpenGL

    @Override    public void display(GLAutoDrawable glad) {          GL2 gl = glad.getGL().getGL2();        gl.glClear(gl.GL_COLOR_BUFFER_BIT);                                        

gl.glColor3f(0.0f, 0.0f, 1.0f);

//gl.glPolygonMode(GL2.GL_FRONT_AND_BACK, GL2.GL_LINE);                

gl.glBegin(GL2.GL_QUADS);gl.glVertex3f(­0.45f, ­0.65f, 0.0f); //Punto 1

           gl.glVertex3f(­0.05f, ­0.65f, 0.0f); //Punto 2           gl.glVertex3f(­0.05f, ­0.25f, 0.0f); //Punto 3                

gl.glVertex3f(­0.45f, ­0.25f, 0.0f); //Punto 4           gl.glVertex3f(0.05f, 0.25f, 0.0f); //Punto 5           gl.glVertex3f(0.45f, 0.25f, 0.0f); //Punto 6           gl.glVertex3f(0.45f, 0.65f, 0.0f); //Punto 7           gl.glVertex3f(0.05f, 0.65f, 0.0f); //Punto 8                  

gl.glEnd();    }

Cuadro 1

Cuadro 2

Page 21: P05 nelson primitivas_opengl

Método: GL2.GL_QUADS;Descripción

Relleno Activado (por default), o bien a través de la llamada a:gl.glPolygonMode(GL2.GL_FRONT_AND_BACK, GL2.GL_FILL);

Source: 3D Computer Mathematics – A Mathematical Introduction to OpenGL

Page 22: P05 nelson primitivas_opengl

Método: GL2.GL_QUADS;Descripción

Desactivacion de relleno mediante:gl.glPolygonMode(GL2.GL_FRONT_AND_BACK, GL2.GL_LINE);

Source: 3D Computer Mathematics – A Mathematical Introduction to OpenGL

Page 23: P05 nelson primitivas_opengl

Método: GL2.GL_QUAD_STRIP;Descripción

Dibuja un polígono de 4 lados por cada par de PAREJAS DE VERTICES consecutivas;

Source: 3D Computer Mathematics – A Mathematical Introduction to OpenGL

    @Override    public void display(GLAutoDrawable glad) {          GL2 gl = glad.getGL().getGL2();        gl.glClear(gl.GL_COLOR_BUFFER_BIT);                                        

gl.glColor3f(0.0f, 0.0f, 1.0f);

//gl.glPolygonMode(GL2.GL_FRONT_AND_BACK, GL2.GL_LINE);                

gl.glBegin(GL2.GL_QUAD_STRIP);        gl.glVertex3f(­0.45f, ­0.65f, 0.0f); //Punto 1           gl.glVertex3f(­0.05f, ­0.65f, 0.0f); //Punto 2           gl.glVertex3f(­0.45f, ­0.25f, 0.0f); //Punto 3                 gl.glVertex3f(­0.05f, ­0.25f, 0.0f); //Punto 4         gl.glVertex3f(0.05f, 0.25f, 0.0f); //Punto 5           gl.glVertex3f(0.45f, 0.25f, 0.0f); //Punto 6           gl.glVertex3f(0.05f, 0.65f, 0.0f); //Punto 7                   gl.glVertex3f(0.45f, 0.65f, 0.0f); //Punto 8                  

gl.glEnd();    }

Cuadro 1

Cuadro 3

Cuadro 2

Page 24: P05 nelson primitivas_opengl

Método: GL2.GL_QUAD_STRIP;Descripción

Desactivacion de relleno mediante:gl.glPolygonMode(GL2.GL_FRONT_AND_BACK, GL2.GL_LINE);

Source: 3D Computer Mathematics – A Mathematical Introduction to OpenGL

NOTA: Observe que el orden de unión de los

vértices en QUAD_STRIP difiere

de la primitiva QUADS

Page 25: P05 nelson primitivas_opengl

Método: GL2.GL_POLYGON;Descripción

Dibuja un polígono de CUALQUIER tantos lados como vértices halla en el bloque;

Source: 3D Computer Mathematics – A Mathematical Introduction to OpenGL

    @Override    public void display(GLAutoDrawable glad) {          GL2 gl = glad.getGL().getGL2();        gl.glClear(gl.GL_COLOR_BUFFER_BIT);                                        

gl.glColor3f(0.0f, 0.0f, 1.0f);

//gl.glPolygonMode(GL2.GL_FRONT_AND_BACK, GL2.GL_LINE);                

gl.glBegin(GL2.GL_POLYGON);        gl.glVertex3f( 0.7500f,  0.0000f, 0.0f); //Punto 1           gl.glVertex3f( 0.5303f,  0.5303f, 0.0f); //Punto 2           gl.glVertex3f( 0.0000f,  0.7500f, 0.0f); //Punto 3           

gl.glVertex3f(­0.5303f,  0.5303f, 0.0f); //Punto 4           gl.glVertex3f(­0.7500f,  0.0000f, 0.0f); //Punto 5gl.glVertex3f(­0.5303f, ­0.5303f, 0.0f); //Punto 6

           gl.glVertex3f( 0.0000f, ­0.7500f, 0.0f); //Punto 7           gl.glVertex3f( 0.5303f, ­0.5303f, 0.0f); //Punto 8       

gl.glEnd();    }

Page 26: P05 nelson primitivas_opengl

Método: GL2.GL_POLYGON;Descripción

Desactivacion de relleno mediante:gl.glPolygonMode(GL2.GL_FRONT_AND_BACK, GL2.GL_LINE);

Source: 3D Computer Mathematics – A Mathematical Introduction to OpenGL

Page 27: P05 nelson primitivas_opengl

Practica 05. Identificando Uso de Primitivas

Descripción

En una aplicación de Java, y haciendo uso de las primitivas de OpenGL aprendidas, recree las gráficas que se muestran en la siguiente diapositiva.

Source: 3D Computer Mathematics – A Mathematical Introduction to OpenGL

Page 28: P05 nelson primitivas_opengl

Practica 05. Identificando Uso de Primitivas

Descripción

Haciendo uso de las primitivas de OpenGL aprendidas, recree las gráficas siguientes en una aplicación en Java.

Source: 3D Computer Mathematics – A Mathematical Introduction to OpenGL

Page 29: P05 nelson primitivas_opengl

FIN