【发布时间】:2017-04-13 16:27:28
【问题描述】:
我想在使用 vtkOBJReader 导入的两个 OBJ 网格之间进行光线投射。我想做一个从顶点到第二个网格的法线方向的光线投射。
但是我不知道如何从第一个网格访问顶点(和参数)。我对单元格和点的概念以及 vtk 中的过滤器有点困惑。
到目前为止,我设法做的是创建一个 vtkCellCenters 对象并检索法线并从中指向进行光线投射,但这并不是我真正想要的......
这是我如何访问单元中心和正常启动我的 rayCast:
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)
我需要能够做同样的事情,但使用顶点位置和法线(我也喜欢访问顶点颜色以将其用作过滤哪个顶点应该进行光线投射的遮罩) 我正在考虑类似的事情,但到目前为止还没有运气:S 非常感谢任何帮助;)
polyData = triangles.GetOutput()
polyData.GetCellData().GetScalars("Colors")
【问题讨论】: