Gráficos por computadora usando JOGL. Oscar Gabriel Caballero Martínez. Читать онлайн. Newlib. NEWLIB.NET

Автор: Oscar Gabriel Caballero Martínez
Издательство: Bookwire
Серия:
Жанр произведения: Математика
Год издания: 0
isbn: 9786073050302
Скачать книгу
funciones de la clase y se les llaman variables (en el caso, objetos) globales.

      Del código anterior hay que destacar lo siguiente: en la línea 26 se fija el tamaño del punto de 12 pixeles en la función glPointSize. En las líneas 29, 31, 33 y 35 se utiliza el método glVertex2f [TutorialOpenGL, 2016], cuyos parámetros son dos valores de punto flotante que representan la posición en dos dimensiones. Y en las líneas 28, 30, 32 y 34 el método glColor3f especifica el color para cada uno de los puntos a dibujar; los parámetros son la intensidad de los colores Rojo, Verde y Azul desde 0 a 1. En la línea 34 los parámetros son ceros, lo que significa que no hay intensidades de los tres colores, por lo tanto, hay una ausencia de color, que genera el negro. Cuando los tres valores correspondientes a los colores están a su máxima intensidad (o sea, 1), generan el color blanco.

      Se observa que se generan puntos de diferentes colores, pero podemos generar más gráficas primitivas. Por ejemplo, para generar una línea es necesaria la característica GL_LINES y además un par de vértices que indican dónde empieza y dónde termina la línea correspondiente, como se muestra en la figura 3.3 a continuación [Villar, 2009].

figura17

      Figura 3.3 Primitivas gráficas

       Fuente: Apuntes de Villar Patiño.

       Práctica

      1. Modifique el programa Puntos2D para que presente la siguiente salida.

figura18

      Genere un nuevo programa para que cuadricule cada unidad del plano cartesiano con las líneas azules y los ejes en negro.

figura19

      Observe la siguiente tabla de colores

figura20

      Figura 3.4 Tabla de colores de Windows

       Fuente: Elaboración propia

      Para trabajar con el color escogido se usa el método glColor3i(15,31,172), que genera la salida mostrada en la figura 3.5, pero no proporciona el color esperado. Con ello surge la pregunta: ¿Existe un método que nos ayude a generar la salida esperada, utilizando los mismos valores de los colores?

figura21

      Figura 3.5 Gráfica de la secante.

       Fuente: Elaboración propia.

      La respuesta es sí con el método glColor3d(15/256.0, 31/256.0, 172/256.0), que se puede observar en la línea 31 del siguiente código. Hay que resaltar los parámetros del método; estos se transcriben, por ejemplo, 15/250.0: se debe a que, si se escribe 35/256, como los dos valores son enteros la división regresaría un entero, el cual es 0. Al escribir 256.0 se le dice a java que el valor es uno de doble precisión y el resultado es un valor de doble precisión.

figura22

      Figura 3.6 gráfica del seno

       Fuente: Elaboración propia.

      El siguiente código, en una nueva clase, genera la salida de la figura 3.6, llamado GraficasTrigonometricas.

      1. public void init(GLAutoDrawable glad) {

      2. final GL2 gl = glad.getGL().getGL2();

      3. final GLU glu = new GLU();

      4. gl.glMatrixMode (GL2.GL_PROJECTION);

      5. gl.glClearColor (1.0f, 1.0f, 1.0f, 0.0f);

      6. glu.gluOrtho2D (-10.0, 10.0, -1.2, 1.2);

      7. gl.glMatrixMode(GL2.GL_MODELVIEW);

      8. gl.glLoadIdentity();

      9. }

      10. public void display(GLAutoDrawable glad) {

      11. final GL2 gl = glad.getGL().getGL2();

      12. gl.glClear(GL2.GL_COLOR_BUFFER_BIT);

      13. gl.glLoadIdentity();

      14. dibujaEjes(gl,-9f,9f,-1f,1f);

      15. dibujaSeno(gl);

      16. gl.glFlush();

      17. }

      18. public void dibujaEjes(GL2 gl,float xi,float xf,float yi, float yf){

      19. gl.glLineWidth(10f);

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

      21. gl.glBegin(GL2.GL_LINES);

      22. gl.glVertex2f(xi, 0.0f);

      23. gl.glVertex2f(xf, 0.0f);

      24. gl.glVertex2f(0.0f, yi);

      25. gl.glVertex2f(0.0f, yf);

      26. gl.glEnd();

      27. }

      28. public void dibujaSeno(GL2 gl){

      29. double inc, x;

      30. inc=Math.PI/50;

      31. glColor3d(15/256.0, 31/256.0, 172/256.0);

      32. gl.glLineWidth(5f);

      33. gl.glBegin(GL2.GL_LINE_STRIP);

      34. for(x=-9;x<=9;x+=inc){

      35. gl.glVertex2d(x, Math.sin(x));

      36. }

      37. gl.glEnd();

      38. }

      Código 3.2 GraficasTrigonometricas.java

      De la línea 18 a la 27 se tiene la función dibujaEjes que dibuja los ejes de la gráfica con un grosor de línea de 10 pixeles (línea 19), de color negro (línea 20) y con dos vértices para el valor de x inicial y x final; a su vez, dos vértices para el eje y (líneas de la 22 a la 25). Posteriormente se transcribe la función dibujaSeno que dibuja la gráfica del seno(x) desde -9 hasta 9 y los puntos de los vértices se equidistan una longitud de π/50; como se podrá observar en el ciclo for de la línea 34. De la línea 33 a la línea 37, se observa que se genera una serie de vértices que son unidos por la característica GL_LINE_STRIP que, se puede ver en la figura 3.3, une todos los vértices con líneas desde el primero hasta el último. Como los vértices están muy juntos, a simple vista se observa una curva, pero todas son líneas rectas.

      Se puede observar que en el método display, en la línea 14, se manda llamar al método dibujaEjes con los parámetros: el objeto gl, los valores de punto flotante -9f del x inicial, 9f del x final, -1f del y inicial y 1f del y final. En la línea 15 se invoca al método dibujaSeno que lleva como parámetro al objeto gl para poder dibujar la gráfica. Por ello se dibujan los ejes primero y encima de ellos a la gráfica del seno; esta manera de dibujar se analizará más adelante en el trabajo.

      Práctica. Para cada función trigonométrica siguiente se debe poner un color diferente para dibujar la gráfica.

      1. Coseno

      2. Tangente

      3. Cotangente

      4. Secante

      5. Cosecante

      Continuando con el manejo de las gráficas primitivas, se realizará el fractal del triángulo de Sierpinsky. En una clase llamada Sierpinsky se modifcan los métodos siguientes, agregando además el método dibujaTriangulo.

      1. public void init(GLAutoDrawable glad) {

      2. GL2 gl = glad.getGL().getGL2();