版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/theArcticOcean/article/details/83217811
vtkCoordinate and Coordinate Systems
以下英文介绍内容出自《VTKUsersGuide.pdf》
The Visualization Toolkit supports several different coordinate systems, and the class vtkCoordinate manages transformations between them. The supported coordinate systems are as follows.
要点:
DISPLAY:二维像素坐标系,原点在renderWindow左下角
NORMALIZED DISPLAY:和DISPLAY类似,但X,Y的取值范围是[0, 1]
VIEWPORT:二维像素坐标系,原点在renderWindow左下角,但是受到render的viewport影响。
NORMALIZED VIEWPORT:和VIEWPORT类似,X、Y的取值范围为[0,1]。
VIEW:X、Y、Z坐标值取值范围为[-1,1],Z表示深度,即物体离相机的距离。
WORLD:世界坐标系统的x,y,z。
坐标转换
在vtkViewport中,几乎提供了所有的坐标系相互转换的方法,比如
void DisplayToWorld()
void WorldToDisplay()
void WorldToView()
void ViewToDisplay()
...
world坐标转Display坐标
例子
vtkRenderer *render = m_MainWindow->GetVtkRenderer();
render->SetWorldPoint( origin.point );
render->WorldToDisplay();
render->GetDisplayPoint( displayOriginPos );
一个实验:
renderer->SetWorldPoint( 10, 10, 10, 0 );
renderer->WorldToDisplay();
double *disPos = renderer->GetDisplayPoint();
printf( "disPos: (%lf, %lf, %lf)\n", disPos[0], disPos[1], disPos[2] ); //disPos: (-673.684208, -673.684208, 2.867116)
这个结果有点以外,因为之前提到过Display是二维坐标系,但是这里的Z值不是0.
如果对view,viewport,display坐标系理解还有疑惑,可以阅读这个例子:
【VTK】使用vtkActor2D添加polyline