SharpGL三维建模技术实现_第1页
SharpGL三维建模技术实现_第2页
SharpGL三维建模技术实现_第3页
SharpGL三维建模技术实现_第4页
SharpGL三维建模技术实现_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、https:/SharpGL 三维建模技术实现三维建模技术实现摘要:目前没有在 C#中开发 OpenGL 的标准,在.NET Framework 中也没有 OpenGL API 接口。为此,研究了在 C#中联合 SharpGL 编写三维建模算法,阐述了三维建模关键步骤,并且实例化例子。相比较 C+,在动态链接库SharpGL.dll 支持下,在 C#中进行 SharpGL 三维建模代码可读性强,开发变得更简洁,程序可移植性佳。关键词:SharpGL;C#;动态链接库;三维建模中图分类号:TP317.4文献标识码:A文章编号:16727800(2017)0040205030 引言SharpGL

2、是进行三维显示的函数库,其运行环境与平台无关,能在Windows、Linux 及 Mac OS 等操作系统上运行,故其在硬件、窗口及操作系统方面是相互独立的,SharpGL 能不依赖于任何硬件或操作系统即可运行。SharpGL 本身只定义了一个标准,因此只要符合定义标准的函数库,都可以称为 SharpGL 标准函数库。ATT、UNIX 软件实验室、IBM 等著名企业都采用OpenGL 标准。SharpGL 标准定义的函数库分为 4 个部分:SharpGL 核心库、SharpGL 实用库、SharpGL 辅助库、SharpGL 工具库。SharpGL 函数库是一个实时渲染函数库,能够在短时间进行

3、实时交互绘制。DirectX 与其相似,但只能在 Windows 操作系统上执行。 C#是微软公司早在 2000 年就开始推出的一种高级编程语言,这种高级编程语言运行在.NET CLR 环境上,并基于.NETFramework 框架创作。C#是从 C 与 C+语言派生出的,吸收了 C 与 C+的优点,并弥补了 C 与 C+的缺点,从而产生功能强大、类型安全、更简单的面向对象语言。C#代码框架具有面向对象、引用类等概念,几乎囊括所有软件开发与工程研究的最新成果。相比较 C 与 C+而言,C#具有语法简单易学、配置与调制简单、程序开发周期短等优点,广泛应用于当今工程开发。本文将 C#和SharpG

4、L 联合,开发三维物体模型程序以提高效率。1SharpGL 函数库1.1SharpGL 核心库SharpGL 动态链接库 核心库包含约 115 个可以被调用的函数,统一将函数名的前缀命名为 gl。核心库函数用于常规图形处理,应用范围较广。同一个功能函数输入不同类型的参数,从基本的 115 个函数中派生出来的函数表达式约有 300。https:/1.2SharpGL 实用库SharpGL 动态链接库 实用库包含约 43 个可调用函数,统一将函数名的前缀命名为 glu。SharpGL 提供了丰富的绘图函数命令,但所有图形绘制都由点、线、面元素组合而成。glu 函数通过调用核心库函数,为软件开发提供

5、了相对简单的用法,可实现较为复杂的操作1。1.3SharpGL 辅助库SharpGL 动态链接库 辅助库包含约 31 个可调用函数,统一将函数名的前缀命名为 aux。辅助库函数提供面向对象的数据输入输出处理、窗口操作以及绘制一些简单的三维物体。1.4SharpGL 工具库SharpGL 动态链接库 工具库包含约 30 个可调用函数,统一将函数名的前缀命名为 glut。glut 是不依赖于任何操作系统平台的 SharpGL 函数库,用途是隐藏不同操作系统接口难题。工具库函数以 glut 开头,提供更为复杂的绘图功能2。由于 glut 中的面向对象窗口管理函数不依赖任何运行环境,因此SharpGL

6、 中的工具库可以在各种操作系统中执行命令3。2SharpGL 建模环境创建2.1 添加 SharpGL 引用在 Visual Studio 2012 中建立 C#应用程序过程很简单:在 Visual Studio2012 编译器环境中选择新建项目 Visual C#-Windows 窗体应用程序,输入项目名称与解决方案名称,然后保存在适当路径位置,点击确定,就成功创建了 WindowsForms 应用程序。此时 Visual Studio 2012 会根据上一步的输入,自动创建一个程序命名空间、一个窗体组建 (Form1)以及程序的主入口函数Main(string args)。 到此,Visu

7、al Studio 2012 只是创建了应用程序主体,即编译环境,使用 SharpGL 还必须添加 SharpGL 的动态链接库引用。在 C#中,引用是通过 using 关键字实现的,在编写代码窗口上部输入代码: usingSharpGL; 至此,SharpGL 的动态链接库引用工作完成,下一步工作就可使用SharpGL 函数绘制三维物体模型了。2.2 创建 SharpGL 设备环境使用 SharpGL 相关代码开发三维物体模型时,必须先建立绘制设备环境。先拖拉一个可视化组件,用于显示三维模型绘制。在 Visual Studio 2012 项目名称中添加一个组件,命名为 SharpGLCont

8、rol,然后为创建的组件类进行对象实例化,编写如下代码:/ Get the SharpGL object. SharpGL gl = SharpGLControl.SharpGL;为了在 SharpGLControl 对象组件上绘制三维物体模型,必须先进行初始化https:/设置,这一点与其它程序语言不同。SharpGLControl 加载如下:/Clearthecoloranddepthbuffer.gl.Clear(SharpGL.GL_COLOR_BUFFER_BIT|SharpGL.GL_DEPTH_BUFFER_BIT ) ;/Loadtheidentitymatrix.gl.Loa

