domingo, 23 de junio de 2013

3 .-. Mundo, Proyecciones, Cámara. (IV)

Bien nuestro último paso es crear algo que maneje correctamente todas estas situaciones de la cámara, la proyección etc. Para eso vamos a Motor y definimos las siguientes matrices para trabajar.


  Private Matriz_Vista As Matrix
  Private Matriz_Proyeccion As Matrix
  Private Matriz_Mundo As Matrix

Una vez hecho esto vamos a crear un SUB:

    Public Sub Control_Matrices(ByRef VC As Vector3, ByRef DP3 As Direct3D.Device)

        Try
            Matriz_Vista = Matrix.LookAtLH(VC, New Vector3(0, 0, 0), New Vector3(0, 1, 0))
            DP3.Transform.View = Matriz_Vista

            Matriz_Proyeccion = Matrix.PerspectiveFovLH(FOV, Ratio, Z_Cerca, Z_Lejos)
            DP3.Transform.Projection = Matriz_Proyeccion

        Catch ex As Exception

        End Try

    End Sub

Este "Control_Matrices" va a recibir dos cosas, por un lado VC que es un vector3D que representa la posición de la cámara en el espacio (WORLD). Con LookAtLH creamos una matriz 4x4 que indica 3 valores: donde está la cámara (VC), hacia donde está mirando la cámara (0,0,0) y cual es la parte de arriba del mundo (el vector con la componente Y = 1).

Por otra parte la matrix de proyección emplea los valores que vimos de FOV, Ratio y Z_Cerca y Lejos).

El último paso para que esto funcione es incluir el control de la cámara dentro del bucle principal, pero tendremos que definir dentro de FORM1:

    Private PosicionCamara As New Vector3

 Y modificar el SUB Bucle para que quede asi:

Private Sub Bucle()
Try
Do While Start = True
Engine.Control_Matrices(PosicionCamara, Dispo3D)
Engine.Render(Dispo3D)
Application.DoEvents()
Loop
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub

No hay comentarios:

Publicar un comentario