NUESTRO PRIMER PROGRAMA

Antes de todo vamos a indicar a visual basic donde puedes encontrar la librería OpenGl para visual basic 6 es (vbogl.tlb). La cual nos podemos bajar de aqui. Y para utilizar OpenGL con visual Basic 2008 utilizaremos las TAO que la podemos descargar de aquí. Primero de todo tenemos que instalar las TAO, si utilizáis Windows os podéis descargar el ejecutable que instalara las librerías.

Empezemos a programar!! bueno.. cada uno lo hace a su manera, yo he creado una clase a la que le llamo OGL pero tambien las podriamos hacer en un modulo normal. En esta clase defino 2 funciones una la inicialización de la ventana a la que le llamare InitOPENGL y otra Render que sera la encargada de dibujar nuestras escenas.

Vamos a ver estas dos funciones:

Inicialitzación

Public Sub InitOPENGL(ByVal ghDC As System.IntPtr)

Dim pfd As Gdi.PIXELFORMATDESCRIPTOR
Dim PixelFormat As Integer

hDc = ghDC
ZeroMemory(pfd, Len(pfd))
pfd.nSize = Len(pfd)
pfd.nVersion = 1
pfd.dwFlags = Gdi.PFD_DRAW_TO_WINDOW Or Gdi.PFD_SUPPORT_OPENGL Or Gdi.PFD_DOUBLEBUFFER
pfd.iPixelType = Gdi.PFD_TYPE_RGBA
pfd.cColorBits = 32
pfd.cDepthBits = 32
pfd.cStencilBits = 32
pfd.iLayerType = Gdi.PFD_MAIN_PLANE

PixelFormat = Gdi.ChoosePixelFormat(ghDC, pfd)

If PixelFormat = 0 Then

MessageBox.Show("Imposible obtener el formato de los pixels")
End

End If

If Not (Gdi.SetPixelFormat(ghDC, PixelFormat, pfd)) Then

MessageBox.Show("Imposible establecer formato de pixel")
End

End If

hRC = Wgl.wglCreateContext(ghDC)
If hRC.ToInt32 = 0 Then

MessageBox.Show("imposible obtener el contexto del renderizado")
End

End If

If Not (Wgl.wglMakeCurrent(ghDC, hRC)) Then

MessageBox.Show("Imposible hacer el contexto del renderizado")
End

End If

Inicializaciones()

End Sub

Render ( Renderizar )

Tenemos que definir una función que es la que contendra la escena que se va a dibujar, esta función restaurara el frame del buffer, yo definire esta función como Render .

Esta función se tiene que ejecutar dentro de un bucle para que se vaya actualizando nuestra animacion, ya sea un Timer o un bucle 'infinito' y controlar los eventos mediante DoEvents, este es el metodo que uso para los ejemplos.

Private Sub Render()

Gl.glClear(Gl.GL_COLOR_BUFFER_BIT Or Gl.GL_DEPTH_BUFFER_BIT)

'AQUI DIBUJAREMOS NUESTRA ESCENA

Application.DoEvents()

Gdi.SwapBuffers(hDc)

End Sub

Y en el formulario ponemos un PictureBox. El PictureBox sera nuestra pantalla para dibujar, si quisieramos dibujar en otro objeto lo podemos hacer si el objecto contiene el Handle, por ejemplo los formularios tienen Handle por lo que tambien podriamos dibujar directamente en el formulario.

DESCARGATE AQUI EL EJEMPLO

 

Director Web Directorio AdirLink directorio web Agregar Web
Directorio Gratis Pala.net directorio de enlaces Pala.net directorio de enlaces