基于Visual Basic 2008和OpenGL的3ds文件的读取与控制
VS2008OpenGL环境遇到错误

VS2008中OpenGL环境配置1.安装下载OpenGL类库/source/274113(这个是1.4版本的),也可以到OpenGL官网下载其他版本。
将.h文件拷贝到C:\Program Files\Microsoft Visual Studio 9.0\VC\include\GL目录中(没有GL目录就自己创建一个,这里的具体路径视电脑上VS2008安装的位置而定)将.lib文件拷贝到C:\Program Files\Microsoft Visual Studio 9.0\VC\lib目录中将.dll文件拷贝到C:\Windows\System32目录中遇到问题1、在VS2008中运行Win32 console程序出现“Error spawning ’cmd.exe‘”进入菜单Tools -> Options -> Projects and Solutions -> VC++ Directories添加:$(SystemRoot)/System32$(SystemRoot)$(SystemRoot)/System32/wbem2、配置环境先创建一个Win32控制台项目,配置项目属性:(1)项目——项目属性——配置属性——C/C++——预处理器——预处理器定义,添加GLUT_BUILDING_LIB(2)项目——项目属性——配置属性——链接器——输入——附加依赖项,添加glut32.lib Opengl32.lib Glu32.lib (glaux.lib VS2008不加)3、在DEBUG模式下,调试时出现“无法找到MSVCR90D.dll…”的问题。
其他症状:在Release模式下就没有问题。
原因:这个是VS2008的一个BUG,由FAT32文件格式引起。
解决办法:方法一:英文版:Project Properties -> Manifest Tool-> Use FAT32 Work-around -->Yes中文版:项目-->项目属性-->配置属性-->清单工具-->使用FAT32解决方法—>是然后clean下,然后Rebuild即可正常运行,但是这样就会很麻烦,每次建个项目,都要设置它的项目属性。
用面向对象的方法实现3DS文件的读取与操纵

用面向对象的方法实现3D S 文件的读取与操纵*王益群1,2,黄 诚31南京工业大学信息科学与工程学院,江苏南京 210009;2盐城工学院计算机科学技术系,江苏盐城 224003;3上海盛大网络发展有限公司,上海 ==%&201203摘 要:介绍了利用面向对象的程序设计方法实现了3D S 文件的读取。
与面向过程的方法比较,面向对象方法对于理解3D S 文件的读取、重绘及控制显得条理清晰,易于掌握,同时又方便移植到其它应用程序中。
基于这一点,提出了将3D S 文件的读取工作封装在一个类中,从而提高了程序的可读性。
关键词:面向对象;O pe n G L ;3D MA X ;法向量中图分类号: 文献标识码:A 文章编号:1671-5322(2005)03-0041-04 随着计算机技术的飞速发展,计算机动画、科学计算可视化和虚拟现实逐渐成为计算机图形学领域中三大重要技术,而三维图形又是这三大技术的核心内容[1]。
三维图形现在已广泛应用于建筑学、医学、C A D /C AM /C A E 、分子结构研究、模拟仿真、虚拟现实、广告业和娱乐业等诸多领域[2],编程实现3D S 文件的读取、重绘及控制具有重要意义。
传统的基于过程的设计方法,由于相关函数多而且散杂同时数据又与函数分离,导致不便于程序的移植。
为了克服这些缺点,本文采用了面向对象的程序设计方法,将3D S 文件的形体数据读入到类中,然后由其成员函数利用O pe n G L 实现对3D S 文件的读取、重绘及操纵。
1 3D S 文件结构及O pe n G L 简介目前三维图形制作软件很多,如A u t o C A D 、U G 、3D MA X 、W a v e f r o n t 等,因而其文件格式非常丰富。
3D S t u d i o 是A u t o d e s k 公司开发的一套在微机上制作三维动画的应用程序。
本文利用由该软件产生的三维图形文件为例来实现三维图形的读取、操纵与控制。
关于在OpenGL中装载3ds模型文件的分析

在OPENGL中读取3DS模型文件

