VB开发OpenGL绘制三维地质构造图

VB开发OpenGL绘制三维地质构造图
1.前言
曾经为了在计算机上实现一幅三维地质构造图,费尽周折,而结果却难以令人满意。而现在,因为有了OpenGL这一切都变得简单了。1992年,OpenGL正式成为适用于各种计算机环境下的三维应用程序接口(3D API)。目前,它已经成为国际上通用的开放式三维图形标准。作为一个优秀的三维图形接口,OpenGL提供有丰富的绘图命令,利用这些命令能够开发出高性能、交互式的三维图形应用软件。然而,目前国内介绍OpenGL的实例都是利用VCC++盐盆开发的,令众多计算机工作者望而止步,因而,本文特意选用了简单的VB开发工具结合OpenGL来开发三维地质构造图。希望对那些对OpenGL感兴趣的工作者有所帮助。
本文绘制出来的三维地质构造图可以绕XYZ轴进行360度自由旋转,也可以进行自动旋转;并可以对三维图分别沿XYZ轴进行比例缩放,也可以使三维图沿XYZ轴三个方向同时进行相同比例缩放。
2.Win32环境下的OpenGL编程
1)建立视图界面
.新建一个标准EXE工程;
.在部件中添加COMCTL32.OCX控件;
.在工程菜单下的引用子菜单下加入VBOpenGL库(vbogl.tlb)在窗体上放置部件,
2)创建设备描述表 
定义像素格式结构 
Dim pfd As PIXELFORMATDEscriptOR
.描述像素格式
pfd.nSize = Len(pfd)--结构大小
pfd.nVersion = 1--版本号
pfd.dwFlags = PFD_SUPPORT_OPENGL Or--支持OpenGL
PFD_DRAW_TO_WINDOW Or --绘制到Windows
PFD_DOUBLEBUFFER Or --支持双缓冲区
PFD_TYPE_RGBA--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 "设备描述表支持的像素格式" & vbCrLf & vbCrLf & _ 促精宝胶囊
"与给定像素格式不匹配!", vbCritical, "错误"
End
End If
设置设备描述表的像素格式,把指定的像素格式赋给指定的设备
spf = SetPixelFormat(hdc, PixelFormat, pfd)
If spf = False Then
MsgBox "设置设备描述表像素格式失败!", vbInformation, "失败"
End
End If 
3) 创建绘图描述表
创建绘图描述表
hGLRC = wglCreateContext(hdc) 
使之成为当前绘图描述表
wglMakeCurrent hdc, hGLRC 
4) 设置绘图环境
谷胱甘肽还原酶允许深度比较
glEnable GL_DEPTH_TEST 
顶点逆时针方向定义的多边形为前面
glFrontFace GL_CCW
设置绘图背景
glClearColor 0, 0, 0, 1 
5) 定义光照和材质bmk
打开光照,放置一个光源,定义光照模型
glEnable GL_LIGHTING
glEnable GL_LIGHT0
glLightModelf GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE 
设置光源位置
Dim LightPos(3) As GLfloat
LightPos(0) = 1: LightPos(1) = 1: LightPos(2) = 1: LightPos(3) = 0 
glLightfv GL_LIGHT0, GL_POSITION, LightPos(0) 
设置环境光
Dim Light_Ambient(3) As GLfloat 
Light_Ambient(0) = 0.7: Light_Ambient(1) = 0.7
Light_Ambient(2) = 0.7: Light_Ambient(3) = 1
glLightfv GL_LIGHT0, GL_AMBIENT, Light_Ambient(0)
造纸助留助滤剂
设置漫射光
Dim Light_Diffuse(3) As Glfloat
Light_Diffuse(0) = 0.6: Light_Diffuse(1) = 0.6
Light_Diffuse(2) = 0.6: Light_Diffuse(3) = 1
glLightfv GL_LIGHT0, GL_DIFFUSE, Light_Diffuse(0)
设置镜面光
Dim Light_Specular(3) As Glfloat
Light_Specular(0) = 1: Light_Specular(1) = 1
Light_Specular(2) = 1: Light_Specular(3) = 1
glLightfv GL_LIGHT0, GL_SPECULAR, Light_Specular(0)
设置材质属性
设置模型镜面光反射率属性
Dim SpecRef(3) As GLfloat 
SpecRef(0) = 0.1: SpecRef(1) = 0.1
SpecRef(2) = 0.1: SpecRef(3) = 1 
glMaterialfv GL_FRONT_AND_BACK,
GL_SPECULAR, SpecRef(0) 
设置材质镜面指数,它确定镜面光斑的大小和聚焦程度。取值1-128,该值越大,表面光泽越明显面子理论

本文发布于:2024-09-23 02:34:24,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/231493.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:像素   格式   设置   绘图   定义
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议