VTK知识学习(9)-空间变换

1、前言

 在三维空间里定义的三维模型,最后显示时都是投影到二维平面,比如在屏幕上显示。
 三维到二维的投影包括透视投影(Perspective Projection)和正交投影(Orthogonale Projection)。正交投影也叫平行投影。
 变换的基本元素均是三维坐标点,三维坐标点(x,y,z)通常用齐次坐标(xh,yh,zh,wh)来表示。

若wh=0,则表示无穷远的点。
 利用齐次坐标,可以将空间变换用4X4的矩阵来表示。平移、旋转、缩放等仿射变换都可以用矩阵相乘的形式表示。
 VTK里与空间变换相关的类有:

vtkTransform2D、vtkTransform、vtkPerspectiveTransform、vtkGeneralTransform、vtkTransfromFilter、vtkMatrix4X4t等。

2、关键代码


vtkTransform transform = vtkTransform.New();
transform.PostMultiply();
transform.RotateZ(40);         //设置绕Z轴旋转40度
transform.Translate(10, 0, 0); //平移大小(10,0,0);
actor.SetUserTransform(transform); //设置用户定义的变换矩阵,实现模型的空间变换。

先定义了 vtkTransform 对象,并设置使用右乘计算变换矩阵。

RotateZ()设置绕Z轴旋转40°,并使用 Translate()设置平移大小为(10,0,0),

最后通过 vtkActor::SetUserTransform()方法设置用户定义的变换矩阵,实现模型的空间变换。

3、完整代码

 vtkCylinderSource cylinderSource = vtkCylinderSource.New();
cylinderSource.SetHeight(3.0);
cylinderSource.SetRadius(1.0);
cylinderSource.SetResolution(100);vtkPolyDataMapper polyDataMapper = vtkPolyDataMapper.New();
polyDataMapper.SetInputConnection(cylinderSource.GetOutputPort());vtkActor actor = vtkActor.New();
actor.SetMapper(polyDataMapper);vtkTransform transform = vtkTransform.New();
transform.PostMultiply();
transform.RotateZ(40);         //设置绕Z轴旋转40度
transform.Translate(10, 0, 0); //平移大小(10,0,0);
actor.SetUserTransform(transform); //设置用户定义的变换矩阵,实现模型的空间变换。vtkRenderer renderer = vtkRenderer.New();
renderer.AddActor(actor);
renderer.SetBackground(0.3, 0.8, 0.7);vtkLight myLigth = vtkLight.New();
myLigth.SetColor(0, 1, 1);
myLigth.SetPosition(0, 0, 1);
double[] infos = renderer.GetActiveCamera().GetFocalPoint();
myLigth.SetFocalPoint(infos[0], infos[1], infos[2]);
renderer.AddLight(myLigth);vtkRenderWindow renWin = renderWindowControl.RenderWindow;
renWin.AddRenderer(renderer);
renWin.Render();

4、效果

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

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

相关文章

英伟达 Isaac Sim仿真平台安装体验

硬件配置、系统 RTX 3080RAM: 32Gi7-12700Fubuntu20.04 使用Omniverse launcher安装加载isaac sim 这种方法我并没有成功,因为启动的时候报错Failed to create any GPU devices, including an attempt with compatibility mode. 。后面我选择使用 isaac sim dock…

笔记02----重新思考轻量化视觉Transformer中的局部感知CloFormer(即插即用)

1. 基本信息 论文标题: 《Rethinking Local Perception in Lightweight Vision Transformer》中文标题: 《重新思考轻量化视觉Transformer中的局部感知》作者单位: 清华大学发表时间: 2023论文地址: https://arxiv.org/abs/2303.17803代码地址: https://github.com/qhfan/CloF…

LVGL-从入门到熟练使用

LVGL简介 LVGL( Light and Versatile Graphics Library )是一个轻量、多功能的开源图形库。 1、丰富且强大的模块化图形组件:按钮 、图表 、列表、滑动条、图片等 2、高级的图形引擎:动画、抗锯齿、透明度、平滑滚动、图层混合等…

【python系列】python数据类型的分类和比较

一、数据类型的定义 在程序设计的类型系统中,数据类型(英语:Data type),又称资料型态、资料型别,是用来约束数据的解释。——Wikipedia 从定义我们可以看出来,数字类型的理解最主要的是约束数据…

SpringBoot(二十七)SpringBoot集成XRebel实现异常定位

之前我使用JRebel实现了IDEA热更新。 这几天我无聊的时候,研究了一下JRebel发现,好像不止JRebel一个插件,同时安装的还有一个XRebel插件,百度了一下,XRebel可以实现异常定位,还有方法的执行分析&#xff0c…

windows上部署flask程序

