vtkOBJReader로 가져온 두 OBJ 메쉬간에 레이 캐스트를 수행하고 싶습니다. 정점에서 두 번째 메쉬를 향한 법선 방향으로 광선 캐스팅을하고 싶습니다.OBJ에서 가져온 VTK의 버텍스 위치, 일반 및 색상을 입력합니다.
그러나 첫 번째 메쉬에서 정점 (및 매개 변수)에 액세스하는 방법을 모르겠습니다. 나는 VCT의 셀과 포인트의 개념과 필터에 대해 다소 혼란 스럽다.
다음내가 액세스 할 수있는 방법은 ... 내가 지금까지 어떻게 관리 무엇
는 vtkCellCenters 객체를 만들고 내 레이 캐스트를 수행하는 데에서 정상 및 지점을 검색 할 수 있었다 그러나 이것은 내가 원하는 걸 정말 아니다 셀 센터와 일반 내 레이 캐스트 시작 : 나는 같은 일을하지만, 버텍스 POS 및 법선을 할 수 있어야합니다
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)
을 (나는 또한 마스크로 사용 정점 색상에 액세스 할 수 있도록 좋아 어느 버텍스가 레이크 캐스트를해야하는지 필터링하기) 나는 그런 것 같지만 지금까지는 운이 없다고 생각하고 있습니다. 어떤 도움이 많이 주어집니다. ;)
polyData = triangles.GetOutput()
polyData.GetCellData().GetScalars("Colors")