首页 > 解决方案 > 如何将世界坐标转换为VTK中的视图坐标

问题描述

在我的程序(基于python)中,需要将一个点从世界坐标([x,y,z])转换为视图坐标([j,k,t],j和k在-1和1之间,t是VTK 中的深度)。我找到了vtkCoordinateSetCoordinateSystemToView()方法的类。但它不起作用。

coordinate = vtk.vtkCoordinate()
coordinate.SetCoordinateSystemToWorld()  
coordinate.SetValue(x,y,z)
coordinate.SetCoordinateSystemToDisplay() 
viewCoord=coordinate.GetComputedValue(renderer)

结果很奇怪,而且肯定是错误的。有一些类似GetComputedDisplayValue()GetComputedViewportValue()的方法可以从一个坐标系中得到相应的结果来显示或视口坐标系,但是没有类似GetComputedViewValue(). 很困惑,需要帮助,谢谢。

标签: vtkcoordinate-systems

解决方案


这有效:

import vtk

coordinate = vtk.vtkCoordinate()
coordinate.SetCoordinateSystemToWorld()
coordinate.SetValue(1,2,1)

# test:
from vedo import *
plt = Plotter()
print("press shift-I on the red dot, then press q")
plt.show(Cube(), Point([1,2,1], r=20), axes=1)

viewCoord = coordinate.GetComputedViewportValue(plt.renderer)
print(viewCoord) # matches!

推荐阅读