文章目录 前言一、准备工作二、配置 Gunicorn 或 uWSGI1.安装 Waitress2.修改启动文件来使用 Waitress 启动 Flask 应用3.配置反向代理(可选)4.启动程序访问 三.Flask 程序在 Windows 启动时自动启动1.使用 nssm(Non-Sucking Service Manager…

python调用MySql保姆级教程(包会的)

目录 一、下载MySql 二、安装MySql 三、验证MySql是否OK 1、MySQL控制台验证 2、命令提示符cmd窗口验证 四、Python调用MySql 4.1 安装pysql 4.2 使用pysql 4.2.1、连接数据库服务器并且创建数据库和表 4.2.2 、将人脸识别考勤系统识别到的数据自动填入到数据库的表单中…

如何解决将长视频转换为易于处理的 Spacetime Patch 的问题?

🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 将长视频转换为易于处理的 Spacetime Patch(时空补丁)是一项挑战,尤其是当视频内容复杂或包含长时间连续场景时。在计算机视觉和视频分析等领域,Spacetim…

大数据学习16之Spark-Core

1. 概述 1.1.简介 Apache Spark 是专门为大规模数据处理而设计的快速通用的计算引擎。 一种类似 Hadoop MapReduce 的通用并行计算框架,它拥有MapReduce的优点,不同于MR的是Job中间结果可以缓存在内存中,从而不需要读取HDFS,减少…

LeetCode 力扣 热题 100道(五)最长回文子串(C++)

最长回文子串 给你一个字符串 s,找到 s 中最长的 回文子串。 回文性 如果字符串向前和向后读都相同,则它满足 回文性 子字符串子字符串 是字符串中连续的 非空 字符序列。 动态规划法 class Solution { public:string longestPalindrome(string s) {i…

dropout层/暂退法

作用:正则化,缓解过拟合 实现方式: 在前向传播过程中,将该层的一部分神经元的输出特征随机丢掉(设为 0),相当于随机消灭一部分神经元仅在训练期间使用,测试时没有神经元被丢掉。 正…

【圆上的连线——卡特兰数】

题目 思路 因为不相交,所以每个点最多连出一条线,所以参与连线的点一定是偶数个 我们按照选出点的数量 2,4 …… 2x 将答案划分,答案可以表示为 (假设我们选出2x个点连线,假设方法数为 :2x个点参…

Pytest-Bdd-Playwright 系列教程(11):场景快捷方式

Pytest-Bdd-Playwright 系列教程(11):场景快捷方式 前言1. 手动绑定场景的传统方法2. 场景快捷方式的自动绑定方法2.1 绑定所有场景2.2 绑定多个路径2.3 自动与手动绑定的结合 3. 示例:结合 Playwright 的实际应用3.1 项目目录结构…

day-17 反转字符串中的单词

利用split()函数和substring函数 code: class Solution {public String reverseWords(String s) {int m0;while(s.charAt(m) ){m;}ss.substring(m);String arr[]s.split("[\\s]");int narr.length;String ss"";for(int in-1;i>1;i--){ssssarr[i]"…

Ubuntu20.04从零安装IsaacSim/IsaacLab

Ubuntu20.04从零安装IsaacSim/IsaacLab 电脑硬件配置:安装Isaac sim方案一:pip安装方案二:预构建二进制文件安装1、安装ominiverse2、在ominiverse中安装isaac sim,下载最新的4.2版本 安装Isaac Lab1、IsaacLab环境克隆2、创建con…

力扣hot100-->二分查找

二分查找 1. 33. 搜索旋转排序数组 中等 整数数组 nums 按升序排列&#xff0c;数组中的值 互不相同 。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 < k < nums.length&#xff09;上进行了 旋转&#xff0c;使数组变为 [nums[k], nums[…

Javaweb梳理17——HTMLCSS简介

Javaweb梳理17——HTML&CSS简介 17 HTML&CSS简介17.1 HTML介绍17.2 快速入门17.3 基础标签17.3 .1 标题标签17.3.2 hr标签17.3.3 字体标签17.3.4 换行17.3.8 案例17.3.9 图片、音频、视频标签17.3.10 超链接标签17.3.11 列表标签 17 HTML&CSS简介 今日目标&#x…

倍福PLC数据 转 IEC61850项目案例

目录 1 案例说明 2 VFBOX网关工作原理 3 准备工作 4 设置倍福PLC 5 配置网关参数采集倍福PLC数据 6 用IEC61850协议转发数据 7 网关使用多个逻辑设备和逻辑节点的方法 8 案例总结 1 案例说明 设置倍福PLC&#xff0c;开通ADS通信设置网关采集倍福PLC数据把采集的数据转…

代码辅助工具 GPT / Cursor

代码辅助工具 GPT / Cursor 文章说明GPT辅助效果第一次提问效果第二次提问效果第三第四次提问效果手动微调布局和宽高的效果第五次要求添加主题切换效果第六次提问--继续让它优化主题切换的效果第七次提问--修改主题切换的按钮位置并添加动画提问词第一次提问词第二次提问词第三…

FPGA 常用 I/O 电平标准有哪些?

在 FPGA 的神奇世界里&#xff0c;I/O 电平标准就像魔法咒语&#xff0c;掌控着芯片与外界交流的方式。对于初涉 FPGA 领域的小白来说&#xff0c;这些标准可能有点神秘莫测&#xff0c;但别担心&#xff0c;今天我就用最通俗易懂的方式为你揭开它们的面纱。 一、电平标准的魔…