Open Inventor_节点与群组节点_以创建二氧化碳分子为例
来源:互联网 发布:她理财是真是假 知乎 编辑:程序博客网 时间:2024/03/29 21:57
节点:
节点(Node)是构成场景的基本单元,一个场景可由一个或者多个节点构成,每个节点都可以代表场景中的一个几何对象、属性对象或群组对象,以及这些对象的组合。
群组节点:
在实际的开发应用中,通常并不是使用单个的节点来完成场景的构建,因为那将为后续的操作带来诸多麻烦。对于这个问题,通常使用群组节点来完成各个节点的统一管理。
群组节点都派生自SoGroup类。因此,要创建一个群组,可以首先创建SoGroup的一个实例,然后使用addChild()函数在实例中添加相应的子节点。
以下代码是创建一个CO2分子模型。
#include <Inventor\Win\SoWin.h>#include <Inventor\Win\viewers\SoWinExaminerViewer.h>#include <Inventor\nodes\SoGroup.h>#include <Inventor\nodes\SoMaterial.h>#include <Inventor\nodes\SoSeparator.h>#include <Inventor\nodes\SoSphere.h>#include <Inventor\nodes\SoTransform.h>SoGroup *makeCO2Molecule(){ //创建所有部件 SoGroup *co2Molecule = new SoGroup; SoGroup *carbonGroup = new SoGroup; SoMaterial *blackPlastic = new SoMaterial; SoSphere *spherel = new SoSphere; SoGroup *oxygen1 = new SoGroup; SoGroup *oxygen2 = new SoGroup; SoTransform *oxygenXform1 = new SoTransform; SoTransform *oxygenXform2 = new SoTransform; SoMaterial *redPlastic = new SoMaterial; SoSphere *sphere2 = new SoSphere; SoSphere *sphere3 = new SoSphere; blackPlastic->ambientColor.setValue(0, 0, 0); blackPlastic->diffuseColor.setValue(0, 0, 0); blackPlastic->specularColor.setValue(0.5, 0.5, 0.5); blackPlastic->shininess = 0.5; oxygenXform1->scaleFactor.setValue(0.75, 0.75, 0.75); oxygenXform1->translation.setValue(-1.2, 0, 0); oxygenXform2->translation.setValue(3.4, 0, 0); redPlastic->ambientColor.setValue(1.0, 0, 0); redPlastic->specularColor.setValue(0.5, 0.5, 0.5); redPlastic->diffuseColor.setValue(1.0, 0, 0); redPlastic->shininess = 0.5; co2Molecule->addChild(carbonGroup); co2Molecule->addChild(oxygen1); co2Molecule->addChild(oxygen2); carbonGroup->addChild(blackPlastic); carbonGroup->addChild(spherel); oxygen1->addChild(oxygenXform1); oxygen1->addChild(redPlastic); oxygen1->addChild(sphere2); oxygen2->addChild(oxygenXform2); oxygen2->addChild(sphere3); return co2Molecule;}int main(int, char **argv){ //初始化open inventor和Windows HWND myWindow = SoWin::init(argv[0]); if (myWindow == NULL) exit(1); SoSeparator *root = new SoSeparator; root->ref(); //添加所创建的场景 root->addChild(makeCO2Molecule()); SoWinExaminerViewer *myViewer = new SoWinExaminerViewer(myWindow); myViewer->setSceneGraph(root); myViewer->setBackgroundColor(SbColor(1.0, 1.0, 1.0)); //将背景色设置为白色 myViewer->setTitle("CO2"); myViewer->show(); myViewer->viewAll(); SoWin::show(myWindow);//显示主窗口 SoWin::mainLoop();//进入主事件循环 return 0;}
运行后得到的图形如下:
0 0
- Open Inventor_节点与群组节点_以创建二氧化碳分子为例
- 父节点_子节点_孙节点创建
- Jenkins 持续集成实践(以网易蜂巢为例)-1 Master 节点的创建
- 输出所有根节点到叶子节点的长度(以二叉排序树为例)
- 创建节点、添加节点
- 创建节点添加节点
- jquery DOM操作_创建节点
- led驱动_自动创建设备节点
- 《Linux设备节点创建》手动与自动创建设备节点
- Open Inventor_分隔符节点
- 创建节点
- 得到TREEVIEW 中某个节点的路径,以"_"隔开
- 创建节点,替换节点,替换节点
- Linux加载DTS设备节点的过程(以高通8974平台为例)
- Linux加载DTS设备节点的过程(以高通8974平台为例)
- Linux加载DTS设备节点的过程(以高通8974平台为例)
- Linux加载DTS设备节点的过程(以高通8974平台为例)
- Linux加载DTS设备节点的过程(以高通8974平台为例) .
- 消息队列:比较Beanstalkd,IronMQ和Amazon SQS
- Android Device Monitor中File Explorer无法查看文件
- hrbustoj 1681 回文串 [BIT]【字符串hash】
- Java面向对象设计模式(十八)——命令模式(Command)
- 问题
- Open Inventor_节点与群组节点_以创建二氧化碳分子为例
- 文本和输入:应用安装位置
- C# SQL数据库的基础增删改查和事务
- 在服务器上搭建 Git仓库
- H5手势判断
- MyBatis教程
- CSS3 iconfont矢量字体图标的使用
- C加载lua配置,table交互, 调用lua函数
- 1013. Battle Over Cities (25)