collision_detection_using_VTK
Dawn Hill 结丹

参考链接

Description

这个示例使用vtkOBBTree返回一条线和数据集的所有交叉点。如果你想要最近的交点,需要手动找到它。在本例中,我们创建了一个球体,并与之相交一条直线。

代码

OBBTreeIntersectWithLine.cxx

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <vtkSmartPointer.h>
#include <vtkSphereSource.h>
#include <vtkPoints.h>
#include <vtkPolyData.h>
#include <vtkPointData.h>
#include <vtkLine.h>
#include <vtkOBBTree.h>

int main(int, char *[])
{
vtkSmartPointer<vtkSphereSource> sphereSource =
vtkSmartPointer<vtkSphereSource>::New();
sphereSource->Update();

// Create the locator
vtkSmartPointer<vtkOBBTree> tree =
vtkSmartPointer<vtkOBBTree>::New();
tree->SetDataSet(sphereSource->GetOutput());
tree->BuildLocator();

// Intersect the locator with the line
double lineP0[3] = {0.0, 0.0, 0.0};
double lineP1[3] = {0.0, 0.0, 2.0};
vtkSmartPointer<vtkPoints> intersectPoints =
vtkSmartPointer<vtkPoints>::New();

tree->IntersectWithLine(lineP0, lineP1, intersectPoints, NULL);

std::cout << "NumPoints: " << intersectPoints->GetNumberOfPoints()
<< std::endl;

// Display list of intersections
double intersection[3];
for(int i = 0; i < intersectPoints->GetNumberOfPoints(); i++ )
{
intersectPoints->GetPoint(i, intersection);
std::cout << "Intersection " << i << ": "
<< intersection[0] << ", "
<< intersection[1] << ", "
<< intersection[2] << std::endl;
}

return EXIT_SUCCESS;
}

CMakeLists.txt

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
cmake_minimum_required(VERSION 3.3 FATAL_ERROR)

project(OBBTreeIntersectWithLine)

find_package(VTK COMPONENTS
vtkCommonCore
vtkCommonDataModel
vtkFiltersGeneral
vtkFiltersSources QUIET)
if (NOT VTK_FOUND)
message("Skipping OBBTreeIntersectWithLine: ${VTK_NOT_FOUND_MESSAGE}")
return ()
endif()
message (STATUS "VTK_VERSION: ${VTK_VERSION}")
if (VTK_VERSION VERSION_LESS "8.90.0")
# old system
include(${VTK_USE_FILE})
add_executable(OBBTreeIntersectWithLine MACOSX_BUNDLE OBBTreeIntersectWithLine.cxx )
target_link_libraries(OBBTreeIntersectWithLine PRIVATE ${VTK_LIBRARIES})
else ()
# include all components
add_executable(OBBTreeIntersectWithLine MACOSX_BUNDLE OBBTreeIntersectWithLine.cxx )
target_link_libraries(OBBTreeIntersectWithLine PRIVATE ${VTK_LIBRARIES})
# vtk_module_autoinit is needed
vtk_module_autoinit(
TARGETS OBBTreeIntersectWithLine
MODULES ${VTK_LIBRARIES}
)
endif ()
 打赏作者
 评论
评论插件加载失败
正在加载评论插件
由 Hexo 驱动 & 主题 Keep
访客数 访问量