在OpenGL中读取3DS模型文件这里要解决的一个关键问题是: 如何在OpenGL中读取3DS模型文件。
在这部分介绍了3DS文件的存储格式,给出了OpenGL与3DS的接口编程,这对三维模型的创建提供了极大的方便,还综合运用其他的技术和算法来完成三维动画。
6.1 3ds文件格式简介3DS文件由许多块组成,每个块首先描述其信息类别,即该块是如何组成的。
块的信息类别用ID来标识,块还包含了下一个块的相对位置信息。
因此,即使不理解一个块的含义,也可以很容易地跳过它,因为该块中指出了下一个块的相对于该块起始位置的偏移字节数。
与许多文件格式一样,3DS二进制文件中的数据也是按低位在前、高位在后的方式组织的,例如,2个十六进制字节,4A 5C组成的整型数,表明5C是高位字节,4A是低位字节;对于长整型数,如:4A 5C 3B 8F表明5C4A是低位字,而8F3B是高位字。
下面描述块的具体定义。
块的前两项信息分别是:块的ID和块的长度(下一个块相对于该块的字节偏移量),块的ID是一个整型数,而块的长度是一个长整型数。
每个块实际上是一个层次结构,不同类型的块,其层次结构也不相同。
3DS文件中有一个基本块,其ID是4D4D,每一个3DS文件的开头都是由这样一个块构成。
基本块内的块称为主块。
为了对块的层次结构有一个初步的认识,下面给出一个图表来说明不同类型(ID)的块及其各自在文件中的位置。
如下图所示给每一个块都起了一个名字,这样更便于理解或直接转换为源程序。
图6.1 3DS文件结构图颜色块是文件中自始至终都能见到的一种块类型,颜色块总共有3种类型,它们是COL_ RGB,COL_ TRU和COL_ UNK。
6.2 存储3ds文件的数据结构本节将对程序中所用到的一些重要数据结构进行简单说明,以便使读者更进一步了解3ds文件所存储的数据。
1.t3Dmodel:struct t3DModel{int numOfObjects; // object的数量(总数)int numOfMaterials; // materials 的数量(总数)vector<tMaterialInfo> pMaterials; // 存贮materials 信息的列表vector<t3DObject> pObject; // 存贮object信息的列表};2.tMaterialInfo:struct tMaterialInfo{char strName[255]; // 材质的名字char strFile[255]; // 材质的文件名(真正存在harddisk的bmp)BYTE color[3]; // object 的颜色(RGB) (0~255)Int texureId; // 材质的ID}3.3DObject:struct t3DObject{int numOfVerts; // object 的顶点数int numOfFaces; // object 的面数int numTexVertex; // 材质坐标的个数int materialID; // 材质ID ,正是材质数组中的索引bool bHasTexture; //有材质就为真char strName[255]; // object的名字CVector3 *pVerts; // object 的顶点,将会指向一个数组CVector3 *pNormals; // object 的法线(只是一个近似的法线)将会指向一个数组CVector3 *pFaceNorm; // 面的法线,将会指向一个数组CVector3 *pFaceVert1; // 面的顶点x,将会指向一个数组CVector3 *pFaceVert2; // 面的顶点y,将会指向一个数组CVector3 *pFaceVert3; // 面的顶点z,将会指向一个数组CVector2 *pTexVerts; // 材质的坐标(二维)将会指向一个数组tFace *pFaces; // 面的结构(在后面有注解)将会指向一个数组};其中:struct tFace{int vertIndex[3]; // 组成面三角形顶点的索引(整型)int coordIndex[3]; // 组成面三角形材质的索引(整型)};6.3 3D动画的实现读取3DS文件的全部操作封装在了CLoad3DS类中,有关CLoad3DS类的具体定义所附光盘中的源程序3ds.cpp and 3ds.h。
基于OpenGL的3DS模型数据获取有效方法

it‘ n f e; a s c
O eG pn L建 立 复 杂 三 维模 型 的 难度 , 少 了建 模 的 工作 量 , 模 型 和 后 期 变换 控 制 提 供 了较 好 的 方 法 。 减 为
【 关键宇 】 pn L 纹理数据 :O e G
块 D 包含信息 ∞A F 材质信 息开始 【F F
0A30 材质 的纹理名称 x 0 04 1 对象 中顶点信息 x 10 043 与三 角面相关 的材质信 息 x 10
04 0 模型 中对象信息 ‘ x0 0 042 对象 中三 角面信息 x l0 044 纹理 坐标 x 10
主要
R aFo t , l ) e l ( v u; d af a e p
块 D 包含信息 0A 0 材质 名称 x 00
mu : le
/ ̄ / 象使用的材质链 x , , 对象三角面数据 , , 质点坐标 x ,序列 ,z y , 象 的 纹 理 坐 标 xy序 列 , 对 .
R a F a( , l ) ed l t v u ; o f a e p z  ̄v u; [ - le i- a l J
01 . 言
O eG pn L是 一 种 强 大 的 三 维 图形 开 发 工 具 .在 系 统 仿 真 、 l t f a ‘ xyz o .' ; C D 系 统 开 发 中 得 到 了 广 泛 应 用 。但 是 在 系 统 仿 真 系统 、 A A CD l t ecod。eeod ; f a ‘ tx o r x tx o r y o 系 统 或 者 虚 拟 现 实 系 统 中 。 们 往 往 需 要 构 造 一 些 复 杂 的模 型 。 我 J ; 直 接 利 用 O eG p n L的 图 元 绘 制命 令 或 曲 线 曲面 绘 制 命 令 进 行 复 2 模 型 类 3 杂 模 型 的建 模 是 不 太 现 实 的 。 际 应 用 中 。 们 往 往 采 取 的 方 法 实 我 类 Cr i 类 主要 处 理 3 S模 型 中 的对 象链 表 . tLs i t D 即最 后 3 S D 是 先 利 用 专 业 建 模 软 件 比如 3 SS doM D t i AX建 立 需 要 的模 型 . u 模 型文 件 中所 有 的对 象都 应 该 存 在 于 Cd i 类 对 象 中 。 tLs t 然 后 结 合 V sa C+ 开 发 环 境 直 接 获 取 3 S模 型 数 据 . i l + u D 在 ca sC ls 咖 s t O eG p n L中进 行 绘 制 交 互 控 制 。 种 方 法 一 方 面可 以利 用 专 业 建 这 I 模 软 件 3 SS doMA 的优 点 ,较 快 的建 立 比较 复 杂 的模 型 。 D t i X u b o a d ribet . bet , o l d ( r j ‘. jc ; , C O c . o ) 在模型对象链 中添加一个对象 另一方面利用 O eG pn L的编 程 接 口对 建 立 的模 型进 行 实 时 绘 制 v i da G O o r L ; d w , 制对象 膳 和 交互 控制 。 以降 低建 模 时 间 , 快 系 统 开 发进 程 。 可 加 C r b e ・ojc MA B E 1; ri j t b l x O J c 1 O e e《 型的对象链 本 文 主 要 是 对 如 何 在 O eG pn L环 境 中 对 3 S模 型 数 据 的读 D J 取方法进行 介绍 .尤其是平时文献资料 中较少介绍 的纹理数据 2 顶 点 数 据 读 取 A 的读 取 方 法 进 行 较 为 详 细 的介 绍 。 本 函数 主要 是 从 文 件 中读 取 一 个 对 象 的 顶 点 数 据 .并 存储 1 3 S模 型 文 件 格 式 介 绍 .D 3 S模 型 文 件 的 基本 构 成 单 位 是 块 。 是 相 互 嵌 套 的 。 包 到 预 定 的顶 点 坐 标 序列 中 。 D 块 块 it ed o tr y g‘ ) n a P i Ar ( R n a HL 如 括 块 头 和 主 体 内 容 两 部 分 .块 头 又 由 块 I 和 块 长 度 两 部 分 组 D I 成 . 体 内 容 是 块 的数 据 信 息 。每 个 3 S文 件 都 包 括 一 个 块 I 主 D D 是 04 4 的基 本 块 。 本 块 是 在 3 S文 件 中必 须 存 在 。 也 可 xD D 基 D 它 f ( t= ; eu t + o i 0 < o ni ) rn i i ; + I 以用 来 检 测 一 个 文 件 是 不 是 3 S文 件 。基 本 块 有 两 部 分 组 成 : D R a g a f, l ) / ̄ -个浮 点数. ed l tp a e / o( vu ; t 分别为顶点的 x , 坐标 ,z y 块 I 为 03 3 的 编辑 块 和 块 I D xD D D为 0 B 0 X 0 0的 关 键 帧块 。3 S D x ]vle [= a ; i u
一种运用OpenGL导入显示3DS三维模型的方法

} 三、3DS 模型在 OpenGL 中的再现过程 1. 计算法向量 在绘制场景时,首先计算法向量,它直接影响到 光线从不同的的角度入射到模型表面,产生不同的 显示结果,如果法向量不确定,三维效果的图形是显 示不出来的。再通过模型的各种变换来实现法向量 的计算,这里. 利用自定义的方法 void CLoad3DS: : Counts( t3DModel* pModel) 来计算对象,遍历对象 的面和顶点的所有信息,从而计算出这些信息的法 向量. 再将法向量添加到法向量列表中。 2. 重绘三维模型 根据存储在自定义的数据结构的信息,OpenGL 将模型绘制出来。在 OpenGL 中重现 3DS 模型是通 过 OnDraw ( CDC * pDC ) 函 数 中 调 用 显 示 列 表 drawGL( ) 函数实现的。 下面这个方法 drawGL( ) 是画出各个物体块。 void CTriObject: : drawGL( ) { if ( normalapplied) { glBegin( GL_TRIANGLES) ; for ( i = 0; i < numfaces /3; i + + ) { / / 此处用 glVertex3f 函数带出各个面} glEnd( ) ; } } 四、结束语 本文运用 OpenGL 导入显示 3DS 三维模型,即 在利用现有强大的三维建模软件建立优秀的模型 后,实现模型在 OpenGL 交互控制,从 多 个 角 度 更 直 观 地 展 示 三 维 模 型 。 本 方 法 在 军 事 、广 播 电 视 、 CAD / CAM / CAE、娱乐、艺 术 造 型、医 疗 影 像、虚 拟 世界等领域 都 有 着 广 泛 的 应 用,它 将 避 免 大 量 地 重 复 建 模 工 作 ,且 系 统 设 计 简 单 ,有 效 地 提 高 工 作 效率。
基于VC++6.0和OpenGL的3DS文件的读取与控制方法

O eG p n L作 为 一 个 性 能 优 越 的 图 形 应 用 程 序 设 计 界 面 fP1 A I, 其 编 程 灵 活 、 便 . 广 泛 的移 植 性 和 很 强 的 交 互 式 兰 维 网 形 处 方 有 理 能 力 , 认 为 是 高性 能 图形 和交 互 式 视 景 处 理 的 标 准 。O e G 被 pn L 除 了 能 够 对 三 维 模 型 进 行 绘 制 外 . 可 以进 行 三 维 交 互 、 还 动作 模 拟 等 。具 体 的 功能 主要 有 : 型 绘 制 : 型观 察 ; 色模 式 的指 定 ; 模 模 颜
摘要 : 本文 介 绍 了在 Vi a C++下 如何 使 用 Op l s l u e1 GL读 取 和 控 制 3 a Ds x生 成 的 三 维 模 型 的 方 法 。 M 关 键 词 : 拟 现 实 ; e GL:DS; sa 虚 Op n 3 Vi l u C++
中图分 类号 : P Байду номын сангаас T 37
维普资讯
。
人 工 智 能 及 识 删 技 术 。
本 目 任 辑: 桂 栏 责编 李瑾
基 于 V + 60和 Op n C +. e GL的 3 S文件 的读取与控 制方法 D
丁 斌
( 东北 大学 秦 皇 岛 分校 管理 系 , 北 秦 皇 岛 0 60 河 6 0 4)
文献标识码 : A
文章编 号:0 9 3 4 (0 71 — 0 3 — 2 1 0 — 0 42 0 )5 3 8 2 0
D I G I N Bi 1
3 c me tRe d n nr I to s B s n VC + + 6 0a d Op n DS Do u n a er d Co t a o Me h d a edO . n e GL
基于3DS文件读取的虚拟场景实现

基于3DS 文件读取的虚拟场景实现陈晓,马建仓(西北工业大学电子信息学院,陕西西安710129)摘要:在介绍了面向对象的程序设计实现了3DS 文件的读取,与面向过程的方法比较而言,面向对象的方法对于理解3DS 文件的读取,绘制和控制显得更条理清楚,易于掌握,移植性更高。
同时运用光线追踪技术实现了一个具有真实感的虚拟场景。
关键词:3DS 文件;块结构;OpenGL ;BSP 中图分类号:TP37文献标识码:A文章编号:1674-6236(2012)23-0096-03Virtual scene realize based on 3DS document readerCHEN Xiao ,MA Jian -cang(College of Electronics and Information ,Northwestern Polytechnical University ,Xi ’an 710129,China )Abstract:There is a method of object oriented programming introducing how to access 3DS pared with the method of procedure oriented programming ,the former has many advantages.It is easier to understand how to access ,draw and control this type of files and more convenient to replace it to other programs.At the same time using the Ray tracing technology to achieve a realistic virtual scene.Key words:3DS files ;chunk structure ;OpenGL ;BSP收稿日期:2012-08-14稿件编号:201208054作者简介:陈晓(1986—),女,陕西宝鸡人,硕士研究生。
利用lib3ds和OpenGL的3ds文件的读取与显示

关 键词 O e G p n L,l 3 s i d ,模 型 ,贴 图 ,材质 b
3 s 件 是 3s x 模 软 件 的 标 准 输 入 输 出格 式 ,它 的 d文 d Ma 建
一
种 数 据
Lb d M e h ¥p i3 s s :
应用 十分广泛。各种虚拟现实项 目都可使用它作为模型格式 ,
S Z;b x 2 ma l 】一b n 2 : miI 1
sz AX( x s ; ie # M AX( ie S 》 i tM e s . y} sz sz , Z :
C X= ( mi O1+b x 0】 / b n【 ma l ) 2;
材质包含颜 色 、透明度 、贴 图文件名 等数据 。3 s d 文件里
_
。
.D 3 S、
、
模型读取
要绘 制模 型必须首先将其读人 内存 。在读取 3 s d 文件 以前
/ 加载出 或找不到文 / 错 件时显 示错误信息并退出
i、 fl f[ i ! e
。
-
p t(没奄投 文 悔\ us n
锄
有必要 了解一下 3 s d 文件都包含哪些组成部分 。
I D说 明 了跟 在 其后 的是 什么 数 据 。 2 材 质 ,
_
LB D _A s LB D A S , mi, ma ) I3 Sj L E /3 SF L E b n b x : =
S X=b ×l 1一b i O】 ma O a r n【 =
s 。b x【 1 一b nI 】 y ma 1 mi 1 :
5 关 键 帧 .
关 键 帧是 用 来 描 述 动 画 的 ,其 中 包 含 了 每个 物 体 在 每一 关
基才OpenGL的3DS文件解析及视点移动和三维选择的实现

te p l a o f net n eie B s e ,s p n LSsl t nmehns t ahee he—i e s n l bet i te h pi t no xe a dvc. ei sueO e G ’ e ci ca i o civ redm ni a ojc a ci a rl d e o m t o sn h
s e e o e mo s o i o i g meh d n r g a c n f h u e p s in n t o s a d p o r mmi g i l me tt n o i a p o c r s n r d c d Ap l ai n t t n mp e n a i ft s p r a h ae a o i t u e . p i t o h l o c o
践 表 明文 中设 计 的 算 法 有 效 可 行 , 满足 实 际 应 用 需 求 。 能
关 键 词 : D ;三 维 选 取 ; 点移 动 ; p n L 3S 视 O e G ;三 维 建模
3DS与OBJ格式的三维模型文件在OpenGL中的输入与处理

3DS与OBJ格式的三维模型文件在OpenGL中的输入与处理【摘要】介绍了两种流行的三维文件的文件格式,即3DS文件与OBJ文件,并论述了如何将这些文件在OpenGL(Open Graphic Library)中进行输入和处理。
重点为OBJ文件的文件格式及怎样利用程序代码来构建模型数据结构、绘制对象模型,然后运用OpenGL实现三维显示和交互操作,并应用于地形建模、城市规划以及虚拟现实等领域。
【关键词】三维模型文件;OpenGL;3DS文件;OBJ文件1.前言OpenGL(开放图形库)作为一个开放的三维图形软件包,它独立于窗口系统和操作系统,基于OpenGL开发的应用程序可以十分方便地在各种平台间移植。
OpenGL的功能包括:建模、变换、颜色模式设置、纹理映射、位图显示以及双缓存动画等,而且借助Windows编程环境可以方便地对所构模型的人机交互进行控制。
由于其开放性和高度重用性,OpenGL已经成为业界标准[1]。
虽然OpenGL提供了一些建立形体模型的命令,但OpenGL并没有提供更为复杂的三维模型的高级命令。
在这种情况下,如果完全通过基本的几何图元—点、线、多边形来构建模型,势必十分困难;另一方面,由于3D图形技术的发展,形成了非常多的3D建模软件,这些软件建模一般比较方便,但又难以对其进行控制和交互。
因此,如何有效地利用这些资源,对于快速开发可视化系统具有非常重要的意义。
作者在本文中对两种流行的三维模型文件的文件格式进行了介绍,并通过程序实现了文件的读取。
把这些文件转换成OpenGL程序,再对其进行控制和交互操作。
2.3DS文件的输入和处理3D Studio Max是Autodesk公司开发的用于制作三维动画的应用程序,它所生成的图形文件格式是3DS文件格式。
该软件建模方便,且功能强大。
因此,可以利用3D Studio Max对构建可视化系统提供重要帮助。
这里介绍一种将3DS 文件转换成OpenGL文件的简单方法。
基于OpenGL的3DS图形文件中模型数据的获取

第3期(总第130期)2005年6月机械工程与自动化ME C H A N I C A L E N G I N E E R I N G &A U T O MA T I O NN o .3=====================================================================J u n .文章编号:1672-6413(2005)03-0068-02基于O p e n G L 的3D S 图形文件中模型数据的获取殷素峰,杨胜强(太原理工大学,山西太原030024)摘要:介绍了在O p e n G L 绘图环境下,从3D S 文件中读取数据的方法,减少了复杂形体建模的工作量。
关键词:O p e n G L ;3D S ;数据中图分类号:T P391.72文献标识码:A收稿日期:2004-12-05;修回日期:2005-01-08作者简介:殷素峰(1971-),男,河北石家庄人,在读硕士研究生。
0引言O p e n G L 即开放性图形库(O p e n G r a p h i c L i b r a r y ),是由S G I 公司为其图形工作站开发的I R I S演变而来的。
O p e n G L 提供了相应的图形变换函数、光源处理函数、纹理映射函数及特殊效果处理函数等,在虚拟现实、创建三维逼真场景方面是其它软件无法比拟的。
在物体的造型方面,O p e n G L 以顶点为图元,由点构成线,由线及其拓扑结构构成多边形,然后由点、线、面组成想要绘制的形体。
这种造型模式比较灵活,对简单、规则形体尚可适用,但对复杂、不规则形体工作量极大且复杂,还容易出错。
除此之外,还有另一种造型方式,那就是利用3DS t u d i oMA X 软件,首先在3DS t u d i o MA X 中造型,然后在O p e n G L 绘图环境中读入构造出的模型,再利用O p e n G L 的交互控制优势达到理想的三维效果。
基于OpenGL对3DS模型的读取与重绘的研究

第29卷第2期苏 州 大 学 学 报(工 科 版)Vol 29No.2 2009年4月J OUR NAL OF SUZ HOU UN I VERSI TY(ENGI NEER I N G SC I ENCE EDITI ON)Apr.2009文章编号:1673-047X(2009)-02-053-04基于OpenGL对3DS模型的读取与重绘的研究周 峰,倪俊芳,曾宪政,李春雷(苏州大学机电工程学院,江苏苏州215021)摘 要:对OpenGL和3DS模型的文件格式作了基本的介绍,并详细介绍了如何在V isualC++下的OpenGL编程中完成3DS模型的读取与重绘。
通过例举一个3DS模型验证了程序的可行性。
关键词:OpenGL;3DS模型;读取与重绘中图分类号:TP313 文献标识码:A0 引 言OpenGL是一种强大的三维图形开发工具,是开放的图形程序接口[1],它大约由250个命令组成,用户通过这些命令指定创建交互式2D或3D程序所需的几何对象和操作。
从本质上来说,它是一个3D图形和模型库,独立于操作系统和硬件环境,具有高度的可移植性,并且具有非常快的运行速度。
OpenGL严格按照计算机图形学原理设计而成,符合光学和视觉原理,可以创建极其逼真的3D图像,许多三维演示系统都用Open-GL作为三维图像生成和控制的编程接口。
OpenGL功能强大,但它并没有提供建立三维模型的高级命令,而是通过基本的几何图元即点、线及多边形来建立模型的。
因此,要在OpenGL下直接进行复杂物体的建模是不太现实的[2]。
我们往往先利用专业建模软件,比如先利用3DS MAX建立需要的模型,然后结合V isualC++开发环境直接获取3DS模型数据,在OpenGL中进行绘制交互控制。
这种方法一方面可以利用专业建模软件3DSMAX的优点,较快地建立比较复杂的模型,另一方面利用OpenGL的编程接口对建立的模型进行实时绘制和交互控制,降低建模时间,加快系统开发进程。
基于OpenGL和3DSMAX的微机主板结构漫游的实现

ZHU J i n g— — we n
( C o l l e g e o f E l e c t r o n i c s a n d I n f o r ma t i o n , T o n g j i U n i v e r s i t y , S h a n g h a i 2 0 1 8 0 4 , C h i n a )
r o a mi n g o f mi c r o c o mp u t e r b o a r d s t r u c t u r e . F o r p r o t o t y p e s wi h t AS US AT 3 N7 A-I , us e 3 DS M AX ’ S s  ̄ o n g f e a t u r e s , s u c h a s h i g h s i mu l a —
OpenGL显示3DS模型若干问题的研究

O e G 是 一个 著名 的 开放 式三 维 图形 开发 3 pn L DS是 A td s 司存储 3 模 型数据 的一种 文 uo ek公 D 函数库 ,它 提供 的函数 不 仅可 以创 建基 本 的 3 D 件格 式 ,许 多流行 的 3 建模 软件 和 图形格式 转 D 物 体原形 还 能够 很方 便地对 3 物 体进行 各种 操 换 工 具 都 能 够 生 成 3 模 型 的 3 D D DS 文 件 ,将
ቤተ መጻሕፍቲ ባይዱ
.
Y 程 -
图 学
学 报
21 0 0年
明文 档 ,尽管 很多 文献[3 1] -对用 Op n L读 取 、显 eG 示和 控制 3 DS模 型数据 的方法 进 行 了介 绍 ,但都 侧重 于 O e G 编程 实现方 法 ,只涉及 了基 本 的 pn L
中图分 类号 :T 9 P3 1
文 献标识 码 :A
Re e r h o o ePr b e si s a i DS M od l t pe s a c n S m o l m n Dipl y ng3 e h O wi nGL
H igpn L U J nmig, W A n -e U Pn —ig, I a . n i NGJ g i i j
一
至两个数量级。最后讨论 了如何利用 3 S文件中的关键 帧数据正确地显示带动画信息的 D
模型 。
关
键
词 :计算机 应用 ;O eG pn L显 示 3 DS模 型 ;法线 向量求 解 ;数 据转 换
文 章 编 号 : 10 — 182 1 )40 8 .5 0 30 5 (0 00 —1 90
作 和变换 ,得 到逼真 的 3 显 示效 果 ,这使它 成 O eG D pn L技术和 3 S模型数据结合实现对 3 物 D D
基于VC++和OPENGL的3ds文件的读取与控制

基于VC++和OPENGL的3ds文件的读取与控制
冯伟;周云才
【期刊名称】《科技信息》
【年(卷),期】2009(000)001
【摘要】简述如何在Poser下面建立人体模型,并导出3ds文件,重点说明了在VC++下进行文件的读取,并采用树形结构存储模型,通过OPENGL对模型进行重构,旋转模型.
【总页数】2页(P87,58)
【作者】冯伟;周云才
【作者单位】长江大学计算机学院,湖北剂州434023;长江大学计算机学院,湖北剂州434023
【正文语种】中文
【中图分类】TP3
【相关文献】
1.基于VC++6.0和OpenGL的3DS文件的读取与控制方法 [J], 丁斌
2.基于VC++6.0和OpenGL的3DS文件的读取与控制方法 [J], 丁斌
3.VC++中利用DirectX实现3DS文件的读取和控制 [J], 杜琳;蒋辉
4.基于VC++和OpenGL的STL文件读取显示 [J], 严梽铭;钟艳如
5.基于VC++
6.0和OpenGL的3DS文件的读取与控制方法 [J], 丁斌
因版权原因,仅展示原文概要,查看原文内容请购买。
基于OpenGL的3DS模型的导入与控制

基于OpenGL的3DS模型的导入与控制高海芳;王天雷;邱杰;康献民;王大承【摘要】研究了在VC++6.0环境下利用OpenGL导入3DS模型的两种方法,并给出了具体实现过程和技术要点,两种导入方法比较结果说明:读入3DS文件类的方法优于文件转换法,导入的模型图的失真度很小,并可方便实现平移、旋转、缩放、拾取等人机交互控制.【期刊名称】《五邑大学学报(自然科学版)》【年(卷),期】2010(024)003【总页数】5页(P32-36)【关键词】OpenGL;3DS模型;人机交互【作者】高海芳;王天雷;邱杰;康献民;王大承【作者单位】五邑大学,机电工程学院,广东,江门,529020;五邑大学,信息工程学院,广东,江门,529020;国家摩托车及配件质量监督检验中心,广东,江门,529000;五邑大学,机电工程学院,广东,江门,529020;五邑大学,摩托车研究院,广东,江门,529020;五邑大学,机电工程学院,广东,江门,529020;五邑大学,摩托车研究院,广东,江门,529020【正文语种】中文【中图分类】TP311OpenGL是SGI公司开发的一套高性能的图形处理系统,是图形硬件的软件界面[1]. 通过OpenGL,程序员可以创建人机交互的应用程序,实现具有逼真效果的三维图形图像,但是利用OpenGL绘制复杂的三维模型的工作量和难度较大;而利用3DS MAX可灵活绘制复杂的三维模型及动画,但不能实现人机交互;因此,越来越多的图形、图像制作者选择利用OpenGL与3DS MAX的优势,即使用3DS MAX对复杂模型建模,再将它导入OpenGL中编程,实现交互式的动画.3DS模型文件由许多Chunk组成,每个Chunk包括一个头和一个主体,Chunk是相互嵌套的,这就决定了必须以递归的方式读取它们. Chunk的头又由2部分组成:ID是一个整型数,表示Chunk的含义;Chunk的长度是一个长整型数(以字节为单位,包括头),包含了下一个Chunk的相对位置信息[2-3]. 3DS模型文件中有一个基本Chunk,其ID是4D4D,基本Chunk又称为主Chunk,主Chunk包括3D编辑器Chunk和关键帧Chunk. 3DS模型文件中3个主要的Chunk ID信息见表1.文件转换是指直接采用VIEW3DS等软件将3DS文件转换为OpenGL所需要的C 文件. 具体实现过程如下:1)将VIEW3DS软件在开始菜单的运行程序中运行;2)将需要转换的3DS文件拖入即可得到一个后缀名为.h和.gl的文件;3)将这2个文件拷贝到已编好的OpenGL框架程序中,并在工程菜单中加入这2个文件;4)在视类的执行文件中添加该头文件,如#include "BASE.h",并添加成员变量int Model,在初始化函数中添加代码:Model =GL3DS_initialize_BASE(),在绘制场景函数中添加代码:glCallList(Model1),编译运行程序即可得到图1所示的模型图.该方法使用简单,但模型在导入过程中丢失了部分材质及纹理,有明显的失真;由于模型以一个数据文件存放,也不便于控制.由于3DS模型文件中的编辑Chunk、颜色Chunk、材质Chunk、纹理Chunk最重要,对3DS模型起关键性的作用,因此建立读入3DS文件的类就是怎样读入这些关键的Chunk. 在VC++6.0的MFC框架中定义一个名为3DSload的类,用于3DS文件的读入与重绘,该类中主要定义了几个结构体及主要函数.1)主要结构体:a. 颜色结构体typedef struct {GLfloat red; 颜色的红色分量GLfloat green; 颜色的绿色分量GLfloat blue; 颜色的蓝色分量GLfloat alpha;}OUTGL_RGB;b. 顶点结构typedef struct {GLfloat u,v; 纹理坐标GLfloat nx,ny,nz; 法向量GLfloat x,y,z; 坐标值}OUTGL_VERTEX;c. 对象结构体M3DSObject用于存取读入的内容typedef struct{GLuint NumVertex;OUTGL_VERTEX *VertexLists;GLuint NumPolygon;GLuint strip;POLYGONLIST *PolygonLists;}M3DSObject;2)主要函数:M3DSObject* Load3DSObject(char *filename); 读取3DS文件函数void Draw3DSObject(M3DSObject *object);3DS模型重绘函数void Unitize3DSObject(M3DSObject *object);3DS模型归一化函数将3DS模型归一化,即将模型平移到原点,并缩放到每个坐标均在[-1,1]的立方体中.3DSload类编写完成后即可按下面的步骤导入3DS模型:1)在MFC的文档类中添加成员变量M3DSObject *m_Real3DS1用于存取导入的模型.2)添加OnOpenDocument的消息响应函数. 为了能够导入多个模型并便于控制,采用显示列表的方法加载模型. 在OnOpenDocument的消息响应函数中添加源程序:BOOL CRead3DSDoc::OnOpenDocument(LPCTSTR lpszPathName){glNewList(1,GL_COMPILE);创建显示列表m_Real3DS1=Load3DSObject("BASE.3DS");导入第一个名为BASE.3DS的模型Draw3DSObject(m_Real3DS1);调用3DSload类的成员函数重绘3DS模型glEndList();...glNewList(7,GL_COMPILE);m_Real3DS2=Load3DSObject("6.3DS");Draw3DSObject(m_Real3DS2);glEndList();}3)在视图类中添加成员函数DrawWithOpenGL()重绘导入模型.4)在视图类中响应OnPaint()函数,并在该函数下调用DrawWithOpenGL()函数显示3DS模型.编译运行程序即可得到如图2所示的 6轴机器人模型. 由图2可知:由于采用创建显示列表的方法分别导入机器人的各个关节,容易对每个关节实施控制,所以导入的机器人模型不存在失真. 但是该方法操作比较复杂,要求编程者对3DS模型结构有较好的了解,并且有一定的VC++基础.由3DS文件类的读入方法导入的3DS模型能很容易地实现平移、旋转、缩放和拾取等人机交互控制.模型图平移采用函数glTranslatef(m_xTranslation, m_yTranslation,m_zTranslation)实现,其中3个参数对应3个坐标轴. 模型图旋转采用函数glRotatef(m_Rotation,x,y,z),其中m_Rotation表示旋转角度,x、y、z的取值为0或1[4],取1表示该轴即为旋转轴. 例如:glRotatef(30.0f,1.0f,0.0f,0.0f)表示绕x轴旋转30º. 通过平移与旋转可对图2中机器人模型的各个关节进行控制,实现如图3所示的效果. 为实现实时控制,采用鼠标右键与Ctrl键组合实现旋转控制,鼠标右键与Shif键组合实现平移控制. 其实现过程如下:1)定义一个Bool型变量m_RButtonDown,判断鼠标右键是否按下:变量为真表示按下,为假表示松开.2)定义一个Cpoint变量存取鼠标右键按下的位置,该点的位置与鼠标平移后松开的位置即可表示为旋转与平移控制函数的参数(由于通过响应鼠标按下的消息所获得的点是x,y平面内的二维点,而平移函数中z轴方向的参数是没有办法获得的,所以通过鼠标右键移动只能使导入的3DS模型在x,y平面内移动).3)通过if语句:if(m_ReftButtonDown&&(nFlags&MK_SHIFT/MK_CTRL))判断是旋转控制还是平移控制.模型图缩放采用函数glScalef(m_xScaling,m_yScaling,m_zScaling)实现,其中3个参数对应于3个坐标轴的缩放比例. 采用一个Slider控件控制缩放,缩放函数的参数可通过Slider控件的移动获得,一般将函数glScalef(m_xScaling,m_yScaling,m_zScaling)中的3个参数设为大小一样.在OpenGL程序中拾取是在投影变换(Projection Transformation)阶段利用投影变换中归一化视体操作来实现的. 拾取时,我们用一个选择框来选择物体;设置模型图拾取控制函数gluPickMatrix (x,y,width,height,viewport[4]),其中x,y是鼠标点击到窗口上的坐标,width和height就是以(x,y)为中心的拾取框的宽度和高度,viewport是当前窗口的大小;初始化名称堆栈函数glSelectBuffer (SIZE,selectBuf),SIZE表示堆栈大小,selectBuf表示堆栈名称,初始化对象名称函数glInitNames(),加载对象名称glLoadName(GLuint name),name为整型数,表示加载对象名称. 具体实现模型图拾取控制的流程如图4所示.将3DS模型导入OpenGl软件中,降低了OpenGl复杂建模的难度,可以得到较真实的三维复杂物体模型. 采用在OpenGL程序中引入3DS数据模型文件的方法得到了较好的三维效果,同时可以进行人机交互处理,成果可用于机器人仿真软件开发、3D游戏开发等领域.【相关文献】[1] 李新,李姗姗. 3DS模型在OpenGL中的读取和重绘[J]. 首都师范大学学报:自然科学版,2008, 29(2): 101-104.[2]OpenGL体系结构审核委员会. OpenGL编程指南[M]. 4版. 邓郑祥. 北京:人民邮电出版社,2005.[3]WRIGHT R S, APCHAK J B. OpenGL超级宝典[M]. 徐波. 北京:人民邮电出版社,2005.[4] 张正波,牟彦,黄华,等. OpenGL实现3DS文件中的模型自由旋转[J]. 计算机工程与应用,2005, 41(13): 98-100.。
基于OpenGL的3DS图形文件读取和显示

