VTK笔记-vtkCamera相机向ViewUp方向旋转90°后遇到的问题

本文讲述了在使用VTK相机进行图像操作时,如何通过调用OrthogonalizeViewUp()函数修正Elevation旋转导致的物体转向问题,通过实例演示了Azimuth、Elevation和Roll设置后如何确保相机正确定向。
摘要由CSDN通过智能技术生成

在工作中使用到了修改相机的旋转角度,获取图像;
或者是使用SetPositionSetFocalPoint设置与ViewUp相平行时,也会出现相机以一种难以理解的将物体转向周围一个度数。
网上有人遇到“当使用Elevation旋转+90°或者-90°时,图像会以一种难以理解的将物体转向周围一个度数。”,跟我遇到的情况不一样;
在StackOverflow上有问题:Problems using the VTK camera function elevation
使用OrthogonalizeViewUp()函数可以解决这个问题;

OrthogonalizeViewUp

函数声明如下:

void vtkCamera::OrthogonalizeViewUp();

函数解释中写道:重新计算ViewUp向量,使其与摄影机坐标到焦点坐标的向量垂直。除非要在相机上使用Yaw偏航或Azimuth方位角,否则没有必要这样做。
VTK 对 camera 的操作方法如下中写道:基于焦点,使用Azimuth()和Elevation()方法设置相机的方位角和高度角/仰角(度,degree)[球坐标系统]。注意其中在南极和北极存在奇异点,即视向量平行于视平面法向。此时可以使用OrthogonalizeViewUp()方法强制其正交。但这会改变相机坐标系统。

将之前的代码修改如下:

camera->Azimuth(it->x_rotate_angle);
camera->Elevation(it->y_rotate_angle);
camera->Roll(it->z_rotate_angle);
camera->OrthogonalizeViewUp();
camera->SetPosition(position[0] + it->x_position, position[1] + it->y_position, position[2] + it->z_position);
camera->SetFocalPoint(focalPoint_position[0],focalPoint_position[1],focalPoint_position[2]);
renderer->ResetCameraClippingRange();

达到预期的效果,解决问题;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黑山老妖的笔记本

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值