土木工程三维模型爱好者必看基于C的三维模型可视化技术
本文基于 Visual C#.NET 开发环境,介绍了利用 DirectX 和 OpenGL 图形接口实现三维模型可视化显示的方法 ,并通过示例程序对以上两种接口的显示效果和执行效率进行了综合比较,为进一步实现三维模型可视化技术在计算机辅助设计系统中的应用提供了理论和现实依据。
随着计算机软硬件技术的飞速发展和计算机图形学的日趋成熟,传统的机械产品二维设计方法最终将被三维设计方法所取代。在现代三维 CAD 系统中, 三维模型可视化无疑是实现产品优化设计的基础和前提。 一方面,三维可视化技术有助于更为准确直观的表达所设计产品的内部结构;另一方面,也为虚拟装配及有限元分析等高级设计技术的实现提供了必要的支持。DirectX 和 OpenGL 是两种成熟的 3D 图形接口,能够方便高效地处理复杂三维模型。 本文研究了在 C# 环境下应用以上两种接口实现三维可视化程序开发的基本方法,并对两种接口进行了综合评价。
1.开发环境及接口简介
本文的开发环境为 Visual C#.NET 2008;图形接口分别为 DirectX9.0c 和 CSGL 1.4.1.0。
1.1 C# 简介
Visual C#.NET 是以.NET 框架为基础的一种高级编程语言,它集中了众多关于软件开发的最新成果,被誉为编写基于面向对象和视窗系统的程序语言中高效开发的首选。 与其他语言相比,C# 的程序执行效率更高,语法更简洁,调试更容易,从而大大加快了开发速度,有效降低了开发成本。1.2 DirectX 简介 DirectX 是微软公司提供的一套非常优秀的应用程序接口, 其中包含了设计高性能多媒体应用程序开发工具包,称为 DirectX SDK。
工具包主要包括 Direct3D,DirectInput 等模块, 其中Direct3D 是负责三维图形处理的组件,它能够与操作系统及桌面程序默契配合;可以利用硬件厂商提供的驱动程序接口,直接进行底层硬件操作,从而使程序获得最佳的性能和效果 [1,2]。1.3 OpenGL 简介 OpenGL 是 SGI 公司推出的一个跨平台 、跨语言的专业图形接口,它提供了 100 种以上的图形操作函数,开发者可以利用这些函数实现三维模型的显示和实时交互。 而 CSGL 则正是专门为 C# 开发环境提供的标准 OpenGL 接口,功能强大,调用方便 [3,4]。
2.三维模型可视化的程序实现
2.1 三维可视化实现原理
要实现三维模型可视化,我们要先建立虚拟三维模型。 在模型建立过程中,计算机根据用户所提供的命令和参数对模型的关键点进行描述, 并通过关键点的连接以及点、 线、面、方向等参数的量化,最终构成三维模型。 事实上,我们只生成了模型的外表面,而由于各种模型的差异太大,计算机处理起来十分困难,所以真正的模型表面常常被细化为众多小三角的集合来处理 [5]。建立了虚拟的三维模型后, 我们还要把它在屏幕上显示出来,这与日常生活中的相机拍照原理十分类似,都是将一个三维实体以一定的投影方式投影到一个二维平面上(如图 1 所示)。 所以在三维可视化技术中,只要知道视点位置,视线方向和范围,以及投影平面位置等参数, 通过适当的投影变换就可以将复杂三维模型清晰地显示在屏幕上。图形接口不但可以通过简单的函数帮助我们实现虚拟三维模型的建立和屏幕投影变化等复杂的功能,而且还可以驱动低层硬件完成三维模型的输出。这样,我们只需要对图形接口进行操作,而不需要对底层硬件进行操作,即可实现复杂三维模型的可视化显示。
图 1 三维模型在平面上的投影简图
基于 DirectX 和 OpenGL 的三维模型可视化程序的实现流程 (如图 3 所示)十分的相似,只是在代码的语法方式上有所区别。
图 2 三维可视化程序的实现流程
2.2 基于 DirectX 的实现方法
(1)首先,
在项目属性中添加对于 DirectX 的引用,然后在程序的开始部分添加命名空间:
using Microsoft.DirectX;using Microsoft.DirectX.Direct3D;
(2)定义并创建设备和节点缓冲区 :
//创建设备代码
device = new Device (Manager.Adapters.Default.Adapter, DeviceType.Hardware, this.Handle, CreateFlags.SoftwareVertex Processing,presentParams);
//创建节点缓冲区代码
vertbuffer = new VertexBuffer (typeof (CustomVertex.PositionColored), num, device, Usage.WriteOnly, VertexFormats.Position |VertexFormats. Diffuse, Pool.Default);
(3)初始化相关参数,
建立三维环境,
例如://建立三维空间 x 为长度 y 为宽度 z1+z2 为深度
device.Transform.Projection = Matrix.OrthoLH(x, y, z1, z2);
(4)为相应的节点赋值:
//X,Y,Z 为几何坐标,Color 为颜色verts[0] = new CustomVertex.PositionColored(X, Y, Z, Color);
(5)在循环内编写绘图语句:
//清空三维空间,
为绘图做准备
device.Clear(ClearFlags.Target|ClearFlags.ZBuffer,Color.White,1F, 0);device.BeginScene();
//从缓冲区读入数据
device.SetStreamSource( 0, vertbuffer, 0);
//以三角图元绘图(相邻三个节点连接)
device.DrawPrimitives( PrimitiveType.TriangleList, 0, num) ;device.EndScene();
//更新显示
device.Present();
(6)程序关闭时应先卸载设备:VertBuffer.Dispose();VertBuffer = null;Device.Dispose();Device = null;
图 3 基于 DirectX 的实现效果
2.3 基于 OpenGL 的实现方法
(1)OpenGL 同样要在项目中添加引用,然后在程序的开始部分添加对 CsGL 命名空间的引用:using CsGL.OpenGL;
(2)OpenGL 中定义并创建设备环境的方法与 DirectX 有较大差距,OpenGL 中需要先定义出组件类,再将组件加载到窗体上:
//定义组件类
Public class myview: OpenGLControl{……}
//加载组件
view = new myopengl.myview();view.Parent = this;view.Dock = DockStyle.Fill;
(3)初始化相关参数,
例如:
//建立三维环境
GL.glOrtho(x1, x2, y1, y2, z1, z2);(4)OpenGL 的 节 点 赋 值 也 绘 图 语 句 是 一 同 编 写 的, 这 也 是OpenGL 与 DirectX 的最大不同:
//R,G,B 为红、绿、蓝三原色
(0-255)GL.glColor3f(R, G, B);
//以三角形图元开始绘制
GL.glBegin(GL.GL_ TRIANGLES);
//为三角形的 3 个节点赋值
GL.glVertex3f(X1, Y1, Z1);……GL.glEnd();
(5)程序关闭时同样要先卸载设备:
view.Dispose();view = null;
图 4 基于 OpenGL 的实现效果
3.结论
C# 是一种简单高效的程序设计语言, 本文在 C# 开发环境下,结合 DirectX 和 OpenGL 三维图形接口实现了三维模型的可视化显示,程序显示效率高,显示效果好。 经过测试对比:在 Windows 系统环境下,同样由 Microsoft 开发的 DirectX 图形接口,占用系统资源小,具有更好的兼容性。 从总体上讲,两种接口各具特色,各有所长,都是进行三维模型可视化处理的利器。
可怕的印式反卫星给近地轨道造400个碎片俄罗斯祭出快速对接能力利刃TO在最近的一次国际空间站补给任务中,由俄罗斯联盟火箭在拜特努尔发射的进步MS11货运飞船在升空之后,仅用了不到3个半小时就完成了对接国际空间站的全过程,再度创下了对接国际空间
新型无线通信系统让潜艇与飞机对话长期以来,水下游弋的潜艇和空中呼啸的飞机无法直接对话。因为在各自的介质中,飞机通过空气传播的无线电信号在水中会很快消失潜艇发出的声波信号,基本会被水面反射回去,而不会穿透水面。所以
研究人员3D打印出具有独特微波或光学特性的超材料据南极熊了解,塔夫茨大学的一个工程师团队开发了一系列具有独特微波或光学特性的3D打印材料,他们从飞蛾的复眼中获得灵感,制作出一种半球形装置,可以在选定的波长上从任何方向吸收电磁信号
与恐龙相遇!到诸城穿越亿年神秘之旅这个春天,穿越亿年与诸城恐龙相遇!距离咱青岛一个多小时车程的诸城,这里不仅有神秘的恐龙世界,还有举世震撼的地质奇观,世界规模最大的恐龙化石群,以及闻名世界的四大龙王举世罕见穿越亿年
异状!奇景!大彗星麦克诺特彗星长出了一条很长的丝状尾巴。壮观的尾巴横跨天空,在日落之后的几天里,南半球的观测者都能看到它。这个惊人的尾巴在长时间的广角相机曝光中显示出最大的程度。在某些时候,仅
银河系内漂浮一颗不合常理的恒星,科学家称该恒星不应该存在趣味探索讯在银河系一条长达数万光年的旋转臂上,漂浮着一颗名为J00230307的小型恒星。表面上它是一颗普通得不再普通的流浪恒星。但实际上,它是一颗古老得不再古的恒星。古老到我们无
天舟四号货运飞船船箭组合体顺利垂直转运至发射区将于近日择机发射据中国载人航天工程办公室消息,北京时间2022年5月7日,天舟四号货运飞船与长征七号遥五运载火箭组合体垂直转运至发射区。目前,文昌航天发射场设施设备状态良好,后续将按计划开展发射前
ASC科研探索科学家开发出强大的二维材料家族杜兰大学科学与工程学院的一个团队开发了一种新的二维材料系列,研究人员称其具有广阔的应用前景,包括先进的电子产品和高容量电池。该研究由物理与工程物理系助理教授MichaelNagui
中国墨子号创造新世界纪录记者5月6日从中国科学技术大学获悉,该校潘建伟院士及同事彭承志陈宇翱印娟等利用墨子号量子科学实验卫星,近期首次实现了地球上相距1200公里两个地面站之间的量子态远程传输,创造了新的
SpaceX带回4名宇航员紧接着发射53颗卫星侨报网讯太空探索技术公司(SpaceX)周五(6日)午夜时分将4名宇航员成功带回家,为该公司提供这一服务以来最繁忙的时段画上句号。降落在海水里的龙飞船正在被打捞上岸。(图片来源美联
特报40年佳作诞生记之报道大亚湾中微子实验持续追踪捉住好新闻中微子2012年12月22日,美国科学杂志公布2012年度十大科学突破大亚湾中微子实验成果入选报道。本报曾多次关注报道的大亚湾中微子实验昨天再传喜讯在美国科学杂志公布的2012年度十大科