基于OpenGL的3DS图形文件读取和显示李声弘;周楚涵;董远【摘要】OpenGL给Windows系统带来了一种新的图形编程模式,通过其提供的光照、视点设置、物体材料特性、纹理映射等功能增强模型的真实感,丰富建模的能力,为开发三维地形可视化应用带来便利.本文通过三维图形应用软件,实现了3DS 文件的读取和显示,在此基础上实现了三维场景的简单漫游.【期刊名称】《北京测绘》【年(卷),期】2015(000)004【总页数】5页(P71-75)【关键词】OpenGL;3DS文件;块结构;存储格式【作者】李声弘;周楚涵;董远【作者单位】61206部队,北京100042;61206部队,北京100042;61206部队,北京100042【正文语种】中文【中图分类】TP391.91 OpenGL三维显示技术OpenGL(Open Graphics Library-开放式图形库)是由SGI公司开发的三维图形API,是国际上通用的图形硬件的软件接口,在图形开发领域已经成为工业标准。
自从1990年发布以来,OpenGL已被广泛应用于CAD/CAM、三维动画、数字图像处理以及虚拟现实等领域,Discreet公司的3D Studio Max就是突出代表。
OpenGL是底层图形库,与硬件无关,因此可以在 Windows、Unix、Linux、MacOS、OS/2等不同平台间顺利移植。
但OpenGL没有提供几何实体图元,不能直接用以描述场景,不过,通过一些转换程序,可以很方便地将AutoCAD 、3DS/3DSMAX等3D图形设计软件制作的DXF和3DS模型文件转换成OpenGL的顶点数组。
OpenGL可以与Visual C++紧密接口,便于实现机械手的有关计算和图形算法,可保证算法的正确性和可靠性;其使用简便,效率高。
主要具有九大功能:①绘制模型;②观察模型;③指定颜色模式;④光照应用;⑤图像效果增强;⑥位图和图像处理;⑦位图和图像处理;⑧实时动画;⑨交互技术。
OpenGL实现3D模型的交互控制

