1
« en: Miércoles 4 de Enero de 2006, 21:20 »
LLevo un par de semanas mirandome opengl, he conseguido hacer algun ejemplo sencillito usando visual basic.net.
El problema:
Tengo un programilla que dibuja la tipica tetera con glortho y la puedo rotar usando los cursores de direccion. el codigo es el siguiente:
Private Sub gl_SetupRC(ByVal sender As Object, ByVal e As System.EventArgs) Handles gl.SetupRC
gl.MakeCurrent()
gl.ClearColor(0.0!, 0.0!, 0.0!, 0.0!)
gl.Ortho(-150.0!, 150.0!, -150.0!, 150.0!, -150.0!, 150.0!)
gl.Color(255, 0, 0, 255)
gl.Flush()
gl.MakeNotCurrent()
End Sub
Private Sub gl_Render(ByVal sender As Object, ByVal e As System.EventArgs) Handles gl.Render
gl.MakeCurrent()
gl.Clear(gl.glColorBufferBit)
gl.auxWireTeapot(80.0!)
gl.Flush()
gl.MakeNotCurrent()
gl.SwapBuffers()
End Sub
Protected Overrides Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message, ByVal keyData As System.Windows.Forms.Keys) As Boolean
If keyData = Keys.Up Then
gl.MakeCurrent()
gl.Rotate(10.0!, 10.0!, 0.0!, 0.0!)
gl.MakeNotCurrent()
gl_Render(Nothing, Nothing)
ElseIf keyData = Keys.Down Then
gl.MakeCurrent()
gl.Rotate(10.0!, -10.0!, 0.0!, 0.0!)
gl.MakeNotCurrent()
gl_Render(Nothing, Nothing)
ElseIf keyData = Keys.Right Then
gl.MakeCurrent()
gl.Rotate(10.0!, 0.0!, 10.0!, 0.0!)
gl.MakeNotCurrent()
gl_Render(Nothing, Nothing)
ElseIf keyData = Keys.Left Then
gl.MakeCurrent()
gl.Rotate(10.0!, 0.0!, -10.0!, 0.0!)
gl.MakeNotCurrent()
gl_Render(Nothing, Nothing)
ElseIf keyData = Keys.Add Then
gl.MakeCurrent()
gl.Rotate(10.0!, 0.0!, 0.0!, 10.0!)
gl.MakeNotCurrent()
gl_Render(Nothing, Nothing)
ElseIf keyData = Keys.Subtract Then
gl.MakeCurrent()
gl.Rotate(10.0!, 0.0!, 0.0!, -10.0!)
gl.MakeNotCurrent()
gl_Render(Nothing, Nothing)
End If
End Function
Vale ahora quiero hacer lo mismo pero usando perspectiva, para ello cambie glortho por glfrustrum pero no se ve nada.
luego lo cambie por gluperspective de la siguiente manera
gl.gluperspetive(45.0!,1.0! (porque uso una ventana de 300X300),1.0!,400.0!)
entonces estoy dentro de la tetera y esta gira alrededor mio, supuse entonces que antes de dibujar la tetera deberia desplazarme hacia atras pera verla desde fuera entonces puse un
translate (0,0,-300) antes de dibujar la tetera, entonces veo esta bien, pero cuando toco los cursores para moverla desaparece de pantalla en vez de girar y no entiendo porque, he estado mirando tutorieles y ejem`plos y probando 50000 cosas y no consigo que funcione,
en resumen si alguien me puede poner el codigo sea en vb o en c++ para que funcione como ese primer programa que pegue pero en perspectiva se lo agradeceria