• Viernes 3 de Mayo de 2024, 15:50

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - djcloud

Páginas: [1]
1
OpenGL / Problemas Con La Perspectiva
« 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

Páginas: [1]