VTK 光源 Transform 自定义BoundingBox绘制

news2024/10/7 4:37:12

在这里插入图片描述
这段代码展示了如何在 VTK 中创建光源,并在场景中添加光源的可视化表示。以下是关于代码的详细解释和教程:

创建光源

vtkSmartPointer<vtkLight> light = vtkSmartPointer<vtkLight>::New();

使用 vtkSmartPointer 创建了一个智能指针,用于管理光源对象。

设置光源属性

light->SetPosition(2, 0.0, 0.0);
light->SetPositional(true);
light->SetLightTypeToSceneLight();
light->SetFocalPoint(0, 0, 0);
light->SetConeAngle(10);
light->SetDiffuseColor(colors->GetColor3d("Red").GetData());
light->SetAmbientColor(colors->GetColor3d("Green").GetData());
light->SetSpecularColor(colors->GetColor3d("Blue").GetData());

设置了光源的位置、类型、聚光角度以及颜色属性。

将光源添加到渲染器中

renderer->AddLight(light);

将光源添加到渲染器中,以便在渲染场景时考虑光照效果。

创建光源的可视化表示

vtkNew<vtkLightActor> lightActor;
lightActor->SetLight(light);
renderer->AddViewProp(lightActor);

创建了一个光源的可视化表示,并将其添加到渲染器中。这样可以在场景中看到光源的位置和方向。

创建光源的包围框

// 创建包围框
vtkBoundingBox boundingBox{ boundsData };

// 提取包围框的顶点
vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();
double bounds[6];
boundingBox.GetBounds(bounds);
for (int i = 0; i < 8; ++i) {
    double x = (i & 1) ? bounds[1] : bounds[0];
    double y = (i & 2) ? bounds[3] : bounds[2];
    double z = (i & 4) ? bounds[5] : bounds[4];
    points->InsertNextPoint(x, y, z);
}

这段代码创建了光源的包围框,并提取了其顶点坐标。

创建包围框的几何表示

// 创建线段
vtkSmartPointer<vtkCellArray> lines = vtkSmartPointer<vtkCellArray>::New();
vtkIdType vertices[12][2] = {
    {0, 2}, {3, 2}, {1, 3}, {4, 5},
    {4, 6}, {5, 7}, {7, 6}, {1, 5},
    {4, 0}, {2, 6}, {7, 3}, {0, 1}
};
for (int i = 0; i < 12; ++i) {
    vtkIdType line[2];
    line[0] = vertices[i][0];
    line[1] = vertices[i][1];
    lines->InsertNextCell(2, line);
}

这段代码创建了表示包围框的线段,并定义了每条线段的端点。

创建几何数据集

// 创建 VTK 数据集
vtkSmartPointer<vtkPolyData> polydata = vtkSmartPointer<vtkPolyData>::New();
polydata->SetPoints(points);
polydata->SetLines(lines);

使用顶点坐标和线段信息创建了一个 VTK 的 PolyData 数据集。

创建数据映射器和演员

// 创建 VTK 数据映射器
vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputData(polydata);

// 创建 VTK actor
vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);

创建了一个数据映射器和一个演员,将数据集映射到渲染场景中。

添加演员到渲染器中

renderer->AddActor(actor);

将演员添加到渲染器中,使得包围框的几何表示能够在渲染场景中显示出来。

创建球体并添加到场景中

// 创建球体
vtkNew<vtkSphereSource> sphereSource;
sphereSource->SetCenter(3, 0, 0);
sphereSource->SetRadius(0.1);

// 创建球体的 Mapper 和 Actor
vtkNew<vtkPolyDataMapper> mapper;
mapper->SetInputConnection(sphereSource->GetOutputPort());
vtkNew<vtkActor> actor;
actor->SetMapper(mapper);

// 将球体 Actor 添加到渲染器中
renderer->AddActor(actor);

这段代码创建了一个球体,并将其添加到渲染器中,使得球体能够在渲染场景中显示出来。

教程总结

这段代码演示了如何在 VTK 中创建光源,并将其添加到场景中以及如何为光源创建可视化表示。同时还展示了如何创建和显示一个表示光源包围框的几何图形,以及如何在场景中添加其他几何对象(如球体)。这些步骤一起构成了一个完整的光照效果和几何可视化的流程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1549015.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

oracle补丁升级(19.3-19.22)

一、备份原来的opatch和数据库文件 这里要根据自己的路径&#xff1a; mv /u01/app/oracle/product/19.3.0/db_1/OPatch /u01/app/oracle/product/19.3.0/db_1/OPatch.bakcd /u01/app mkdir -p /u01/app/backup tar -pcvf /u01/app/backup/oracle_backup.tar /u01/app/oracle/…

glibc内存管理ptmalloc - 实时打印bin链的变化

前言 在《glibc内存管理ptmalloc - largebin》中我们详细解释了 largebins共63个&#xff0c;并用表格点出了每个bin的size的范围largebin在free一些内存后的状态 特别是第2点&#xff0c;我其实不太满意&#xff0c;因为只有全部free后的一个结果&#xff0c;并没有中间状态…

【jenkins+cmake+svn管理c++项目】jenkins回传文件到svn(windows)

书接上文&#xff1a;创建一个项目 在经过cmakemsbuild顺利生成动态库之后&#xff0c;考虑到我一个项目可能会生成多个动态库&#xff0c;它们分散在build内的不同文件夹&#xff0c;我希望能将它们收拢到一个文件夹下&#xff0c;并将其回传到svn。 一、动态库移位—cmake实…

工作12年了,我还没能过上自己想要的生活

