Bien. En el anterior post teníamos el problema de que veíamos las escena "del revés" es decir, lo que debería de ser la parte Y+ se veía en Y- y esto es debido a la característica de Left Hand de los sistemas de coordenadas que estamos empleando. ¿Qué hago?¿Qué ocurre?
No pasa nada. Simplemente tenemos que invertir lo que vemos haciendo que el "Mundo" rote completamente a través del eje X la mitad de una vuelta. ¿Eh?
Sencillo, vamos la clase Motor al Sub que controla nuestras matrices que tiene este aspecto:
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
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
Si os fijáis en la parte de arriba de Motor hemos declarado las matrices de Vista, Proyección y Mundo, pero la de mundo no la estamos empleando, pues bien, vamos a emplearla para hacer que todo el 3D rote 180 grados sobre el eje X.
Public Sub Control_Matrices(ByRef VC As Vector3, ByRef DP3 As Direct3D.Device)
Try
Matriz_Mundo = Matrix.Identity * Matrix.RotationX(Math.PI)
DP3.Transform.World = Matriz_Mundo
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
MessageBox.Show(ex.Message)
End Try
End Sub
Try
Matriz_Mundo = Matrix.Identity * Matrix.RotationX(Math.PI)
DP3.Transform.World = Matriz_Mundo
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
MessageBox.Show(ex.Message)
End Try
End Sub
Lo que hacemos es inicializar la matriz mundo a la identidad y aplicarle una rotación de PI radianes en el eje X mediante RotationX. Si ahora probáis vereis que ya funciona bien y que las Y son correctas.
No hay comentarios:
Publicar un comentario