Aprende a desarrollar aplicaciones gráficas 2D y 3D paso a paso.
Programacion Grafica: Desarrollo 2D/3D con C++ y DirectX/OpenGL/GLUT/SDL - Windows/Linux


  Crear una cuenta
 • Portada • Descargas • Tu Cuenta • 
Menú
 Portada
 Noticias
 Archivo de Noticias
 Temas
 Descargas
 Inicio
 Ver Nuevas
 Más Popular
 Más Votadas
 Contenido
 Contenido
 Secciones
 Enciclopedia
 Revisiones
 FAQ
 Tus Opciones
 Tu Cuenta
 Mensajes Privados
 Recomiéndenos
 Buscar
 Diarios
 Contacto
 Enlaces Web
 Inicio
 Enviar Enlace
 Ver Nuevos
 Más Popular
 Más Valorados
 Estadísticas
 Inicio
 Detalladas
 Top 10
 
Estadísticas
 
Tutorial 09 - Cubo-3D 
DirectX/Opengl

Por fin llegan las 3-D. Vamos a ver un sencillo ejemplo en el cual vamos a renderizar un cubo en modo malla ya que hasta el siguiente tutorial en el que añadiremos iluminación, no podremos ver un objeto sólido correctamente.



Para renderizar un cubo, necesitamos especificar unos puntos en el espacio 3-D con coordenadas (x,y,z). En OpenGL, la coordenada X es el eje horizontal, la Y el eje vertical y la Z es el eje de profundidad con valor positivo hacia fuera de la pantalla.

Así que nuestro cubo estará formado por 8 vértices que para renderizarlos los recorreremos en el orden indicado por el array de índices, cuyo valor indica qué vértice debe renderizarse en cada momento.


//      v7     v6
//      *------*
//   v4/.  v5 /|
//    *-----*  |
//   v|3*...|..* v2
//    |.    | /
//    *-----*/
//   v0     v1
float GraphicApplication::m_Cube[8][3] =
{
    {-5,-5, 5}, /* v0 */
    { 5,-5, 5}, /* v1 */
    { 5,-5,-5}, /* v2 */
    {-5,-5,-5}, /* v3 */
    {-5, 5, 5}, /* v4 */
    { 5, 5, 5}, /* v5 */
    { 5, 5,-5}, /* v6 */
    {-5, 5,-5}  /* v7 */
};

// Recorrido: v4,v0,v5,v1,v6,v2,v7,v3,v4,v0
int GraphicApplication::m_IndexCube[10]= {4,0,5,1,6,2,7,3,4,0};

De esta forma, renderizar el cubo resulta sencillo, sólo hay quer recorrer el array de índices renderizando cada vértice que éste nos indica:


///////////////////////////////////////////////////////////////////////////////
///     RenderObjects: Dibuja las geometrías.
///
///     @param  nada
///
///     @return  nada
///////////////////////////////////////////////////////////////////////////////
void GraphicApplication::RenderObjects()
{
    Vertex vertexArray[10];

    if ( m_pVideoDriver )
    {
// ********************************* NEW **************************************

        for (int i=0; i<10; i++)
        {
            vertexArray[i].x= m_Cube[m_IndexCube[i]][0];
            vertexArray[i].y= m_Cube[m_IndexCube[i]][1];
            vertexArray[i].z= m_Cube[m_IndexCube[i]][2];
            vertexArray[i].color.rgba= 0xffffffff;
        }

        m_pVideoDriver->RenderVertexArray( eTriangleStrip, (BYTE*)vertexArray, sizeof(Vertex), 0, 10, eFVF_XYZ|eFVF_DIFFUSE );

// ****************************************************************************
    }
}

Para que el cubo tenga un aspecto en perspectiva, usaremos ahora una proyección diferente, en la que se especifica el valor de perspeciva (FOV) la relación de aspecto ancho/alto de la pantalla:


m_pVideoDriver->SetPerspective( FOV, m_WindowProps.width, m_WindowProps.height );

Finalmente, hay que especificar el punto de vista del observador mediante LookAt().


m_pVideoDriver->LookAt( Vector3(10.0f, 2.0f,30.0f) ,    // Posición de la cámara.
                        Vector3( 0.0f, 0.0f, 0.0f) ,    // A dónde mira.
                        Vector3( 0.0f, 1.0f, 0.0f) );   // Dónde se encuentra el "techo", eje Y. 

Podéis descargaros el ejemplo: tutorial-09.zip



Nota: Compartir en Facebook
Enviado el Miércoles, 05 septiembre a las 19:21:05 por administrador
 
Enlaces Relacionados
· Más Acerca de DirectX/Opengl
· Noticias de administrador


Noticia más leída sobre DirectX/Opengl:
Tutorial 16 - Movimiento-3D - (Tercera Persona)

 
Votos del Artículo
Puntuación Promedio: 5
votos: 2


Por favor tómate un segundo y vota por este artículo:
Excelente
Muy Bueno
Bueno
Regular
Malo

 
Opciones

 Versión Imprimible  Versión Imprimible

 
"Tutorial 09 - Cubo-3D" | Entrar / Crear Cuenta | 0 Comentarios
Los comentarios son propiedad de quien los envió. No somos responsables por su contenido.

No se permiten comentarios Anónimos, Regístrese por favor

Sitio potenciado por NukeProjects.Net        NukeStilo 1.0 se basa en PHP-Nuke        Theme Diseñado por NukeMods

© Antonio Lucas Moreno