9、dIdentity();2.3 建立 SharpGL 绘制环境 由于 SharpGL 直接使用绘制环境,与设备环境没有关联。因此,还需要建立一个 SharpGL 绘制环境,否则 SharpGL 函数不能调用。在 SharpGLControl_SharpGLDraw 中定义了绘制环境相关函数,无需重写这个函数就能直接调用。由于 SharpGLControl_SharpGLDraw 是由SharpGL 类派生出来的,因而它具有 Control 类的全部属性和功能。 SharpGL具有多种函数,绘制环境如下:/ Get the SharpGL object. SharpGL gl = SharpGL

10、Control.SharpGL ;/Set the projection matrix. gl.MatrixMode(SharpGL.GL_PROJECTION);/Load the identity. gl.LoadIdentity(); /Create a perspective transformation.gl.Perspective ( 60.0f , ( double ) Width / ( double ) Height , 0.01 ,100.0); /Use the look at helper function to position and aim the camera.

11、gl.LookAt(-5,5,-5,0,0,0,0,1,0); /Set the modelview matrix.gl.MatrixMode(SharpGL.GL_MODELVIEW);通过以上步骤操作,SharpGL 绘制环境创建工作就全部完成,在这个程序代码环境中即可进行三维建模。SharpGL 中创建的所有三维物体模型,如三维建筑物、家具、山峰等,都是用顶点描述的,因此三维物体模型绘制操作都可针对每个特征点进行计算,然后通过内核矩阵函数进行光栅化形成二维像素。SharpGL 的另一个核心模块是矩阵算法变换,就是把三维物体模型转换为二维图像。3 三维建模算法随着计算机技术的不断进步,在图

12、像、VR、游戏系统、医疗系统等领域构造和使用的模型越来越复杂、越来越精细。这些复杂的物体模型,不但对计算机的处理速度以及存储容量提出了更高要求,而且成为实时绘制物体模型、通信传输的瓶颈,因此物体模型简化研究成为非常重要的科研课题。物体模型简化指在保持原有模型基本不畸变的条件下,采用适当的函数算法减少该物体模型的三角面数、边数、顶点数3。 三维物体模型因其表面凹凸不平,呈现一种连续变化的曲面,这种曲面无法用平面地 D 确切表示。单元三角形是三维物体模型的基本组建单元图,为真实表现三维物体模型,每个单元三角形需要包括 3个顶点和单元三角形的法向量,以此确定一个最小单位表面,不管多么复杂的三维物体模

13、型都可以化解成多个单元三角形组合。对于同一物体,三维物体模型上的单元三角形并非独立存在,而是所有单元三角形都是相互关联的,这些关联信息主要体现在以下两方面:邻接关系即共边与共顶点;同一个单元三角形,法向量相等、法向量共面。通过上述单元三角形之间的联系进行分https:/类,即可组成不同的三维曲面模型。 三维物体模型三角网算法可通过两个步骤实现:在三维物体模型包含的所有点云数据中搜索符合单元三角形条件的点,建立单元三角形;判断搜索到的单元三角形是否有共边关系,如果满足条件,就将单元三角形添加到三维物体模型的表面,如果没有则进行其它搜索。 SharpGL 算法类定义如下:public class

14、Vertex public class Triangle . public class Mesh public voidCompute(List set)三维物体模型的噪点数据,必须去除点云数据的离群孤立点,编写相关算法,设定除噪阈值。阈值参数为噪声点阈值,小于这个值的点会删除,否则就参与计算。 其它相关定义如下: 定义 1:三维物体模型中任意两个单元三角形共边,则称这两个单元三角形相邻; 定义 2:三维物体模型中任意两个单元三角形共顶点,则称这两个单元三角形相接; 定义 3:如果存在一组单元三角形具有相接关系,且两个单元三角形法向量相等,则这一组单元三角形在同一平面上; 定义 4:如果存在一

15、组单元三角形具有相接关系,且两个单元三角形的法向量处于某个平面上,则这组单元三角形在同一个柱面上。4 建模关键环节4.1SharpGL 渲染流程在使用 SharpGL 绘制过程中,需要完成的加载任务有:设置各种缓存,如颜色、深度等,加载场景物体表面贴膜纹理,设置光照与阴影模式,建立景物显示列表、图像质量和材料性质等4。SharpGL 渲染步骤如下: 输入三维物体模型要渲染的点的云数据等相关信息;设置摄像头的位置和视角,调整视觉角度,把三维物体模型安置到三维场景合适的位置;设置投影光照位置、方向、颜色、类型等属性; 设置三维物体模型颜色、纹理贴图等材质参数;将上述三维信息转化为二维图像。 SharpGL 另一个重要模块是三维矩阵模块,据此进行三维物体模型的移动、旋转和缩放。4.2 纹理映射对三维物体模型进行渲染,为了得到现实感效果,常用技术是模型表面贴图。通过纹理贴图,可使三维物体模型颜色不再是单一色彩,而是具有各种风格。 三维物体模型贴图原理:给每个三维物体模型顶点对应一个二维图形坐标,这样在显示三维物体模型顶点时可采用二维图像上相应像素的颜色值。三维物体模型位于三维空间,每个顶点的坐标是(x,y,z)三个分量,而二维图像位于二维空间,每个坐标是(u,v

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论