Public mouDownX As Float
Public mouDownY As Float
Public Listas As Integer
Public Sub Form_Open()
Debug "open"
End
Public Sub Form_Resize()
gl.Viewport(0, 0, GLArea1.w, GLArea1.h) 'esto le dice a GL adonde debe dibujar
gl.LoadIdentity 'esto pone todas las transformaciones del dibujo al inicio
gl.Scalef(0.5, 0.5, 0.5) 'esto achica los dibujos, si pones 0.01, tus coordenadas iran de -100 a 100
Debug "resizada"
End
Public Sub Form_Activate()
Debug "activada"
GenerarListas
End
Public Sub GLArea1_Draw()
gl.ClearColor(0, 0.5, 0, 1) 'elijo el color con el que voy a borrar la pantalla, en vez de 0-255, aqui los colores van de 0.0-1.0
' el formato es R-G-B-Alpha
gl.Clear(gl.COLOR_BUFFER_BIT Or gl.DEPTH_BUFFER_BIT) 'ahora borro la pantalla y el buffer de profundidad (los Z)
gl.Enable(gl.DEPTH_TEST) ' queremos que lo que esta atras quede oculto por lo que esta adelante
gl.CallList(listas) 'dibujo lo que genere antes
End
Private Sub GenerarListas()
'Leccion 4: Listas de dibujos
' en lugar de dibujar todo cada vez que se ejecura Draw, hago que OpenGL guarde una lista de cosas a dibujar
' luego solo cambio las rotaciones y llamo a la lista de dibujos
listas = gl.GenLists(1) 'genero el ID para 1 listas de dibujos, si ponia nListas en vez de 1 los ID eran lista+1 , lista+2...lista+n
If Not gl.IsList(listas) Then
Message("No puedo crear las listas")
Me.Close
Endif
gl.NewList(listas, gl.COMPILE) 'empiezo una lista de tareas
gl.Begin(gl.TRIANGLES) 'dibujamos triangulos hasta nuevo aviso
'establecemos el color hasta nuevo aviso
gl.Color3f(255, 0, 0)
gl.Vertex3f(0, 0, 0) 'el punto 0,0 no esta en arriba a la izquierda, para openGL esta en el medio!!!
gl.Vertex3f(1, 0, 0) ' 1 no es pixels, las coordenadas van de -1 a 1 , o sea, para eje X, 1 de openGL es GLArea1.width/2
gl.Vertex3f(0, 1, 0) ' idem para la coordenada Y
gl.Color3f(0, 255, 0) 'verde hasta nuevo aviso, como veran puede estar dentro o fuera de los gl.Begin() - gl.End
gl.Vertex3f(0, 0, 0)
gl.Vertex3f(-1, 0, 0)
gl.Vertex3f(0, -1, 0)
gl.End 'esto es similar al Paint, todo se encierra entre Begin-End
gl.Begin(gl.QUADS)
gl.Color3f(0, 0, 255)
gl.Vertex3f(-0.5, -0.5, 0.5)
gl.Vertex3f(-0.5, 0.5, 0.5) ' cambie de 2f (o sea 2 floats) a 3f
gl.Vertex3f(0.5, 0.5, 0.5) ' con 2f, la coordenada z (profundidad) era 0, ahora la escribo
gl.Vertex3f(0.5, -0.5, 0.5) ' por si no se dieron cuenta 2i equivale a 2 integers, o sea el argumento de la funcion se toma entero
gl.Color3f(0, 128, 128)
gl.Vertex3f(-0.5, -0.5, -0.5)
gl.Vertex3f(-0.5, 0.5, -0.5)
gl.Vertex3f(0.5, 0.5, -0.5) ' un verde mas claro, en otra profundidad
gl.Vertex3f(0.5, -0.5, -0.5)
gl.End
gl.EndList
End
Public Sub GLArea1_MouseMove()
If Mouse.Left Then
anguloY = (Mouse.X - mouDownX) * 0.01
anguloX = (Mouse.y - mouDownY) * 0.01
gl.Rotatef(- anguloX, 1, 0, 0) ' rotamos los dibujos 30 grados alrededor de un vector que va del 0,0,0 al 1,0.5,0
gl.Rotatef(- anguloY, 0, 1, 0) ' rotamos los dibujos 30 grados alrededor de un vector que va del 0,0,0 al 1,0.5,0
GLArea1.Refresh
Endif
End
Public Sub GLArea1_MouseDown()
mouDownX = Mouse.X
mouDownY = Mouse.y
End
Public mouDownY As Float
Public Listas As Integer
Public Sub Form_Open()
Debug "open"
End
Public Sub Form_Resize()
gl.Viewport(0, 0, GLArea1.w, GLArea1.h) 'esto le dice a GL adonde debe dibujar
gl.LoadIdentity 'esto pone todas las transformaciones del dibujo al inicio
gl.Scalef(0.5, 0.5, 0.5) 'esto achica los dibujos, si pones 0.01, tus coordenadas iran de -100 a 100
Debug "resizada"
End
Public Sub Form_Activate()
Debug "activada"
GenerarListas
End
Public Sub GLArea1_Draw()
gl.ClearColor(0, 0.5, 0, 1) 'elijo el color con el que voy a borrar la pantalla, en vez de 0-255, aqui los colores van de 0.0-1.0
' el formato es R-G-B-Alpha
gl.Clear(gl.COLOR_BUFFER_BIT Or gl.DEPTH_BUFFER_BIT) 'ahora borro la pantalla y el buffer de profundidad (los Z)
gl.Enable(gl.DEPTH_TEST) ' queremos que lo que esta atras quede oculto por lo que esta adelante
gl.CallList(listas) 'dibujo lo que genere antes
End
Private Sub GenerarListas()
'Leccion 4: Listas de dibujos
' en lugar de dibujar todo cada vez que se ejecura Draw, hago que OpenGL guarde una lista de cosas a dibujar
' luego solo cambio las rotaciones y llamo a la lista de dibujos
listas = gl.GenLists(1) 'genero el ID para 1 listas de dibujos, si ponia nListas en vez de 1 los ID eran lista+1 , lista+2...lista+n
If Not gl.IsList(listas) Then
Message("No puedo crear las listas")
Me.Close
Endif
gl.NewList(listas, gl.COMPILE) 'empiezo una lista de tareas
gl.Begin(gl.TRIANGLES) 'dibujamos triangulos hasta nuevo aviso
'establecemos el color hasta nuevo aviso
gl.Color3f(255, 0, 0)
gl.Vertex3f(0, 0, 0) 'el punto 0,0 no esta en arriba a la izquierda, para openGL esta en el medio!!!
gl.Vertex3f(1, 0, 0) ' 1 no es pixels, las coordenadas van de -1 a 1 , o sea, para eje X, 1 de openGL es GLArea1.width/2
gl.Vertex3f(0, 1, 0) ' idem para la coordenada Y
gl.Color3f(0, 255, 0) 'verde hasta nuevo aviso, como veran puede estar dentro o fuera de los gl.Begin() - gl.End
gl.Vertex3f(0, 0, 0)
gl.Vertex3f(-1, 0, 0)
gl.Vertex3f(0, -1, 0)
gl.End 'esto es similar al Paint, todo se encierra entre Begin-End
gl.Begin(gl.QUADS)
gl.Color3f(0, 0, 255)
gl.Vertex3f(-0.5, -0.5, 0.5)
gl.Vertex3f(-0.5, 0.5, 0.5) ' cambie de 2f (o sea 2 floats) a 3f
gl.Vertex3f(0.5, 0.5, 0.5) ' con 2f, la coordenada z (profundidad) era 0, ahora la escribo
gl.Vertex3f(0.5, -0.5, 0.5) ' por si no se dieron cuenta 2i equivale a 2 integers, o sea el argumento de la funcion se toma entero
gl.Color3f(0, 128, 128)
gl.Vertex3f(-0.5, -0.5, -0.5)
gl.Vertex3f(-0.5, 0.5, -0.5)
gl.Vertex3f(0.5, 0.5, -0.5) ' un verde mas claro, en otra profundidad
gl.Vertex3f(0.5, -0.5, -0.5)
gl.End
gl.EndList
End
Public Sub GLArea1_MouseMove()
If Mouse.Left Then
anguloY = (Mouse.X - mouDownX) * 0.01
anguloX = (Mouse.y - mouDownY) * 0.01
gl.Rotatef(- anguloX, 1, 0, 0) ' rotamos los dibujos 30 grados alrededor de un vector que va del 0,0,0 al 1,0.5,0
gl.Rotatef(- anguloY, 0, 1, 0) ' rotamos los dibujos 30 grados alrededor de un vector que va del 0,0,0 al 1,0.5,0
GLArea1.Refresh
Endif
End
Public Sub GLArea1_MouseDown()
mouDownX = Mouse.X
mouDownY = Mouse.y
End