Boxes

Hoy toca un poco de 3D, vamos a dibujar unas cuantas cajitas, no deberia suponer ninguna dificultad, para esto nos hará faclta activar el cull_face y el depth_test (que si me ha supuesto algun quebradero de cabeza que aun no comprendo porque).

Proyecto + FrameWork

Como siempre empezamos por crear un proyecto vacio, agregamos el framework CoreGraphics como siempre siguiendo nuestro tutorial de Sprites en OGL, que ademas ahora tiene los sources para descargar.

Box

A continuación vamos a crear una clase Box para dibujar cada caja … seguro que mi método os va a asustar horrores, pero tiene su lógica: no me interesa dibujar la caja como un objeto solido a base de una lista de vértices y una definición de caras. Yo quiero dibujar un plano cuadrado, y luego rotarlo para formar cada lado del cubo. Esto me permitirá en un futuro (espero no muy lejano) añadir métodos a esta clase para dibujar los lados con mas control

Por ahora solo nos interesa ver el método Init para darle una posición a la caja y el Render.

Nuestro método Init establece las coordenadas del único plano, un plano horizontal sobre el eje XZ y que está a una altura en y = -1, luego el método Render llama 6 veces a drawPlane dándole las rotaciones necesarias para poner ese plano en todas las caras del cubo…. una forma cómoda de trabajar aunque una completísima aberración para las optimizaciones, lógicamente para dibujar 4 cubos tampoco tendrá importancia.

 Box.m (1.91 Kb)
 Box.h (593 Bytes)

EAGLView

El siguiente paso será inicializar nuestro programa y dibujar algunos cubos en pantalla, asi que vamos a ir directamente a ello. Empezamos por añadir estas variables a nuestra clase: la textura del cubo y un array de 7 cubos:

A continuación vamos a EAGLView.m y activamos este define, esto lo que hace es generar el buffer de profundidad, este buffer es el que se encarga de dibujar la profundidad de cada polígono que dibujamos en pantalla, de modo que el motor sabe en todo momento que polígonos solapan a otros. Es necesario usarlo siempre que trabajemos en 3D

Y ahora ya podemos ir a nuestro metodo Inicializar:

 Box.png (712 Bytes)

En nuestro método clearBuffer deberemos añadir el borrado del buffer de profundidad, por defecto y hasta ahora solo habíamos limpiado el buffer de dibujado:

 EAGLView.m (7.3 Kb)
 EAGLView.h (1.29 Kb)

You may also like...

4 Responses

  1. Tony S. dice:

    Felicitaciones por tu blog. Es estupendo para ir aclarándose con esto del OpenGL.

    Saludos

  2. Eskema dice:

    Me surge una duda que tal vez estoy obviando. Si para dibujar un plano necesitamos 2 triangulos, lo cual son 6 vertices, ¿por que creas 12?, GLfloat spriteVertices[12];
    ¿No deberia ser solo 6? GLfloat spriteVertices[6];

    Saludos,

  3. neofar dice:

    se necesitan 2 triángulos, estos 2 triángulos comparten 2 vértices por lo que en realidad necesitamos 4 vértices …. y cada vértice tiene 3 coordenadas .. así que en nuestro array debe tener un espacio suficiente para que quepan 12 coordenadas

  4. Néstor dice:

    no! esos codigos me generan monton de errores

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *