VTK中对于相机camera的设置

1. 相机的核心属性

在 VTK 中,vtkCamera 的核心属性有默认值。如果你不设置这些属性,相机会使用默认值来渲染场景。

  1. Position(默认值:(0, 0, 1)

    • 默认情况下,相机位于 Z 轴正方向的 (0, 0, 1) 位置。
    • 这是一个距离原点 1 个单位距离的位置。
  2. FocalPoint(默认值:(0, 0, 0)

    • 默认焦点是原点 (0, 0, 0),相机默认“看向”原点。
  3. ViewUp(默认值:(0, 1, 0)

    • 默认“上方向”是 Y 轴正方向 (0, 1, 0)
  4. ViewPlaneNormal(隐式计算)

    • 默认情况下,ViewPlaneNormal 是从 Position 到 FocalPoint 的单位向量,即 (0, 0, -1)

2. 相机的常用方法

以下是 VTK 相机中常用方法的详细说明,包括作用、用法,以及默认状态


(1)位置调整方法

这些方法用于设置或调整相机的位置和焦点。

1. SetPosition(x, y, z)
  • 作用:设置相机在 3D 空间中的位置。
  • 用法camera.SetPosition(10, 10, 10) 将相机放置在 (10, 10, 10)
  • 默认状态:如果未设置,相机默认位置为 (0, 0, 1),位于 Z 轴正方向。
2. SetFocalPoint(x, y, z)
  • 作用:设置相机“看向”的焦点。
  • 用法camera.SetFocalPoint(0, 0, 0) 将相机的焦点设置为原点。
  • 默认状态:如果未设置,焦点默认为原点 (0, 0, 0)
3. SetViewUp(x, y, z)
  • 作用:设置相机的“上方向”。
  • 用法camera.SetViewUp(0, 1, 0) 设置 Y 轴为“上方向”。
  • 默认状态:如果未设置,“上方向”默认为 Y 轴正方向 (0, 1, 0)
4. Dolly(factor)
  • 作用:缩放相机视图,即沿视线方向移动相机。
  • 用法camera.Dolly(2.0) 将相机拉近到焦点的 1/2 距离。
  • 默认状态:如果未调用,Dolly 不会影响相机,默认距离由 Position 和 FocalPoint 决定。
5. Zoom(factor)
  • 作用:改变相机的视场角(FOV),实现放大/缩小效果。
  • 用法camera.Zoom(1.5) 缩小视场角,放大画面。
  • 默认状态:如果未调用,Zoom 默认值为 1.0,即视场角不变。

(2)方向调整方法

这些方法用于旋转相机,调整相机的视线方向。

1. Azimuth(angle)
  • 作用:围绕世界坐标系的 Z 轴旋转相机。
  • 用法camera.Azimuth(30) 将相机绕 Z 轴旋转 30°。
  • 默认状态:如果未调用,Azimuth 不会改变相机方向。
2. Elevation(angle)
  • 作用:围绕相机自身的 X 轴旋转相机。
  • 用法camera.Elevation(45) 将相机绕自身 X 轴旋转 45°。
  • 默认状态:如果未调用,Elevation 不会改变相机方向。
3. Roll(angle)
  • 作用:围绕相机的视线方向(ViewPlaneNormal)旋转相机。
  • 用法camera.Roll(90) 将相机绕视线方向旋转 90°。
  • 默认状态:如果未调用,Roll 不会改变相机的方向。
4. OrthogonalizeViewUp()
  • 作用:调整 ViewUp 向量,使其与 ViewPlaneNormal 向量正交。
  • 用法camera.OrthogonalizeViewUp()
  • 默认状态:如果未调用,ViewUp 不会自动正交化,可能因旋转操作导致方向混乱。
5. Yaw(angle) 和 Pitch(angle)
  • 作用:类似于 Azimuth() 和 Elevation(),但它们围绕相机自身坐标系的轴旋转。
    • Yaw(angle):围绕相机自身的 Y 轴旋转。
    • Pitch(angle):围绕相机自身的 X 轴旋转。
  • 用法
    camera.Yaw(30)    # 绕 Y 轴旋转 30°
    camera.Pitch(45)  # 绕 X 轴旋转 45°
    
  • 默认状态:如果未调用,这些旋转操作不会影响相机方向。

(3)其他常用功能

1. ComputeViewPlaneNormal()
  • 作用:重新计算视线方向(ViewPlaneNormal)。
  • 用法camera.ComputeViewPlaneNormal()
  • 默认状态:默认情况下,ViewPlaneNormal 会根据 Position 和 FocalPoint 自动计算。
2. SetParallelProjection(state)
  • 作用:设置相机为平行投影模式。
  • 用法camera.SetParallelProjection(1) 开启平行投影,0 为透视投影。
  • 默认状态:默认情况下,相机使用透视投影模式。
3. SetClippingRange(near, far)
  • 作用:设置相机的裁剪范围。
  • 用法camera.SetClippingRange(0.1, 1000)
  • 默认状态:默认裁剪范围为 (0.1, 1000)
4. ResetCamera()
  • 作用:重置相机,使场景中的所有对象都在视野内。
  • 用法renderer.ResetCamera()
  • 默认状态:如果未调用,渲染器不会自动调整相机,可能导致场景不可见。
5. GetViewTransformMatrix()
  • 作用:获取相机的视图变换矩阵。
  • 用法matrix = camera.GetViewTransformMatrix()
  • 默认状态:默认情况下,相机的变换矩阵由其位置、焦点和方向自动计算。

旋转相机 -> 视觉效果上旋转三维vr图像

ren.GetActiveCamera().Azimuth(azimuth_angle)  # 水平旋转
ren.GetActiveCamera().Elevation(elevation_angle)  # 垂直旋转ren.GetActiveCamera().OrthogonalizeViewUp()

在使用 Azimuth() 和 Elevation() 进行组合旋转时,相机会围绕不同的轴旋转:

  • Azimuth():围绕世界坐标系的 Z 轴旋转。
  • Elevation():围绕相机自身的 X 轴旋转。

OrthogonalizeViewUp():确保相机的“上方向”(ViewUp 向量)与相机的视线方向(从相机位置指向焦点的向量)正交

如果不使用OrthogonalizeViewUp():

这些旋转会改变相机的位置和方向,但不会自动调整 ViewUp。如果多次旋转后,ViewUp 和 ViewPlaneNormal 不再正交,会导致以下问题:

  1. 相机方向混乱:相机的“上”方向可能不再符合直觉(例如,图像可能会出现倾斜甚至上下颠倒)。
  2. 视角翻转:当 Elevation() 的角度过大时(例如接近 ±90°),ViewUp 可能会与 ViewPlaneNormal 重合或接近重合,导致视角完全翻转。
  3. 累积误差:每次旋转都会进一步破坏 ViewUp 和 ViewPlaneNormal 的正交性,导致问题越来越严重。

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

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

相关文章

学习日志017--python的几种排序算法

冒泡排序 def bubble_sort(alist):i 0while i<len(alist):j0while j<len(alist)-1:if alist[j]>alist[j1]:alist[j],alist[j1] alist[j1],alist[j]j1i1l [2,4,6,8,0,1,3,5,7,9] bubble_sort(l) print(l) 选择排序 def select_sort(alist):i 0while i<len(al…

超高流量多级缓存架构设计!

文章内容已经收录在《面试进阶之路》&#xff0c;从原理出发&#xff0c;直击面试难点&#xff0c;实现更高维度的降维打击&#xff01; 文章目录 电商-多级缓存架构设计多级缓存架构介绍多级缓存请求流程负载均衡算法的选择轮询负载均衡一致性哈希负载均衡算法选择 应用层 Ngi…

红黑树的概念以及基本模拟

目录 一、概念和规则&#xff1a; 1、思考为什么最长路径不超过最短路径的二倍&#xff1f; 2、红黑树的效率&#xff1f; 二、红黑树的代码实现 1、红黑树的节点结构 2、红黑树的插入 1、大致过程&#xff1a; 2、维护的三种情况&#xff1a; 1、情况一&#xff1a;变…

IP反向追踪技术,了解一下?

DOSS&#xff08;拒绝服务&#xff09;攻击是现在比较常见的网络攻击手段。想象一下&#xff0c;有某个恶意分子想要搞垮某个网站&#xff0c;他就会使用DOSS攻击。这种攻击常常使用的方式是IP欺骗。他会伪装成正常的IP地址&#xff0c;让网络服务器以为有很多平常的请求&#…

【C++习题】15.滑动窗口_串联所有单词的子串

文章目录 题目链接&#xff1a;题目描述&#xff1a;解法C 算法代码&#xff1a;图解 题目链接&#xff1a; 30. 串联所有单词的子串 题目描述&#xff1a; 解法 滑动窗口哈希表 这题和第14题不同的是&#xff1a; 哈希表不同&#xff1a;hash<string,int>left与right指…

论文笔记(五十七)Diffusion Model Predictive Control

Diffusion Model Predictive Control 文章概括摘要1. Introduction2. Related work3. 方法3.1 模型预测控制3.2. 模型学习3.3. 规划&#xff08;Planning&#xff09;3.4. 适应 4. 实验&#xff08;Experiments&#xff09;4.1. 对于固定奖励&#xff0c;D-MPC 可与其他离线 RL…

oracle 创建只可以查询权限用户+sqldeveloper如何看到对应表

声明 申明部分是从其他csdn用户哪里复制的&#xff0c;只是自己操作后发现无法达到我最后的预期&#xff0c;所以关闭忘记是看的那篇了&#xff0c;如果有侵权请见谅&#xff0c;联系我删除谢谢。 好了&#xff0c;故事的开始是我最近删投产表了。没错职业黑点&#xff0c;清…

比特币libsecp256k1中safegcd算法形式化验证完成

1. 引言 比特币和其他链&#xff08;如 Liquid&#xff09;的安全性取决于 ECDSA 和 Schnorr 签名等数字签名算法的使用。Bitcoin Core 和 Liquid 都使用名为 libsecp256k1 的 C 库来提供这些数字签名算法&#xff0c;该库以其所运行的椭圆曲线命名。这些算法利用一种称为modu…

15分钟做完一个小程序,腾讯这个工具有点东西

我记得很久之前&#xff0c;我们都在讲什么低代码/无代码平台&#xff0c;这个概念很久了&#xff0c;但是&#xff0c;一直没有很好的落地&#xff0c;整体的效果也不算好。 自从去年 ChatGPT 这类大模型大火以来&#xff0c;各大科技公司也都推出了很多 AI 代码助手&#xff…

Kafka知识体系

一、认识Kafka 1. kafka适用场景 消息系统&#xff1a;kafka不仅具备传统的系统解耦、流量削峰、缓冲、异步通信、可扩展性、可恢复性等功能&#xff0c;还有其他消息系统难以实现的消息顺序消费及消息回溯功能。 存储系统&#xff1a;kafka把消息持久化到磁盘上&#xff0c…

JVM调优篇之JVM基础入门AND字节码文件解读

目录 Java程序编译class文件内容常量池附录-访问标识表附录-常量池类型列表 Java程序编译 Java文件通过编译成class文件后&#xff0c;通过JVM虚拟机解释字节码文件转为操作系统执行的二进制码运行。 规范 Java虚拟机有自己的一套规范&#xff0c;遵循这套规范&#xff0c;任…

【Petri网导论学习笔记】Petri网导论入门学习(十一) —— 3.3 变迁发生序列与Petri网语言

目录 3.3 变迁发生序列与Petri网语言定义 3.4定义 3.5定义 3.6定理 3.5例 3.9定义 3.7例 3.10定理 3.6定理 3.7 有界Petri网泵引理推论 3.5定义 3.9定理 3.8定义 3.10定义 3.11定义 3.12定理 3.93.3 变迁发生序列与Petri网语言 对于 Petri 网进行分析的另一种方法是考察网系统…

Flink--API 之Transformation-转换算子的使用解析

目录 一、常用转换算子详解 &#xff08;一&#xff09;map 算子 &#xff08;二&#xff09;flatMap 算子 &#xff08;三&#xff09;filter 算子 &#xff08;四&#xff09;keyBy 算子 元组类型 POJO &#xff08;五&#xff09;reduce 算子 二、合并与连接操作 …

Top 10 Tools to Level Up Your Prompt Engineering Skills

此文章文字是转载翻译&#xff0c;图片是自已用AI 重新生成的。文字内容来自 https://www.aifire.co/p/top-10-ai-prompt-engineering-tools 供记录学习使用。 Introduction to AI Prompt Engineering AI Prompt Engineering 简介 1&#xff0c;Prompt Engineering 提示工程…

Rust语言俄罗斯方块(漂亮的界面案例+详细的代码解说+完美运行)

tetris-demo A Tetris example written in Rust using Piston in under 500 lines of code 项目地址: https://gitcode.com/gh_mirrors/te/tetris-demo 项目介绍 "Tetris Example in Rust, v2" 是一个用Rust语言编写的俄罗斯方块游戏示例。这个项目不仅是一个简单…

Spring Boot 与 Spring Cloud Alibaba 版本兼容对照

版本选择要点 Spring Boot 3.x 与 Spring Cloud Alibaba 2022.0.x Spring Boot 3.x 基于 Jakarta EE&#xff0c;javax.* 更换为 jakarta.*。 需要使用 Spring Cloud 2022.0.x 和 Spring Cloud Alibaba 2022.0.x。 Alibaba 2022.0.x 对 Spring Boot 3.x 的支持在其发行说明中…

(免费送源码)计算机毕业设计原创定制:Java+ssm+JSP+Ajax SSM棕榈校园论坛的开发

摘要 随着计算机科学技术的高速发展,计算机成了人们日常生活的必需品&#xff0c;从而也带动了一系列与此相关产业&#xff0c;是人们的生活发生了翻天覆地的变化&#xff0c;而网络化的出现也在改变着人们传统的生活方式&#xff0c;包括工作&#xff0c;学习&#xff0c;社交…

Ubuntu Opencv 源码包安装

说明&#xff1a; ubuntu20.04 建议 使用 opencv-4.6.0版本 ubuntu18.04 建议 使用 opencv-4.5.2-版本 安装包准备 1、下载源码包 OpenCV官网 下载相关版本源码 Sources # 克隆方式 OpenCV 源码git clone https://github.com/opencv/opencv.gitcd opencvgit checkout 4.5.2 …

Linux 下自动化之路:达梦数据库定期备份并推送至 GitLab 全攻略

目录 环境准备 生成SSH 密钥对 数据库备份并推送到gitlab脚本 设置定时任务 环境准备 服务器要有安装达梦数据库&#xff08;达梦安装这里就不示例了&#xff09;&#xff0c;git 安装Git 1、首先&#xff0c;确保包列表是最新的&#xff0c;运行以下命令&#xff1a; …

<项目代码>YOLOv8 停车场空位识别<目标检测>

YOLOv8是一种单阶段&#xff08;one-stage&#xff09;检测算法&#xff0c;它将目标检测问题转化为一个回归问题&#xff0c;能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法&#xff08;如Faster R-CNN&#xff09;&#xff0c;YOLOv8具有更高的…