vtkOBJReaderでインポートした2つのOBJメッシュ間でレイキャストを行います。頂点から2番目のメッシュに向かう法線方向へのレイキャストを行いたいと思います。OBJインポートからVTKの頂点pos、normal、colorにアクセスします。
しかし、最初のメッシュから頂点(およびパラメータ)にアクセスする方法はわかりません。私はセルとポイントのコンセプトとvtkのフィルタを少し混乱させています。私がこれまでに行うために管理する何
はvtkCellCentersオブジェクトを作成し、私のレイキャストを行うには、それから、通常のポイントを取得することでしたが、これは私が欲しいものは本当にないです...ここで
は、私がアクセスできる方法ですセルの中心と私のレイキャストを開始する通常:
import vtk
OBJ_SCALE = 100.
ColorBackground = [0.0, 0.0, 0.0]
FirstobjPath = r"...my Path to the first OBJ file..."
reader = vtk.vtkOBJReader()
reader.SetFileName(FirstobjPath)
# I scale up object for better precision
transform = vtk.vtkTransform()
transform.Scale(OBJ_SCALE, OBJ_SCALE, OBJ_SCALE)
transformPData = vtk.vtkTransformPolyDataFilter()
transformPData.SetTransform(transform)
transformPData.SetInputConnection(reader.GetOutputPort())
# I transform poly to triangle for proper indexing
triangles = vtk.vtkTriangleFilter()
triangles.SetInputConnection(transformPData.GetOutputPort())
# Here is how I get my cell data
cellCenterCalc = vtk.vtkCellCenters()
cellCenterCalc.SetInputConnection(triangles.GetOutputPort())
cellCenterCalc.Update()
# I can get the point center with this
pointsCellCenters = cellCenterCalc.GetOutput(0)
# and the normals with this
normalsCalcScan = vtk.vtkPolyDataNormals()
normalsCalcScan.SetInputConnection(triangles.GetOutputPort())
mapper = vtk.vtkPolyDataMapper()
mapper.SetInputConnection(triangles.GetOutputPort())
actor = vtk.vtkActor()
actor.SetMapper(mapper)
ren = vtk.vtkRenderer()
ren.SetBackground(ColorBackground)
ren.AddActor(actor)
私は同じことを行うことができるようにする必要がありますが頂点posと法線と(私もマスクとして使用する頂点カラーへのアクセス権を持っているのが好きどの頂点がレイキャストを行うべきかをフィルタリングするため) 私はそれを考えていますが、これまでのところ運はありません。 ;)
polyData = triangles.GetOutput()
polyData.GetCellData().GetScalars("Colors")