martes, 23 de julio de 2013

8 .-. Modelos 3D. Mallas. Renderizar Malla

Bien vamos allá con el renderizado de la malla. Repasemos algunos conceptos. Tenemos un fichero X que guarda el diseño de un coche que, supongamos, hemos hecho con Blender. Nuestro código carga el fichero X en un objeto de tipo Mesh al que acompañan colecciones de Materiales y Texturas.




Ahora vamos a renderizar nuestro coche a ver qué pasa. Lo primero será crear en Motor una rutina que dibuje la malla.

    Private Sub DibujaMalla(ByRef DP3 As Direct3D.Device, ByRef Mundo As Matrix, ByRef Mesh As Mesh, ByRef contador As Int32, ByRef Mat() As Material, ByRef Tex() As Texture)
        Try
            DP3.Transform.World = Mundo

            With Mesh
                For X = 0 To contador - 1
                    DP3.Material = Mat(X)
                    DP3.SetTexture(0, Tex(X))
                    Mesh.DrawSubset(X)
                Next X
            End With
        Catch ex As Exception

        End Try
    End Sub

La explicación es sencilla. Queremos dibujar en un lugar concreto nuestra mesh. Pues pasamos toda la información relacionada con la mesh más el lugar donde queremos dibujar (Mundo). Lo que hace la matriz básicamente es mover el renderizador a la posición indicada por Mundo, recorrer todos los SubSets de la malla (ya veremos lo que son) y dibujarlo todo.

Ahora nos vamos a Render, dentro de Motor y añadimos estas líneas. He incluido el final completo de Render para que veais por donde iría.


            'Coche
            Matriz_Mundo =
Matrix.Identity * Matrix.Translation(0, 0, 0)
            Me.DibujaMalla(DP3, Matriz_Mundo, CocheMesh, CocheContadorMateriales, CocheMaterials, CocheTextures)

            Me.PintaHud()

            DP3.EndScene()
            DP3.Present()

MAtrix.Traslation(0,0,0) mueve el renderizador a esa posición, si quereis el coche en otra posición teneis que tocar esa línea.

F5 y a probar.


No hay comentarios:

Publicar un comentario