社区
非技术类
帖子详情
VB OPENGL 三维绘图
Auguk_Hdp
2013-04-25 11:34:06
在网上查了一下关于VB+OPENGL进行三维绘图的有关资料,大部分人建议C+OPENGL,说VB+OPENGL比较弱,比较麻烦,VB+OPENGL的资料也比较少。因为本人是写一下工程小软件,这次需要用到三维实体绘图,工程软件使用VB6.0(容易上手)写的。请问在VB环境下,实现简单的三维实体绘图(主要绘制长方体实体,也有一些圆柱体实体)比较容易的途径是什么?哪位前辈有关于VB+OPENGL的学习资料可以共享一下,谢谢了!
...全文
416
4
打赏
收藏
VB OPENGL 三维绘图
在网上查了一下关于VB+OPENGL进行三维绘图的有关资料,大部分人建议C+OPENGL,说VB+OPENGL比较弱,比较麻烦,VB+OPENGL的资料也比较少。因为本人是写一下工程小软件,这次需要用到三维实体绘图,工程软件使用VB6.0(容易上手)写的。请问在VB环境下,实现简单的三维实体绘图(主要绘制长方体实体,也有一些圆柱体实体)比较容易的途径是什么?哪位前辈有关于VB+OPENGL的学习资料可以共享一下,谢谢了!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Auguk_Hdp
2013-04-25
打赏
举报
回复
引用 1 楼 VBToy 的回复:
http://download.csdn.net/detail/VBToy/1222635
我下载了这个例子,里面“OGLWin”窗体里面关于OPENGL的好复杂啊。好多解释看不明白。
VBToy
2013-04-25
打赏
举报
回复
http://download.csdn.net/detail/VBToy/1222635
Auguk_Hdp
2013-04-25
打赏
举报
回复
谢谢 我研究研究
贝隆
2013-04-25
打赏
举报
回复
VB中利用OpenGL绘制三维地质构造图 摘要 OpenGL是一种三维图形开发标准,是从事三维图形开发工作的必要工具,其稳定性、可靠性、可扩展性等特点,赋予了其强大的生命力和应用前景,OpenGL已经广泛应用于在CAD/CAM/CAE、医学图像处理、虚拟现实、娱乐、广告等领域。本文就如何利用VB结合OpenGL来开发三维地质构造图的基本步骤进行了详细地介绍,其中对像素格式的设定以及光照和材质的设置进行了详细的描述。 1. 前言 曾经为了在计算机上实现一幅三维地质构造图,费尽周折,而结果却难以令人满意。而现在,因为有了 OpenGL这一切都变得简单了。1992年,OpenGL正式成为适用于各种计算机环境下的三维应用程序接口(3D API)。目前,它已经成为国际上通用的开放式三维图形标准。作为一个优秀的三维图形接口,OpenGL提供有丰富的绘图命令,利用这些命令能够开发出高性能、交互式的三维图形应用软件。然而,目前国内介绍OpenGL的实例都是利用VC或C++开发的,令众多计算机工作者望而止步,因而,本文特意选用了简单的VB开发工具结合OpenGL来开发三维地质构造图。希望对那些对OpenGL感兴趣的工作者有所帮助。 本文绘制出来的三维地质构造图可以绕X、Y、Z轴进行360度自由旋转,也可以进行自动旋转;并可以对三维图分别沿X、Y、Z轴进行比例缩放,也可以使三维图沿X、Y、Z轴三个方向同时进行相同比例缩放。 2. Win32环境下的OpenGL编程 1) 建立视图界面 .新建一个标准EXE工程; .在部件中添加COMCTL32.OCX控件; .在工程菜单下的引用子菜单下加入VBOpenGL库(vbogl.tlb)(可以到http://home.pacific.net.hk/~edx/tlb.htm网站下载); 在窗体上放置部件,建立如下视图界面(图1所示): 图1 视图界面 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--主层类型 l 为设备描述表得到最匹配的像素格式,确定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) 定义光照和材质 打开光照,放置一个光源,定义光照模型 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,该值越大,表面光泽越明显 glMateriali GL_FRONT_AND_BACK, GL_SHININESS, 128 使用颜色跟踪法,设置模型前后面环境反射率和漫射反射率属性 glEnable GL_COLOR_MATERIAL glColorMaterial GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE QQ病毒 腾讯QQ空间代码专题 PPT教程专题 ADSL应用面面俱到 Fireworks教程专题 计算机和网络技术基础知识 校园网专题 网吧技术专题 6) 初始化颜色表 预先构造好颜色表。当读入高程数据时,可以根据Z值来访问颜色表,从而计算出该顶点的颜色(不同的高度层用不同的颜色显示)。 Private Sub InitColorTable() '初始化颜色表 For i = 0 To 255 With ColorTable(i) .R = 255 - i: .G = i: .B = 0 End With Next i For i = 256 To 510 With ColorTable(i) .R = 0: .G = 255 - (i - 255): .B = i - 255 End With Next i End Sub 7) 从数据文件中获取数据 从data.txt文件中获取顶点数据。data.txt数据文件中第一行是构造图横向采样点的个数,第二行是构造图纵向采样点的个数,第三行为采样点的间距,第四行起为采样点的高度值。GetDataFromFile()过程从data.txt文件中读取数据,由于是等间距采样数据,所以顶点的X和Y坐标值可以直接计算出来,只有Z坐标值从数据文件中读入。获得顶点数据之后,计算出顶点的颜色,及填充三角形的法线矢量(用三角形序列填充)。 8) 设置窗口识见区和裁剪区 设置窗口识见区和修剪空间,保持坐标系到屏幕坐标的映射不变 glViewport 0, 0, w, h '定义视见区 glMatrixMode GL_PROJECTION '定义矩阵为投影矩阵 glLoadIdentity '用于在进行矩阵处理之前"复位"坐标系 If w <= h Then '定义修剪空间 glOrtho -2000, 2000, -1000* h / w, 2000* h / w, -10000, 10000 Else glOrtho -1000 * w / h , 2000* w / h, -1000, 2000, -10000, 10000 End If '告诉OpenGL将来的所有变换都会影响模型 glMatrixMode GL_MODELVIEW '定义矩阵为模型变换矩阵 glLoadIdentity 9) 绘制三维地质构造图 先进行旋转、比例和平移变换,再根据顶点数据进行绘图,运行结果如图2所示。绘制出来的三维地质构造图可以绕X、Y、Z轴进行360度自由旋转,也可以进行自动旋转;并可以对三维图分别沿X、Y、Z轴进行比例缩放,也可以使三维图沿X、Y、Z轴三个方向同时进行相同比例缩放。 图2 运行结果 10) 把绘图描述表从线程上脱离并删除 Public Sub ReleaseGLRC(hGLRC As Long) '把绘图描述表从线程上脱离并删除 If hGLRC <> 0 Then wglMakeCurrent 0, 0 wglDeleteContext hGLRC End If End Sub 3. 结束语 目前,计算机图形学已进入三维时代,三维图形在人们周围无所不在,三维图形在军事、航空、航天、医学、地质勘探、艺术造型和文化娱乐等方面都有着十分广泛的应用,而OpenGL是一种三维图形开发标准,是从事三维图形开发工作的必要工具,其稳定性、可靠性、可扩展性等特点,赋予了其强大的生命力和应用前景,OpenGL已经广泛应用于在CAD/CAM/CAE、医学图像处理、虚拟现实、娱乐、广告等领域,因而对于OpenGL的研究和应用有着重大意义。
vb
+
openGL
三维
绘图
实践
本程序可以打开CAXA输出的OBJ文件,可以将窗口
三维
场景保存为BMP图片,可以对窗口场景进行放大,缩小,平移,旋转等操作,打开的OBJ文件配有详细的文件信息(文件的出处,修改时间,名称,模型点的数量,编号及各点的具体坐标,面的数量及面中点的编号等)。其他功能有待进一步实践。
利用
VB
与
OPENGL
实现
三维
画图
利用
VB
与
OPENGL
实现
三维
画图,可实施旋转、平移、放大缩小等矢量
绘图
功能
用
VB
.NET+
OpenGL
开发交互式CAD系统
本课程用
VB
.NET结合
OpenGL
,从无到有开发一个功能较完整的小型交互式CAD系统。 作者有交互式CAD系统、动态几何系统开发经验。出版过交互式CAD系统开发方面的图书。 课程先讲准备知识,然后讲整个系统的开发思路和...
VB
+
opengl
画任意
三维
图
用
vb
写的东西,大家看看怎么样.。。。。。
vb
opengl
机械制图虚拟模型库
本程序以
vb
+
opengl
开发编写,能建立大量机械制图
三维
模型库,有
三维
模型的缩放、平移、任意旋转等操作功能;有机械装配的
三维
装配过程演示功能,是学习机械制图学生理解学习机械制图的好帮手。
非技术类
742
社区成员
26,925
社区内容
发帖
与我相关
我的任务
非技术类
VB 版八卦、闲侃,联络感情地盘,禁广告帖、作业帖
复制链接
扫一扫
分享
社区描述
VB 版八卦、闲侃,联络感情地盘,禁广告帖、作业帖
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章