这个是在Coin3D三维可视化教程1基础上的继续。

上次介绍了SoRotationXYZ 与时间SoElapsedTime绑定实现动态旋转,这次实现手动旋转的方式。方法是在圆锥的外面添加一个操作器(轨迹球)SoTrackballManip。轨迹球本身看上去像3个围绕在圆锥四周的圆环。当鼠标左键点击轨迹球后,轨迹球以不同的颜色高亮显示自己,以此表明它现在是处于激活状态。当轨迹球处于激活状态时,可以使用鼠标同时旋转轨迹球和位于它内部的物体(在这里是圆锥)。

每次用户旋转轨迹球时,轨迹球的内部数据都会被修改,同时圆锥也会跟它一起旋转。因为渲染区内有一个传感器附着在场景中,所以当场景数据被修改后,场景将会自动被渲染,这样圆锥看上去就运动起来了。

#include "Coin3Dtest1.h"
#include <QtWidgets/QApplication>
#include <Inventor/Qt/SoQt.h>
#include <Inventor/Qt/viewers/SoQtExaminerViewer.h>
#include <Inventor/Qt/SoQtRenderArea.h>
#include <Inventor/engines/SoElapsedTime.h>
#include <Inventor/manips/SoTrackballManip.h>
#include <Inventor/nodes/SoSeparator.h>
#include <Inventor/nodes/SoMaterial.h>
#include <Inventor/nodes/SoPerspectiveCamera.h>
#include <Inventor/nodes/SoDirectionalLight.h>
#include <Inventor/nodes/SoCube.h>
#include <Inventor/nodes/SoCone.h>int main(int argc, char* argv[])
{//Initialize Inventor. This returns a main window to useQWidget* myWindow = SoQt::init(argc, argv, argv[0]);if (myWindow == NULL)exit(1);//Make a scene containing a red coneSoSeparator* root = new SoSeparator;SoPerspectiveCamera* myCamera = new SoPerspectiveCamera;SoMaterial* myMaterial = new SoMaterial;root->ref();root->addChild(myCamera);root->addChild(new SoDirectionalLight);root->addChild(new SoTrackballManip);myMaterial->diffuseColor.setValue(1.0, 0.0, 0.0);root->addChild(myMaterial);root->addChild(new SoCone);//Create a renderArea in which to see our scene graph//The render area will appear within the main windowSoQtRenderArea* myRenderArea = new SoQtRenderArea(myWindow);//Make myCamera see everythingmyCamera->viewAll(root, myRenderArea->getViewportRegion());//Put out scene in myRenderArea, change the titlemyRenderArea->setSceneGraph(root);myRenderArea->setTitle("Trackball");myRenderArea->show();SoQt::show(myWindow);  //Display main windowSoQt::mainLoop();  //Main Inventor event loop}

运行效果如下:

下面介绍一个更强大的交互方式Examiner观察器,使用更简单,它对相机、光照等已经内置了,最早安装测试用的就是这个,在QT平台下是SoQtExaminerViewer, 在MAC平台下是SoXtEXaminerViewer。

Examiner观察器通过修改照相机的参数,允许我们从不同的方位来观察圆锥。它提供了一个用户接口,允许使用鼠标修改照相机在场景中的位置。但是,这里是移动照相机,而不是移动圆锥本身( 这和在现实生活中观察物体是一样的,我们可以旋转物体本身观察它,也可以通过我们自己绕这个物体转动来观察它,这两种观察方式的结果都是一样的。(译者注这和在现实生活中观察物体是一样的,我们可以旋转物体本身观察它,也可以通过我们自己绕这个物体转动来观察它,这两种观察方式的结果都
是一样的。译者注 ))。这个程序不需要创建一个照相机,也不需要调用照相机的viewAll()函数,因为Examiner观察器内部已经自动替我们做好了这些工作。

#include "Coin3Dtest1.h"
#include <QtWidgets/QApplication>
#include <Inventor/Qt/SoQt.h>
#include <Inventor/Qt/viewers/SoQtExaminerViewer.h>
#include <Inventor/Qt/SoQtRenderArea.h>
#include <Inventor/nodes/SoSeparator.h>
#include <Inventor/nodes/SoMaterial.h>
#include <Inventor/nodes/SoPerspectiveCamera.h>
#include <Inventor/nodes/SoDirectionalLight.h>
#include <Inventor/nodes/SoCube.h>
#include <Inventor/nodes/SoCone.h>int main(int argc, char* argv[])
{//Initialize Inventor. This returns a main window to useQWidget* myWindow = SoQt::init(argc, argv, argv[0]);if (myWindow == NULL)exit(1);//Make a scene containing a red coneSoSeparator* root = new SoSeparator;SoMaterial* myMaterial = new SoMaterial;root->ref();myMaterial->diffuseColor.setValue(1.0, 0.0, 0.0);root->addChild(myMaterial);root->addChild(new SoCone);//set up viewerSoQtExaminerViewer* myViewer = new SoQtExaminerViewer(myWindow);myViewer->setSceneGraph(root);myViewer->setTitle("Examiner Viewer");myViewer->show();SoQt::show(myWindow);  //Display main windowSoQt::mainLoop();  //Main Inventor event loop}

运行效果如下

Coin3D三维可视化教程2相关推荐

  1. Cesium教程(十六):动态数据三维可视化

    Cesium教程(十六):动态数据三维可视化 1.Cesium时间系统 Cesium时间系统在动态数据可视化中发挥着重要作用. 2.动态数据格式CZML CZML是Cesium团队制定的一种用来描述动 ...

  2. KITTI自动驾驶数据集可视化教程

    本文介绍关于自动驾驶数据集KITTI的基本操作,包括Camera和LiDAR可视化教程,源码已上传:https://download.csdn.net/download/cg129054036/209 ...

  3. 太干了,全网最全的Matplotlib可视化教程

    导读 Matplotlib 是一个 Python 的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形.通过 Matplotlib,开发者可以仅需要几行代码,便可以生成绘图,直 ...

  4. echart 三维可视化地图_使用 ECharts GL 实现三维可视化 - 入门款

    (题图是使用 ECharts GL 渲染的纽约市建筑群) ECharts GL (后面统一简称 GL)为 ECharts 补充了丰富的三维可视化组件,这篇文章我们会简单介绍如何基于 GL 实现一些常见 ...

  5. CT三维重建及三维可视化资料:opengl+VTK+PCL点云库

    自己做过边缘轮廓三维重建方面的工作,今天看到一篇CT三维重建的介绍性质的文章挺感兴趣的,附录一下: CT三维重建主要有六种基本后处理方法 多层面重建(MPR) 最大密度投影(MIP) 表面阴影遮盖(S ...

  6. DEM的精细修改及其三维可视化

    引言 无论是搭建二维水动力模型,还是构建三维虚拟现实场景,都离不开DEM(Digital Elevation Map).DEM的获取途径可以是卫星影像,或是无人机航拍.针对DEM的编辑,网络上的教程大 ...

  7. Web三维可视化监控系统搭建(1)——Web三维/ VR交互技术初探

    文章目录 1. 文章背景 2.文章脉络 3.三维展示技术介绍 3.1 基于3D模型的展示 3.2 基于VR/全景图的展示 4.三维可视化展示的实现方案 4.三维可视化展示的基本知识 4.1 坐标系 4 ...

  8. 数字孪生技术的应用——三维可视化大屏软件好用榜单Top5

    近年来,随着经济发展的需求和企业对数据分析要求的不断提高,数据可视化技术也在持续发展.现如今可视化并不是只有在电影动漫里才能看到的高科技了,它被我们应用于各行各业的各种场景,可视化不但能为我们企业数据 ...

  9. Python数据三维可视化-VTK

    Python科学计算三维可视化[完结]:https://www.cnblogs.com/yuyukun/p/12063595.html VTK 图形模型的主要作用是用图形描述几何体构成的场景,可视化流 ...

  10. 用matlab怎么画视电阻率拟断面图,在MATLAB平台上实现可控源音频大地电磁反演数据三维可视化显示...

    第29卷 增刊 物探化探计算技术 2007年10月 收稿日期6文章编号:1001-1749(2007)增刊(1)-0068-04 在MAT LAB 平台上实现可控源音频大地 电磁反演数据三维可视化显示 ...

最新文章

  1. 【组队学习】【33期】数据可视化(Matplotlib)
  2. 并发之AtomicIntegerArray
  3. overflow的量两种模式
  4. controller接收json数据_SpringBoot实战(二):SpringMvc接收xml请求
  5. Boring Partition(CF-239D)
  6. 【Java】字节流-从文件输入,输出到文件
  7. 二叉树的BFS及DFS
  8. jquery修改样式通过css方法
  9. 【easy!】LeetCode 14. Longest Common Prefix
  10. 上班时真的很困怎么办
  11. c# ThreadPoold使用心得
  12. 数据结构面试常见问题
  13. node基础---02DIRT程序
  14. 一个程序员的真实故事上
  15. uni-app的介绍
  16. php中的 notice,php中对于NOTICE的问题排查,该注意什么?
  17. printf颜色控制c语言,C语言中控制printf的打印颜色实例及vt100的控制符文档
  18. 【Android】你可能还不知道的elevation、以及Z值等
  19. SwiftUI 界面大全之个人简历界面支持自定义字体(教程含源码)
  20. WxJava springboot微信支付商户直连分账使用总结

热门文章

  1. 用Linux给手机刷rec,【小白福利】手机端刷入第三方Rec,手把手教会你
  2. 耶鲁博弈论 第2节 学会换位思考
  3. solidworks电气元件3d库_送软件 | 零基础也可以学的EPLAN电气设计实战教程
  4. C语言小案例_OA大典案例摘录【第1378篇】联想兄弟激光机卡纸 卡定影 有折叠 卡到出纸口不出来 合集...
  5. Python实现一个代码行数统计工具(以C/C++为例)
  6. 解决Vsphere Client 60天过期问题
  7. ​发那科机器人PROFINET 主站配置
  8. 知道对方IP,你该这样入侵(附:如何隐藏IP地址)
  9. BN层详解(含有公式推导过程)
  10. 蓝牙模块有哪些种类?BLE低功耗蓝牙模块有什么特点?