写这篇文章之前&#xff0c;我想了很久&#xff0c;不知道该如何下笔&#xff0c;如何向读者说明这些年我是怎么走过来的&#xff0c;我只是依稀的记得当时的自己犹如在昨天。 2009年大学毕业&#xff0c;我和大多数的毕业生一样写简历求职。不管是招聘会还是网上投简历&#x…

容器网络隔离验证

结论&#xff0c;可以直接扫描内网路由能通的机器。 1.节点1 192.168.55.6 2.节点2 192.168.55.5 3.非节点3 192.168.55.3

4005.K次取反后最大化的数组和

// 定义一个名为Solution的类 class Solution {// 定义一个public方法largestSumAfterKNegations&#xff0c;输入参数为一个整数数组nums和一个整数K&#xff0c;返回值类型为整数public int largestSumAfterKNegations(int[] nums, int K) {// 使用Java流对数组中的元素进行操…

win11 环境配置 之 Jmeter

一、安装 JDK 1. 安装 jdk 截至当前最新时间&#xff1a; 2024.3.27 jdk最新的版本 是 官网下载地址&#xff1a; https://www.oracle.com/java/technologies/downloads/ 建议下载 jdk17 另存为到该电脑的 D 盘下&#xff0c;新建jdk文件夹 开始安装到 jdk 文件夹下 2. 配…

1111111111111111111111111111111111

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和技术。关…

ClickHouse初体验

1.clickHouse是啥&#xff1f; ClickHouse 是俄罗斯的 Yandex 于 2016 年开源的列式存储数据库(DBMS)&#xff0c;使用 C语言编写&#xff0c;主要用于在线分析处理查询(OLAP)&#xff0c;能够使用SQL查询实时生成分析数据报告 2.clickHouse的特点 2.1列式存储 对于列的聚合&…

Java零基础入门到精通_Day 3

37 switch default&#xff1a; 后面的break;可以省略 38 春夏秋冬 注意事项:在switch语句中&#xff0c;如果case控制的语句体后面不写break&#xff0c;将出现穿透现象&#xff0c;在不判断下一个case值的情况下&#xff0c;向下运行 直到遇到break&#xff0c;或者整体swi…

班级综合测评管理系统的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)

本项目包含可运行源码数据库LW&#xff0c;文末可获取本项目的所有资料。 推荐阅读100套最新项目持续更新中..... 2024年计算机毕业论文&#xff08;设计&#xff09;学生选题参考合集推荐收藏&#xff08;包含Springboot、jsp、ssmvue等技术项目合集&#xff09; 目录 1. …

opengl草稿复习,承上启下

目录 1、链接文件夹中的cpp 2、链接资源到输出目录 3、多编译目标 4、cmakelist添加库 4、添加glfw和glad 5、glfw运行 6、NDC、VBO、VAO 7、渐变三角形 8、渲染两个三角形 9、渲染两个三角形&#xff0c;同时基于原来颜色进行渐变 1、链接文件夹中的cpp cmake_minimu…

一本书掌握数字化运维方法,构建数字化运维体系

文章目录 前言主要内容读者对象 前言 数字化转型已经成为大势所趋&#xff0c;各行各业正朝着数字化方向转型&#xff0c;利用数字化转型方法论和前沿科学技术实现降本、提质、增效&#xff0c;从而提升竞争力。 数字化转型是一项长期工作&#xff0c;包含的要素非常丰富&…

React和Vue.js的有什么区别

在当今前端开发领域&#xff0c;React 和 Vue.js 作为两大热门的前端框架备受开发者关注。它们各自拥有独特的特点和优势&#xff0c;在实际项目中有着广泛的运用。本文将深入探讨 React 和 Vue.js 之间的区别&#xff0c;从组件化方式、数据绑定、模板语法以及生态系统和工具支…

鸿蒙HarmonyOS应用开发之C/C++标准库机制概述

OpenHarmony NDK提供业界标准库 libc标准库、 C标准库 &#xff0c;本文用于介绍C/C标准库在OpenHarmony中的机制&#xff0c;开发者了解这些机制有助于在NDK开发过程中避免相关问题。 1. C兼容性 在OpenHarmony系统中&#xff0c;系统库与应用Native库都在使用C标准库&#…

linux磁盘管理大全

1、磁盘接口类型 #外部结构分类 1、机械硬盘{转速} 2、固态硬盘 ​ 了解 1、IED 淘汰 2、SCSI 淘汰 3、SATA 笔记本 台式机 家用 4、SAS 企业标配 5、PCI-E 企业标配 2、磁盘转速 磁盘转速决定了磁盘读写速度 磁盘越大&#xff0c;存储速度越小。磁盘转速如…

分页-PageHelper原理以及实时分页-键集分页

一.PageHelper原理 1.使用 PageHelper 是国内非常优秀的一款开源 mybatis 分页插件&#xff0c;它支持常用的主流数据库&#xff0c;例如 Oracle、Mysql、MariaDB、SQLite、Hsqldb 等。 PageHelper 的安装很简单&#xff0c;只需要在 pom.xml 中加入以下依赖即可&#xff1a…

pin脚的缺陷检测

忍不住 我才是最大的缺陷首先应该学好表达头脑风暴分割paddledetection小目标检测也不行缺陷检测1.缺陷标注修改代码为自己的数据集训练训练结果结果图片 结论再次出发 我才是最大的缺陷 真的&#xff0c;我真的被整无语了。测测测测&#xff0c;测个鬼。一天天的净整些没用的…

隐蔽处工程监管系统

随着科技的飞速发展&#xff0c;信息化、智能化已经成为各行各业发展的必然趋势。在工程建设领域&#xff0c;传统的监管方式已经难以满足现代工程管理的需求。为了提高工程监管的效率和精度&#xff0c;信鸥科技倾力打造了一款全新的工程监管系统&#xff0c;为工程建设行业带…

14:有效的符号

给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对应的相同类型的左括…