要想在VB6.0中使用OpenGL绘图,必须先下载一个SDK,名字叫vbogl.tlb。我用的版本是2.1,这个月要出3.0版本的了。
下载该文件后,直接在VB6.0“工程”-“引用”里面引用
1、在form中加入一个PictureBox控件
2、要在Windows里面使用OpenGL,必须先进行像素格式设置,函数代码如下
Dim hRC As Long’全局变量
'启用OGL
Sub EnableOpenGL(ghDC As Long)
On Error GoTo Err
Dim pfd As PIXELFORMATDESCRIPTOR 'pfd像素格式设置.
ZeroMemory pfd, Len(pfd)
pfd.nSize = Len(pfd) '大小
pfd.nVersion = 1 '版本
pfd.dwFlags = PFD_DRAW_TO_WINDOW Or PFD_SUPPORT_OPENGL Or PFD_DOUBLEBUFFER '标志
pfd.iPixelType = PFD_TYPE_RGBA '像素类型
pfd.cColorBits = 24 '颜色位数
pfd.cDepthBits = 32 '位宽
pfd.iLayerType = PFD_MAIN_PLANE '图层类型
Dim PixFormat As Long
PixFormat = ChoosePixelFormat(ghDC, pfd) '选择设备中最匹配我们所设置的像素
SetPixelFormat ghDC, PixFormat, pfd '设置成当前的像素
hRC = wglCreateContext(ghDC) '建立翻译描述表
wglMakeCurrent ghDC, hRC '将建立的翻译描述表设置为当前
Exit Sub
Err:
MsgBox "Can't create OpenGL context!", vbCritical, "Error"
End
End Sub
在工程的FORM的load中加入调用代码
Call EnableOpenGL(Picture1.hDC)
3、与启用对应的禁用
'禁用OGL
Sub DisableOpenGL()
wglMakeCurrent 0, 0
wglDeleteContext hRC
End Sub
在工程的form的unload中加入禁用代码
Call DisableOpenGL
4、绘图
下例为红宝书第一个例子
Private Sub Display()
glClearColor 0#, 0#, 1#, 0# '清空颜色缓存的RGBA颜色值
glClear clrColorBufferBit '为绘下帧曲面清除缓冲区
glColor3f 0.8, 0.3, 0.5 '设置显示的字体颜色
glPushMatrix '依据当前模式(模式-视图矩阵)使矩阵入栈
glBegin glBeginModeConstants.bmPolygon '开始绘图,绘制一个四边形
glVertex2f -0.5, -0.5 '四边形的4个顶点
glVertex2f -0.5, 0.5
glVertex2f 0.5, 0.5
glVertex2f 0.5, -0.5
glEnd
glPopMatrix '依据当前模式(模式-视图矩阵)使矩阵出栈
SwapBuffers Picture1.hDC '切换缓存
End Sub
5、在PictureBox1的PAINT事件,调用显示的函数
Display
运行程序 ,得出的图像如下