vtk 转换视角_vtkCamera常用方法

例子:

对 camera 的操作方法如下:

vtkCamera *aCamera = vtkCamera::New();

aCamera->SetViewUp (0, 0, -1);//设视角位置

aCamera->SetPosition (0, 1, 0);//设观察对象位

aCamera->SetFocalPoint (0, 0, 0);//设焦点

aCamera->ComputeViewPlaneNormal();//自动

aRenderer->SetActiveCamera(aCamera);

1.SetClippingPlane

设置相机照摄方向的最近端和最远端切片距离。感觉参数像是平行光投影到体数据上前面一片和最后一片的位置信息。(世界坐标系表示)渲染时好像把平面外的数据剪掉了。

2.SetFocalPoint /SetPosition

(世界坐标系),控制相机距离。

3.ComputeViewPlaneNormal

重置视平面法向,基于当前的位置和焦点。否则会出现斜推剪切效果。

4.SetViewUp

设置摄像机的向上的方向。

5.Zoom

通过改变视角的方法放大对象。

6.SetViewAngle

设置摄像机的视角,默认角度为30度,如果为平行投影则该角度无效。

通常完美视角计算=2*atan((h/2)/d) ,h是renderwindow的高度,d是眼睛到屏幕的距离。

OrthogonalizeViewup()--设置正交角度。

7.修改摄像机位置

设置好焦点后通过Azimuth()修改方位角和Elevation()修改摄像机位置。使摄像机围绕焦点在球形纬度上运动。例子:

Azimuth(150)//表示 camera 的视点位置沿顺时针旋转 150 度角

Elevation(60)// 表示 camera 的视点位置沿向上的方面旋转 60 度角

初始化相机

vtkCamera* cam1 = vtkCamera::New();

cam1->SetClippingRange(0.0475572, 2.337786);                     //参数分别为沿着视向的近、远剪切面的距离

cam1->SetFocalPoint(0.052665, -0.129454, -0.0573973);       //焦点:世界坐标系,控制相机方向

cam1->SetPosition(0.327637, -0.116299, -0.256418);            //位置:世界坐标系,设置相机位置

cam1->ComputeViewPlaneNormal();                                       //重置视平面法向,基于当前的位置和焦点。否则会出现斜推剪切效果

cam1->SetViewUp(-0.0225386, 0.999137, 0.034901);            //设置相机的“上”方向

ren1->SetActiveCamera(cam1);                                          //设置渲染器的相机

设置已有的相机

cam1 = ren1->GetActiveCamera();                                    //获取渲染器的相机

cam1->Zoom(1.4);                                                                  //放大相机,通过改变视角(SetViewAngle()),

另外,也可以使用Dolly()方法沿着视平面法向移动相机,实现放大或缩小可见角色物体。

基于焦点,使用Azimuth()和Elevation()方法设置相机的方位角和高度角/仰角(度,degree)[球坐标系统]。

注意其中在南极和北极存在奇异点,即视向量平行于视平面法向。此时可以使用OrthogonalizeViewUp()方法强制其正交。但这会改变相机坐标系统。

正交投影vs透视投影

vtkCamera::ParallelProjectionOn()开启平行/正交投影。此时需通过SetParallelScale()方法控制角色物体的缩放。Zoom不再有效。

本文来源:http://swyxgc.blog.163.com/blog/static/4567575320112433642190/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值