HOOPS 3D可视化入门教程三基本概念和数据结构.docxVIP

HOOPS 3D可视化入门教程三基本概念和数据结构.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
HOOPS 3D可视化入门教程三基本概念和数据结构

慧都控件网 慧都控件网 HOOPS 3D可视化入门教程三:基本概念和数据结构 上篇文章介绍了 HOOPS 的主要模块,这篇文章将要向大家介绍HOOPS的数据结构以及穿插其中的一些基本概念。这些内容主要包含在3dGS模块内。 一、保留模式 HOOPS采用保留绘图模式(retained?mode)。所谓保留模式是相对于传统的非保留模式而言的。做过OpenGL编程的人都知 道,OpenGL的绘制都是通过调用一系列绘图命令来实现的,通常是在一个叫updateGL的函数里。除非你自己把相关绘图信息保存起来,否则出了这个 函数OpenGL就不认帐了,也就是说你无法从OpenGL里面再获取你曾经绘制的一些图元信息。而保留模式则不这样,它把绘制过的命令和图形会保存起 来,放在特定的数据结构中,从而使得我们可以事后随时读取这些数据。相比于非保留模式,保留模式能够提供更高的效率(因为数据都在内部,下次绘制时不需要 再读取),更快的交互(通过特定的基于数据结构的算法,可以加速选取、高亮等等交互操作),还有更方便的编程接口。当然凡事都有两面性,保留模式也有它的 缺点,其中之一就是它增加了程序的内存消耗(用于存储那个数据结构)。但我们认为这样的代价是完全值得的。 二、基于段的数据结构 HOOPS的 数据结构简单讲是基于段(segment)的树状结构。最上层是根段,为“/”。该数据结构和Linux文件系统有着一曲同工之妙,有Linux使用经验 的同学将会很容易理解。Linux的根目录的符号也是“/”,所有文件系统中的文件或者文件夹的路径都以该符号开头。文件夹有名字,段也有名字。如同文件 夹内可以有文件和子文件夹,segment下可以有sub?segment。这样的层次结构可以很好地构建我们想要的图形。 打开一个段的HOOPS函数是HC_Open_Segment,它有一个参数,就是这个段的名字。我们可以传一个空字符串给它,从而创建一个匿名 段。如果已经存在这个名字的段,则该函数会打开这个段,否则就自动创建一个新段。打开后,我们就可以在该段内做任何我们想要做的操作。操作结束,记得用HC_Close_Segment来关闭这个段。 HOOPS采用和OpenGL一样的上下文机制,那就是“状态机(State?Machine)”。所谓状态机,形象地讲就是一旦改变了状态,则接 下去不论程序运行到哪里,该状态将一直保存,直到下次改变状态。在HOOPS中,打开一个段实际上就意味着进入了一个状态机,直到你关闭这个段,你所有的 操作都将在这样一个上下文中进行。具体来讲就是,打开一个段,然后你可以跳转到任意的程序位置完成具体的绘制任务,然后关闭段,这一系列操作没有必要在一 个函数中完成。这无疑大大增加了我们编程的灵活性。 举个例子,我们想要绘制一所房子,房子有房顶、窗户还有门,我们可以用如下代码: HC_Open_Segment?(“/”); HC_Open_Segment?(“house”); HC_Open_Segment?(“roof”); HC_Close_Segment?(); HC_Open_Segment?(“door”); HC_Open_Segment?(“windows”); HC_Open_Segment?(“window1”); HC_Close_Segment?(); HC_Open_Segment?(“window2”); HC_Close_Segment?(); HC_Open_Segment?(“window3”); HC_Close_Segment?(); HC_Close_Segment?(); HC_Close_Segment?(); HC_Close_Segment?(); 实际上我们创建了如下的树状结构: ? 创建了段之后,我们需要有相应的方法能够找到这个段,这时就会用到段的路径。和Linux上的文件路径类似,段的路径也分为两种:相对路径和绝对路 径。我们打开一个段,进入该段的状态机,如果要打开它下面的子段,就可以用相对路径。HOOPS会自动地在该段下面找给出的段名,如果找不到,则会报错。 绝对路径则是从根段名“/”开始,逐步地把段名添加上去,直到我们想要找的段为止,完整的路径就是绝对路径。例如我们要找第三扇窗户,相对于house的 相对路径是:”windows/window3”,而绝对路径是:”/house/windows/window3。 我们可以用“.”和“..”来分别指代当前目录和父目录,这又跟Linux上的路径使用习惯是一致的。这种简称只能用于相对路径中。 为了能够更方便地提供段的路径,HOOPS中还有一套特有的符号,叫做“wildcards”,可以同时指代多个不同的路径,有以下几种: 1.?逗号wildcard。这个是最简单的

文档评论(0)

yaobanwd + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档