high, Glint viewport[ 4 ] ) ;
2. 3 反 馈
和选择一样 ,反馈也是一种渲染模式 ,它并不会以屏幕像素 的形式产生输出 。相反 ,它的信息被写入到反馈缓冲区中 ,提示 场景将如何被渲染 。这个信息包括了用窗口坐标表示的经过转 换的点数据 、根据光照计算产生的颜色数据以及纹理数据 。
摘 要 简述了 3DS文件的结构 ,以及在 OpenGL中如何读入和显示 3DS文件的模型 ,并着重讲述了利用 OpenGL 编程接口对场 景中的这些模型进行选择 、拾取 ,通过鼠标拖动对这些模型进行交互操作 。 关键词 OpenGL 选择 拾取 交互操作
CO NTROL THE 3D MOD EL S INTERACT IVELY IN O PENGL
(1) 初始化模型
static t3DModel g_3DModel[ 2 ] ; CLoad3DS3 m _3DS = new CLoad3DS; m _3DS - > Init( ″neicun2. 3DS″, 0) ;
(2) 渲染函数
glLoadName ( 0) ;
/ /定义模型数组 / /3D 模型定义 / /第一个模型
2 O penGL 的交互技术
在虚拟装机系统中 ,要求与场景本身进行更多的交互操作 , 这种交互除了菜单和对话框实现外 ,在很多情况下是用鼠标来 进行的 。OpenGL的一大功能就是提供了实现交互技术的机制 。 OpenGL的交互技术是通过选择 、拾取和反馈操作来实现的 。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
块的相对位位置信息 . 较之 *. a 文件 , 3s mx *.d 文 件有 明显 的优点 即结 构清 晰 , 内容 明确 , 式统 一 . 格 但读取要求必须了解每一块 的含义 , 同时, 3s *.d 文件数据格式是十六进制存储 的 】这给快速开发 ,
程 序带来不便 . 了能把 主要精 力放在 程 序开发 上 , 为
软件公 司 采 用 O eG pn L作 为 三 维 图形 应 用 程 序 设 计界 面 , 其红 极一 时 , 使 已成 为业界 标准 u . J O eG pn L作为 一种 图形 工业标 准 的 A I它必 须 P, 寄生 于一定 的软件 开发 环境才 能进 行软 件开发 , 几 乎 所有 的 应 用 程 序 开 发 工 具 都 支 持 O eG pn L的 集 成 , 是绝 大 部分开 发人 员都 出于 执行效 率考 虑而 但
先 描述块 是如 何组成 的 , 的信 息 类别 I, 块 D 与下 一
本文利用 3 SM x D a 快速建模 , 然后 导出为 *. 3s d 文件 . 由于 *.d 文件 的 S K未公布 , 但 3s D 且结 构块 较 为复 杂 , 因此读 取相对 困难 . 采 用 Ve 3 s 若 i d w 软件 , *.d 文件转化 为 *. 将 3s h文件与 *. 文 件 , 将 *. 文 件改 写成 Vsa Bs 08类模 块 , 后 h i l ai20 u c
速 建模 的 需要 , 匕 又胄 高效的 实现友好 的 交互功 能 .
关键 词 : O eG ;a 框 架 ; i 3 sVsa B s 0 8 pn L To V e d ; i l ai 2 0 w u c
中图分类 号 :
l . 72
文 献标识 码 : A
O eG pn L是 O e r hc iry的缩 写 , 是 pnGa i Lba p s r 它
的动画是 基 于关 键 帧 实 现 的 , 非 人 机 交 互 的界 而
面. 如能够把所建模型转换成 O eG 程序 , pn L 再对 其 进行交 互控 制 , 是一 种 比较理想 的方 法 拉 . 则 J 3 SMa D x默认 的数据 文件 是 *. a m x文件 , 文 该 件 结 构 复 杂 、 据 庞 大 , 括 模 型 网 格 结 构 、 信 数 包 面
摘
要 : 使 用 3 SMA D X软件进 行 建模 , 并将输入 文件利 用 Ve 3 s i d 软件 转换 成 O e G w p n L格 式 , 数
据 文件在 V sa B s 0 8中进行 读取 , i l ai 20 u c 通过 O eG p n L对模 型进 行重 构 . 种处理 方 法 即能满足 快 这
采 用 C或 C#为 开 发 工 具 . 年来 。 着 Mi o f 近 随 c st r o
1 建模及转 化
3 SM x A t ek公 司 开 发 的一 套 应 用 在 D a 是 uo s d
P c机 上制 作三 维 模 型 及 生 成 动 画 的设 计 软 件 , 是
当今世界上应用最广泛 、 使用人数最多的三维动画 设计 软件 . 由于其 有 友好 的操 作 界 面 , 大 的开 发 强 指令 , 使设 计一 个 三 维 模 型 的时 间 大 大 缩短 . 美 但 中不足 的是 , 交互性相对而言较差 . 3 SM x 其 如 D a
文章编号 : 0 —1 22  ̄)5 06 — 3 1 8 4 {( 0 — 6 5 0 0 0 X
基 于 V sa B s 0 8和 O e G i l ai 2 0 u c pn L的 3 s d 文 件 的读 取 与控 制
杨 亮 陈小妹 ,
( . 南 大 学 材 料 与 化 工 学 院 。 南 海 口 502 ; . 台 师 范 中 文 系 。 南 海 口 5o 1) 1海 海 7 28 2 琼 海 70 1
第2 6卷 第 5期 20 年 0 08 9月
佳 木 斯 大 学 学 报 (自 然 科 学 版 ) J1nJ fi ui n e i N tr c neEio) or8o a s Ui rt a aSi c dtn l Jm v sy( u l e i
V 12 0 5 0 . N . c S p. 2 0 08
则能够轻松将模型读入 .
由 SI C 公司开发的一套高性能三维 图形处理 A I P, 是 图形 硬 件 的软件 实 现 . 过 对 O eG 通 pn L函数 的调 用, 程序员可以创建交互式的应用程序, 实现具有 效果 逼 真的三 维 图形 。 由于其 具有 适合各 种操 作平 台的优点 , 许多在计算机业界具有领导地位的硬件 公司纷 纷推 出采 用 O eG pn L加 速 的显 卡 , 而计 算 机
速 开发 , 但这 种建 模方 法 的缺点 是无 法表达 复杂 的 物 体 和细节 , 且建 模 的工作 量极 为繁 杂 , 程浩 大 . 工 若 利用 3 sMa 快速 建模 则 能解决 建模 的瓶颈 . D x
息、 颜色、 光照 、 阴影、 材质、 贴图及场景设 置等 , 且
该文件 以十六进 制 存储 , 读取 比较 困难 . 3 S 另 D M 可 以导出其他文件格式 , x a 最常见的是导 出 *. 3s d 文件 . 该文件 由许 多数 据块组成 , 每个块都 首
对其它开发环境的优 化, 而使众多开发环境执行效 率大为提 高. 基于此 , 当前在 Vs a c 08E . i a B i 20 x u s l p s Ei n免费版 ) r s di ( e t o 下开发三维 软件 已经成为一 种可能. 如仅利用 Vsa Bs 的 IE 即可进行快 i l ac D , u i