VTK中对于相机camera的设置

news2024/11/28 13:04:30

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.coloradmin.cn/o/2249072.html

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

相关文章

glog在vs2022 hello world中使用

准备工作 设置dns为阿里云dns 223.5.5.5,下载cmake,vs2022,git git clone https://github.com/google/glog.git cd glog mkdir build cd build cmake .. 拷贝文件 新建hello world并设置 设置预处理器增加GLOG_USE_GLOG_EXPORT;GLOG_NO_AB…

Python开发环境搭建+conda管理环境

下载Miniconda 推荐从清华镜像下载安装包 Index of /anaconda/miniconda/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 打开网页后,下拉到最后找到Miniconda3-latest前缀的文件,或者网页中直接搜索Miniconda3-latest,都可以找…

深度学习:GPT-2的MindSpore实践

GPT-2简介 GPT-2是一个由OpenAI于2019年提出的自回归语言模型。与GPT-1相比,仍基于Transformer Decoder架构,但是做出了一定改进。 模型规格上: GPT-1有117M参数,为下游微调任务提供预训练模型。 GPT-2显著增加了模型规模&…

C++设计模式-策略模式-StrategyMethod

动机(Motivation) 在软件构建过程中,某些对象使用的算法可能多种多样,经常改变,如果将这些算法都编码到对象中,将会使对象变得异常复杂;而且有时候支持不使用的算法也是一个性能负担。 如何在运…

Harbor安装、HTTPS配置、修改端口后不可访问?

Harbor安装、HTTPS配置、修改端口后不可访问? 大家好,我是秋意零。今天分享Harbor相关内容,安装部分可完全参考官方文档,写的也比较详细。 安装Harbor 官方文档:https://goharbor.io/docs/2.12.0/install-config/ …

DMS2024|思腾合力受邀参加第二届CCF数字医学大会

随着人工智能技术的不断进步,其在医学领域的应用日益广泛。从医学影像分析、疾病诊断到个性化治疗方案设计,人工智能正在逐步改变传统的医疗模式。未来,数字医学将更加注重数据的整合与挖掘,推动医学研究的深入与创新。 2024年11…

Python 绘制 向量减法

Python 绘制 向量减法 flyfish import matplotlib.pyplot as plt# 向量数据 a [1, 2] b [3, 2]# 计算-a 和 a-b minus_b [-x for x in b] # 反转向量b得到-b a_minus_b [a[i] minus_b[i] for i in range(2)] # 计算a - b# 绘制原点 plt.plot([0], [0], ko) # 黑色圆点…

工作坊报名|使用 TEN 与 Azure,探索你的多模态交互新场景

GPT-4o Realtime API 发布,语音 AI 技术正在进入一场新的爆发。语音AI技术的实时语音和视觉互动能力将为我们带来更多全新创意和应用场景。 实时音频交互: 允许应用程序实时接收并响应语音和文本输入。自然语音生成: 减少 AI 技术生成的语音…

node.js基础学习-http模块-创建HTTP服务器、客户端(一)

http模块式Node.js内置的模块,用于创建和管理HTTP服务器。Node.js使用JavaScript实现,因此性能更好。 使用http模块创建服务器,我们建议使用commonjs模块规范,因为很多第三方的组件都使用了这种规范。当然es6写法也支持。 下面就是…

黑马程序员Java项目实战《苍穹外卖》Day01

苍穹外卖-day01 课程内容 软件开发整体介绍苍穹外卖项目介绍开发环境搭建导入接口文档Swagger 项目整体效果展示: ​ 管理端-外卖商家使用 ​ 用户端-点餐用户使用 当我们完成该项目的学习,可以培养以下能力: 1. 软件开发整体介绍 作为一…

【NOIP普及组】表达式求值

【NOIP普及组】表达式求值 C语言代码C 代码Java代码Python代码 💐The Begin💐点点关注,收藏不迷路💐 给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值。 输入 输入仅有一行,为需要你计算的…

“蜀道山”高校联合公益赛 Web (部分)

文章目录 奶龙牌WAF海关警察训练平台恶意代码检测器 奶龙牌WAF <?php if ($_SERVER[REQUEST_METHOD] POST && isset($_FILES[upload_file])) {$file $_FILES[upload_file];if ($file[error] UPLOAD_ERR_OK) {$name isset($_GET[name]) ? $_GET[name] : basen…

鸿蒙中的Image组件如何引用网络图片

1.引用网络图片资源 引入网络图片需要申请权限ohos.permission.INTERNET&#xff0c;此时&#xff0c;Image组件的src参数为网络图片的链接&#xff0c;为了成功加载网络图片&#xff0c;您需要在module.json5文件中申请网络访问权限 注意&#xff1a;实际可用的时候&#xff0…

问题记录-Java后端

问题记录 目录 问题记录1.多数据源使用事务注意事项&#xff1f;2.mybatis执行MySQL的存储过程&#xff1f;3.springBoot加载不到nacos配置中心的配置问题4.服务器产生大量close_wait情况 1.多数据源使用事务注意事项&#xff1f; 问题&#xff1a;在springBoot项目中多表处理数…

PySide6 QSS(Qt Style Sheets) Reference: PySide6 QSS参考指南

Qt官网参考资料&#xff1a; QSS介绍&#xff1a; Styling the Widgets Application - Qt for Pythonhttps://doc.qt.io/qtforpython-6/tutorials/basictutorial/widgetstyling.html#tutorial-widgetstyling QSS 参考手册&#xff1a; Qt Style Sheets Reference | Qt Widge…

vue3 开发利器——unplugin-auto-import

这玩意儿是干啥的&#xff1f; 还记得 Vue 3 的组合式 API 语法吗&#xff1f;如果有印象&#xff0c;那你肯定对以下代码有着刻入 DNA 般的熟悉&#xff1a; 刚开始写觉得没什么&#xff0c;但是后来渐渐发现&#xff0c;这玩意儿几乎每个页面都有啊&#xff01; 每次都要写…

搭建AI知识库:打造坚实的团队知识堡垒

在信息爆炸的时代&#xff0c;企业面临着知识管理的挑战。团队知识堡垒的构建&#xff0c;即搭建一个高效的AI知识库&#xff0c;对于保护和利用知识资产、提升团队协作效率和创新能力至关重要。本文将探讨搭建AI知识库的重要性、策略以及如何通过这一系统打造坚实的团队知识堡…

前端-Git

一.基本概念 Git版本控制系统时一个分布式系统&#xff0c;是用来保存工程源代码历史状态的命令行工具 简单来说Git的作用就是版本管理工具。 Git的应用场景&#xff1a;多人开发管理代码&#xff1b;异地开发&#xff0c;版本管理&#xff0c;版本回滚。 Git 的三个区域&a…

《Shader入门精要》透明效果

代码以及实例图可以看github &#xff1a;zaizai77/Shader-Learn: 实现一些书里讲到的shader 在实时渲染中要实现透明效果&#xff0c;通常会在渲染模型时控制它的透明通道&#xff08;Alpha Channel&#xff09;​。当开启透明混合后&#xff0c;当一个物体被渲染到屏幕上时&…

Exploring Prompt Engineering: A Systematic Review with SWOT Analysis

文章目录 题目摘要简介方法论背景相关工作评估结论 题目 探索快速工程&#xff1a;基于 SWOT 分析的系统评价 论文地址&#xff1a; https://arxiv.org/abs/2410.12843 摘要 在本文中&#xff0c;我们对大型语言模型 (LLM) 领域的提示工程技术进行了全面的 SWOT 分析。我们强…