1 // Copyright (C) 2002-2012 Nikolaus Gebhardt
2 // This file is part of the "Irrlicht Engine".
3 // For conditions of distribution and use, see copyright notice in irrlicht.h
4
5 #include "CTriangleBBSelector.h"
6 #include "ISceneNode.h"
7
8 namespace irr
9 {
10 namespace scene
11 {
12
13 //! constructor
CTriangleBBSelector(ISceneNode * node)14 CTriangleBBSelector::CTriangleBBSelector(ISceneNode* node)
15 : CTriangleSelector(node)
16 {
17 #ifdef _DEBUG
18 setDebugName("CTriangleBBSelector");
19 #endif
20
21 Triangles.set_used(12); // a box has 12 triangles.
22 }
23
24
25
26 //! Gets all triangles.
getTriangles(core::triangle3df * triangles,s32 arraySize,s32 & outTriangleCount,const core::matrix4 * transform) const27 void CTriangleBBSelector::getTriangles(core::triangle3df* triangles,
28 s32 arraySize, s32& outTriangleCount,
29 const core::matrix4* transform) const
30 {
31 if (!SceneNode)
32 return;
33
34 // construct triangles
35 const core::aabbox3d<f32>& box = SceneNode->getBoundingBox();
36 core::vector3df edges[8];
37 box.getEdges(edges);
38
39 Triangles[0].set( edges[3], edges[0], edges[2]);
40 Triangles[1].set( edges[3], edges[1], edges[0]);
41
42 Triangles[2].set( edges[3], edges[2], edges[7]);
43 Triangles[3].set( edges[7], edges[2], edges[6]);
44
45 Triangles[4].set( edges[7], edges[6], edges[4]);
46 Triangles[5].set( edges[5], edges[7], edges[4]);
47
48 Triangles[6].set( edges[5], edges[4], edges[0]);
49 Triangles[7].set( edges[5], edges[0], edges[1]);
50
51 Triangles[8].set( edges[1], edges[3], edges[7]);
52 Triangles[9].set( edges[1], edges[7], edges[5]);
53
54 Triangles[10].set(edges[0], edges[6], edges[2]);
55 Triangles[11].set(edges[0], edges[4], edges[6]);
56
57 // call parent
58 CTriangleSelector::getTriangles(triangles, arraySize, outTriangleCount, transform);
59 }
60
getTriangles(core::triangle3df * triangles,s32 arraySize,s32 & outTriangleCount,const core::aabbox3d<f32> & box,const core::matrix4 * transform) const61 void CTriangleBBSelector::getTriangles(core::triangle3df* triangles,
62 s32 arraySize, s32& outTriangleCount,
63 const core::aabbox3d<f32>& box,
64 const core::matrix4* transform) const
65 {
66 return getTriangles(triangles, arraySize, outTriangleCount, transform);
67 }
68
getTriangles(core::triangle3df * triangles,s32 arraySize,s32 & outTriangleCount,const core::line3d<f32> & line,const core::matrix4 * transform) const69 void CTriangleBBSelector::getTriangles(core::triangle3df* triangles,
70 s32 arraySize, s32& outTriangleCount,
71 const core::line3d<f32>& line,
72 const core::matrix4* transform) const
73 {
74 return getTriangles(triangles, arraySize, outTriangleCount, transform);
75 }
76
77
78 } // end namespace scene
79 } // end namespace irr
80
81