上次介绍了Coin3D的安装和在VS 2019 +QT下的配置,后面讲逐步学习这个库的使用,采用的主要材料的The Inventor Mentor中文版。书中的代码时在Mac平台的开发,这里采用的用的是Windows,SoXt是Coin3D在Mac平台上的界面绑定库,SoQt是与Qt的绑定库,SoWin是用MFC的绑定库。

上次安装的测试中,使用了SoQtExaminerViewer这个常用的交互查看器,这个查看器封装了很多东西,这里讲从最基本的学起,学习画布、灯光、颜色、交互、动作响应等对象的创建和初步使用。

#include <QtWidgets/QApplication>
#include <Inventor/Qt/SoQt.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;SoPerspectiveCamera* myCamera = new SoPerspectiveCamera;SoMaterial* myMaterial = new SoMaterial;root->ref();root->addChild(myCamera);root->addChild(new SoDirectionalLight);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("Hello Cone");myRenderArea->show();SoQt::show(myWindow);  //Display main windowSoQt::mainLoop();  //Main Inventor event loop}

运行结果如下:

渲染结果是个固定的图像,不可以旋转和交互。

这个最简单的例子展示了使用Coin3D进行三维渲染要做的主要事情;

(1)通过QoQt::init初始化函数创建QWidget部件,作为显示窗口

(2)设置场景SoSeparator节点,并添加相机、材质、灯光,设置材质的颜色

(3)创建要显示的对象,并添加到SoSeparator节点

(4)设置画布,即渲染区域SoQtRenderArea,把场景添加到画布,并设置相机看到的区域,

(5)通过SoQt::show显示窗口,并通过SoQt::mainLoop 进入消息循环

下面这个例子展示如何实现旋转。一个引擎节点与一个SoRotationXYZ节点的角度数据域相关联。当实时时钟(real-time clock)发生变化时,引擎会同时修改在rotationXYZ节点中的角度数据。这样将导致圆锥不断地循环旋转。在每次修改后,场景会自动地被渲染区重新渲染。连续的旋转就可以达到我们想要的旋转圆锥的效果。需要说明的是,SoRotationXYZ需要设置在要渲染的物体之前。

#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/nodes/SoSeparator.h>
#include <Inventor/nodes/SoMaterial.h>
#include <Inventor/nodes/SoPerspectiveCamera.h>
#include <Inventor/nodes/SoDirectionalLight.h>
#include <Inventor/nodes/SoRotationXYZ.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);myMaterial->diffuseColor.setValue(1.0, 0.0, 0.0);//This transformation is modified to rotate the cone//This action should be set before the object to seeSoRotationXYZ* myRotXYZ = new SoRotationXYZ;root->addChild(myRotXYZ);root->addChild(myMaterial);root->addChild(new SoCone);//An engine rotates the object, The output of myCounter//is the time in seconds since the program started//Connect this output to the angle field of myRotXYZmyRotXYZ->axis = SoRotationXYZ::Y; //rotate about X axisSoElapsedTime* myCounter = new SoElapsedTime;myRotXYZ->angle.connectFrom(&myCounter->timeOut);//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("Engine Spin");myRenderArea->show();SoQt::show(myWindow);  //Display main windowSoQt::mainLoop();  //Main Inventor event loop}

渲染效果如下:

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

  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. 关于Shiro框架权限标识符中*使用的总结
  2. mysql的默认sid_默认实例(SID)已经设置,空实例默认连接时却连接不上?
  3. 逻辑回归、决策树和支持向量机(I)
  4. 你所需要的java基础篇深入解析大汇总
  5. .NET Core微服务之路:基于Consul最少集群实现服务的注册与发现(一)
  6. 室内设计师招募中...
  7. 《深入理解Java虚拟机》第5章 调优案例分析与实战
  8. 两款新iPhoneX终于要开始生产了,网友的反应却出人意料
  9. [51nod1206]Picture
  10. webuploader上传多张照片的基本功能
  11. 旧电脑装什么系统最快_旧电脑装什么系统好_老旧电脑适合装什么操作系统
  12. Qt IFW 实现自动升级
  13. 矩阵分析之 伪逆矩阵,左逆,右逆,广义逆
  14. 计算机插座符号,插座符号大全
  15. 新版个人所得税计算python_最新个税计算 / 个税计算器 小程序 wepy 开发
  16. wps表格打印怎么铺满a4纸
  17. Axure交互样式的简单使用介绍
  18. 基于android的生日小助手,毕业答辩-基于Android的生日管家App的设计与实现
  19. 成年人的世界,早把情绪戒了
  20. oracle中数据库的说法,下列关于Oracle数据库说法正确的是)

热门文章

  1. DevKitPro(GBA),MakeFile文件大概分析(编译)
  2. c#语言开发安卓app,Xamarin——用C#轻松实现跨平台原生移动应用开发
  3. electron 屏幕标注_gInk:一款好用的屏幕标注写画软件
  4. 吉他扒和弦 扒谱工具Riffstation
  5. 蓝桥杯 C语言 试题 算法训练 猴子分苹果
  6. 三角形度数计算机公式,角度数换算公式(三角函数计算换算角度)
  7. 代码行数统计工具 cloc
  8. 2022张宇考研基础30讲 第九讲 一元函数积分学的几何应用
  9. 2021年MathorCup数学建模A题自动驾驶中的车辆调头问题全过程解题论文及程序
  10. W3Cschool离线文档