抄袭NEHE的例子,现在还不知道怎么实现,貌似比较复杂!
昨天晚上实现了2D的平面底图和3D物体的综合,感觉不错,就是效果差了一点。
下面这个是主要的Paint代码部分。
' 我自己的 OpenGL 代码。
PaintGL #Region "PaintGL"
Public Sub PaintGL()Sub PaintGL()
Gl.glClear(Gl.GL_COLOR_BUFFER_BIT + Gl.GL_DEPTH_BUFFER_BIT) ' Clear Screen And Depth Buffer
' 绘制背景图。
Gl.glMatrixMode(Gl.GL_PROJECTION)
Gl.glPushMatrix()
Gl.glLoadIdentity()
Gl.glOrtho(0, form.Width, 0, form.Height, -1, 1)
Gl.glMatrixMode(Gl.GL_MODELVIEW)
Gl.glPushMatrix()
Gl.glLoadIdentity()
Gl.glDepthMask(Gl.GL_FALSE)
Gl.glDisable(Gl.GL_DEPTH_TEST)
Gl.glDisable(Gl.GL_LIGHTING)
Gl.glEnable(Gl.GL_TEXTURE_2D)
Gl.glBindTexture(Gl.GL_TEXTURE_2D, texture(1))
Gl.glColor3ub(255, 255, 255)
Gl.glBegin(Gl.GL_QUADS)
Gl.glTexCoord2i(0, 0)
Gl.glVertex2i(0, 0)
Gl.glTexCoord2i(1, 0)
Gl.glVertex2i(form.Width, 0)
Gl.glTexCoord2i(1, 1)
Gl.glVertex2i(form.Width, form.Height)
Gl.glTexCoord2i(0, 1)
Gl.glVertex2i(0, form.Height)
Gl.glEnd()
'Gl.glDisable(Gl.GL_TEXTURE_2D)
'Gl.glEnable(Gl.GL_LIGHTING)
Gl.glEnable(Gl.GL_DEPTH_TEST)
Gl.glDepthMask(Gl.GL_TRUE)
Gl.glMatrixMode(Gl.GL_PROJECTION)
Gl.glPopMatrix()
Gl.glMatrixMode(Gl.GL_MODELVIEW)
Gl.glPopMatrix()
Gl.glPushMatrix()
' 绘制矩形/立方体
Gl.glLoadIdentity()
Gl.glTranslatef(xOffset, yOffset, zoom)
' 旋转
Gl.glRotatef(xRot, 1, 0, 0)
Gl.glRotatef(yRot, 0, 1, 0)
Gl.glRotatef(zRot, 0, 0, 1)
' 绑定纹理
Gl.glBindTexture(Gl.GL_TEXTURE_2D, texture(0))
Gl.glBegin(Gl.GL_QUADS)
' 顶面
'Gl.glColor3f(0.5, 0.5, 1.0): Gl.glTexCoord2f(0, 0)
Gl.glColor3f(1, 1, 1)
Gl.glVertex3f(1, 0.5, -0.02) ' : Gl.glTexCoord2f(1, 0)
Gl.glVertex3f(-1, 0.5, -0.02) 'Gl.glTexCoord2f(1, 1) :
Gl.glVertex3f(-1, 0.5, 0.02) 'Gl.glTexCoord2f(0, 1) :
Gl.glVertex3f(1, 0.5, 0.02) '
' 地面
'Gl.glColor3f(1.0, 0.5, 0.0) ' : Gl.glTexCoord2f(0, 0)
Gl.glVertex3f(1.0, -0.5, 0.02) ' Gl.glTexCoord2f(1, 0) :
Gl.glVertex3f(-1.0, -0.5, 0.02) ' Gl.glTexCoord2f(1, 1) :
Gl.glVertex3f(-1.0, -0.5, -0.02) ' Gl.glTexCoord2f(0, 1) :
Gl.glVertex3f(1.0, -0.5, -0.02)
' 正面
Gl.glColor3f(1.0, 1.0, 1.0)
Gl.glTexCoord2f(1, 1)
Gl.glVertex3f(1.0, 0.5, 0.02)
Gl.glTexCoord2f(0, 1)
Gl.glVertex3f(-1.0, 0.5, 0.02)
Gl.glTexCoord2f(0, 0)
Gl.glVertex3f(-1.0, -0.5, 0.02)
Gl.glTexCoord2f(1, 0)
Gl.glVertex3f(1.0, -0.5, 0.02)
' 后面
'Gl.glColor3f(1.0, 1.0, 1.0) ' Gl.glTexCoord2f(0, 0) :
Gl.glVertex3f(1.0, -0.5, -0.02) ' Gl.glTexCoord2f(1, 0) :
Gl.glVertex3f(-1.0, -0.5, -0.02) ' Gl.glTexCoord2f(1, 1) :
Gl.glVertex3f(-1.0, 0.5, -0.02) ' Gl.glTexCoord2f(0, 1) :
Gl.glVertex3f(1.0, 0.5, -0.02)
' 左侧面
'Gl.glColor3f(0.0, 0.0, 1.0) ' Gl.glTexCoord2f(0, 0) :
Gl.glVertex3f(-1.0, 0.5, 0.02) ' Gl.glTexCoord2f(1, 0) :
Gl.glVertex3f(-1.0, 0.5, -0.02) ' Gl.glTexCoord2f(1, 1) :
Gl.glVertex3f(-1.0, -0.5, -0.02) ' Gl.glTexCoord2f(0, 1) :
Gl.glVertex3f(-1.0, -0.5, 0.02)
' 右侧面
'Gl.glColor3f(1.0, 0.0, 1) ' Gl.glTexCoord2f(0, 0) :
Gl.glVertex3f(1.0, 0.5, -0.02) ' Gl.glTexCoord2f(1, 0) :
Gl.glVertex3f(1.0, 0.5, 0.02) ' Gl.glTexCoord2f(1, 1) :
Gl.glVertex3f(1.0, -0.5, 0.02) ' Gl.glTexCoord2f(0, 1) :
Gl.glVertex3f(1.0, -0.5, -0.02)
Gl.glEnd()
Gl.glPopMatrix()
rTri += 1.0
rQuad -= 0.5
End Sub
#End Region
PaintGL #Region "PaintGL"
Public Sub PaintGL()Sub PaintGL()
Gl.glClear(Gl.GL_COLOR_BUFFER_BIT + Gl.GL_DEPTH_BUFFER_BIT) ' Clear Screen And Depth Buffer
' 绘制背景图。
Gl.glMatrixMode(Gl.GL_PROJECTION)
Gl.glPushMatrix()
Gl.glLoadIdentity()
Gl.glOrtho(0, form.Width, 0, form.Height, -1, 1)
Gl.glMatrixMode(Gl.GL_MODELVIEW)
Gl.glPushMatrix()
Gl.glLoadIdentity()
Gl.glDepthMask(Gl.GL_FALSE)
Gl.glDisable(Gl.GL_DEPTH_TEST)
Gl.glDisable(Gl.GL_LIGHTING)
Gl.glEnable(Gl.GL_TEXTURE_2D)
Gl.glBindTexture(Gl.GL_TEXTURE_2D, texture(1))
Gl.glColor3ub(255, 255, 255)
Gl.glBegin(Gl.GL_QUADS)
Gl.glTexCoord2i(0, 0)
Gl.glVertex2i(0, 0)
Gl.glTexCoord2i(1, 0)
Gl.glVertex2i(form.Width, 0)
Gl.glTexCoord2i(1, 1)
Gl.glVertex2i(form.Width, form.Height)
Gl.glTexCoord2i(0, 1)
Gl.glVertex2i(0, form.Height)
Gl.glEnd()
'Gl.glDisable(Gl.GL_TEXTURE_2D)
'Gl.glEnable(Gl.GL_LIGHTING)
Gl.glEnable(Gl.GL_DEPTH_TEST)
Gl.glDepthMask(Gl.GL_TRUE)
Gl.glMatrixMode(Gl.GL_PROJECTION)
Gl.glPopMatrix()
Gl.glMatrixMode(Gl.GL_MODELVIEW)
Gl.glPopMatrix()
Gl.glPushMatrix()
' 绘制矩形/立方体
Gl.glLoadIdentity()
Gl.glTranslatef(xOffset, yOffset, zoom)
' 旋转
Gl.glRotatef(xRot, 1, 0, 0)
Gl.glRotatef(yRot, 0, 1, 0)
Gl.glRotatef(zRot, 0, 0, 1)
' 绑定纹理
Gl.glBindTexture(Gl.GL_TEXTURE_2D, texture(0))
Gl.glBegin(Gl.GL_QUADS)
' 顶面
'Gl.glColor3f(0.5, 0.5, 1.0): Gl.glTexCoord2f(0, 0)
Gl.glColor3f(1, 1, 1)
Gl.glVertex3f(1, 0.5, -0.02) ' : Gl.glTexCoord2f(1, 0)
Gl.glVertex3f(-1, 0.5, -0.02) 'Gl.glTexCoord2f(1, 1) :
Gl.glVertex3f(-1, 0.5, 0.02) 'Gl.glTexCoord2f(0, 1) :
Gl.glVertex3f(1, 0.5, 0.02) '
' 地面
'Gl.glColor3f(1.0, 0.5, 0.0) ' : Gl.glTexCoord2f(0, 0)
Gl.glVertex3f(1.0, -0.5, 0.02) ' Gl.glTexCoord2f(1, 0) :
Gl.glVertex3f(-1.0, -0.5, 0.02) ' Gl.glTexCoord2f(1, 1) :
Gl.glVertex3f(-1.0, -0.5, -0.02) ' Gl.glTexCoord2f(0, 1) :
Gl.glVertex3f(1.0, -0.5, -0.02)
' 正面
Gl.glColor3f(1.0, 1.0, 1.0)
Gl.glTexCoord2f(1, 1)
Gl.glVertex3f(1.0, 0.5, 0.02)
Gl.glTexCoord2f(0, 1)
Gl.glVertex3f(-1.0, 0.5, 0.02)
Gl.glTexCoord2f(0, 0)
Gl.glVertex3f(-1.0, -0.5, 0.02)
Gl.glTexCoord2f(1, 0)
Gl.glVertex3f(1.0, -0.5, 0.02)
' 后面
'Gl.glColor3f(1.0, 1.0, 1.0) ' Gl.glTexCoord2f(0, 0) :
Gl.glVertex3f(1.0, -0.5, -0.02) ' Gl.glTexCoord2f(1, 0) :
Gl.glVertex3f(-1.0, -0.5, -0.02) ' Gl.glTexCoord2f(1, 1) :
Gl.glVertex3f(-1.0, 0.5, -0.02) ' Gl.glTexCoord2f(0, 1) :
Gl.glVertex3f(1.0, 0.5, -0.02)
' 左侧面
'Gl.glColor3f(0.0, 0.0, 1.0) ' Gl.glTexCoord2f(0, 0) :
Gl.glVertex3f(-1.0, 0.5, 0.02) ' Gl.glTexCoord2f(1, 0) :
Gl.glVertex3f(-1.0, 0.5, -0.02) ' Gl.glTexCoord2f(1, 1) :
Gl.glVertex3f(-1.0, -0.5, -0.02) ' Gl.glTexCoord2f(0, 1) :
Gl.glVertex3f(-1.0, -0.5, 0.02)
' 右侧面
'Gl.glColor3f(1.0, 0.0, 1) ' Gl.glTexCoord2f(0, 0) :
Gl.glVertex3f(1.0, 0.5, -0.02) ' Gl.glTexCoord2f(1, 0) :
Gl.glVertex3f(1.0, 0.5, 0.02) ' Gl.glTexCoord2f(1, 1) :
Gl.glVertex3f(1.0, -0.5, 0.02) ' Gl.glTexCoord2f(0, 1) :
Gl.glVertex3f(1.0, -0.5, -0.02)
Gl.glEnd()
Gl.glPopMatrix()
rTri += 1.0
rQuad -= 0.5
End Sub
#End Region