opengl有关问题

jixiaoqiang 2006-03-21 02:29:15
问题:我照别人写的,为什么运行后看不道到效果,显示的是黑的,怎么改???


'下载vb的opengl开发库:http://home.pacific.net.hk/~edx/tlb.htm
Private hGLRC As Long
Private hPalette As Long
'创建设备描述表
Private Sub SetupPixelFomat(ByVal hDC As Long)
Dim pfd As PIXELFORMATDESCRIPTOR
'定义象素格式结构
Dim PixelFormat As Integer
Dim bSpf As Boolean
pfd.nSize = Len(pfd) '结构大小
pfd.nVersion = 1 '版本
'支持opengl,绘制到windows,支持双缓冲区,RGBA颜色模式
pfd.dwFlags = PFD_SUPPORT_OPENGL Or PFD_DRAW_TO_WINDOW Or PFD_DOUBLEBUFFER Or PFD_TYPE_RGBA
pfd.iPixelType = PFD_TYPE_RGBA
pfd.cColorBits = 16 '颜色索引位数
pfd.cDepthBits = 16 '深度缓冲区位数
pfd.iLayerType = PFD_MAIN_PLANE '主层类型
'下面为设备表述表得到最匹配得象素格式,确定pfd结构是否存在
PixelFormat = ChoosePixelFormat(hDC, pfd)
If PixelFormat = 0 Then
MsgBox "设备描述表支持得象素格式与给定象素格式不匹配", vbCritical, "错误"
End
End If
'设置设备描述表的象素格式
bSpf = SetPixelFormat(hDC, PixelFormat, pfd)
If bSpf = False Then
MsgBox "设置设备描述表象素格式失败!", vbInformation, "失败"
End
End If
End Sub


Private Sub Form_Initialize()
'创建着色描述表
'创建绘图描述表:hGLRC=wglCreateContext(hdc)
'使之成为当前绘图描述表:wglMakeCurrent hdc,hGLRC

SetupPixelFomat hDC '设置好当前绘制窗口的象素格式,一旦赋值,不能改动
'SetupPalette hDC '建立调色板
'hPalette = GetSystemPaletteUse(hDC)

hGLRC = wglCreateContext(hDC) '产生一个新的opengl绘图描述表
wglMakeCurrent hDC, hGLRC '建立当前线程绘图表述表
glMatrixMode GL_PROJECTION '投影变换
glFrustum -0.5, 0.5, -0.5, 0.5, 1, 3 '进行透视投影
glMatrixMode GL_MODELVIEW '取景变换
glTranslatef 0, 0, -2
glRotatef 30, 1, 0, 0
glRotatef 30, 0, 1, 0
glEnable GL_DEPTH_TEST '允许深度缓冲测试
glEnable GL_LIGHTING '起用亮度计算
glEnable GL_LIGHT0 '本文虽然使光源gl_light0生效,但并没有进行真正的光源gl_light0的设置
glEnable GL_DITHER '浓淡处理
End Sub

Private Sub Form_Paint()
'真正的绘图工作放在form_paint中完成
'绘图前,清除颜色缓冲区和深度缓冲区
glClear GL_COLOR_BUFFER_BIT Or GL_DEPTH_BUFFER_BIT
glBegin GL_QUADS '画一个正方体
'..... '略
glEnd
SwapBuffers hDC '交换前后台缓冲区
End Sub

Private Sub Form_Resize()
glViewport 0, 0, Me.ScaleWidth, Me.ScaleHeight '定义视见区,这是典型的位置
End Sub

Private Sub Form_Unload(Cancel As Integer)
If hGLRC <> 0 Then '把绘图描述表冲线程上脱离并删除
wglMakeCurrent 0, 0
wglDeleteContext hGLRC
End If
If hPalette <> 0 Then
DeleteObject hPalette
End If
End Sub

Private Sub Timer1_Timer()
'在定时器中实现动画的播放 间隔50毫秒
glRotatef 5, 1, 0, 0
glRotatef 5, 0, 1, 0
Form_Paint
End Sub
...全文
108 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
jixiaoqiang 2006-04-19
  • 打赏
  • 举报
回复
zai f u c k yici!
jixiaoqiang 2006-04-05
  • 打赏
  • 举报
回复
没有人知道吗?没有人愿意试吗? 我日!
jixiaoqiang 2006-03-21
  • 打赏
  • 举报
回复
靠,自己顶一下
代码我都帮打出来了,还没有人帮忙看一下,改一下下!!!!???
ZOU_SEAFARER 2006-03-21
  • 打赏
  • 举报
回复
我不晓得啦,呵呵

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