aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/irrlicht-1.8/source/Irrlicht/CTerrainTriangleSelector.cpp
diff options
context:
space:
mode:
authorDavid Walter Seikel2013-01-13 18:54:10 +1000
committerDavid Walter Seikel2013-01-13 18:54:10 +1000
commit959831f4ef5a3e797f576c3de08cd65032c997ad (patch)
treee7351908be5995f0b325b2ebeaa02d5a34b82583 /libraries/irrlicht-1.8/source/Irrlicht/CTerrainTriangleSelector.cpp
parentAdd info about changes to Irrlicht. (diff)
downloadSledjHamr-959831f4ef5a3e797f576c3de08cd65032c997ad.zip
SledjHamr-959831f4ef5a3e797f576c3de08cd65032c997ad.tar.gz
SledjHamr-959831f4ef5a3e797f576c3de08cd65032c997ad.tar.bz2
SledjHamr-959831f4ef5a3e797f576c3de08cd65032c997ad.tar.xz
Remove damned ancient DOS line endings from Irrlicht. Hopefully I did not go overboard.
Diffstat (limited to 'libraries/irrlicht-1.8/source/Irrlicht/CTerrainTriangleSelector.cpp')
-rw-r--r--libraries/irrlicht-1.8/source/Irrlicht/CTerrainTriangleSelector.cpp468
1 files changed, 234 insertions, 234 deletions
diff --git a/libraries/irrlicht-1.8/source/Irrlicht/CTerrainTriangleSelector.cpp b/libraries/irrlicht-1.8/source/Irrlicht/CTerrainTriangleSelector.cpp
index 91820ce..7f90f60 100644
--- a/libraries/irrlicht-1.8/source/Irrlicht/CTerrainTriangleSelector.cpp
+++ b/libraries/irrlicht-1.8/source/Irrlicht/CTerrainTriangleSelector.cpp
@@ -1,234 +1,234 @@
1// Copyright (C) 2002-2012 Nikolaus Gebhardt 1// Copyright (C) 2002-2012 Nikolaus Gebhardt
2// This file is part of the "Irrlicht Engine". 2// This file is part of the "Irrlicht Engine".
3// For conditions of distribution and use, see copyright notice in irrlicht.h 3// For conditions of distribution and use, see copyright notice in irrlicht.h
4 4
5#include "CTerrainTriangleSelector.h" 5#include "CTerrainTriangleSelector.h"
6#include "CTerrainSceneNode.h" 6#include "CTerrainSceneNode.h"
7#include "os.h" 7#include "os.h"
8 8
9namespace irr 9namespace irr
10{ 10{
11namespace scene 11namespace scene
12{ 12{
13 13
14 14
15//! constructor 15//! constructor
16CTerrainTriangleSelector::CTerrainTriangleSelector ( ITerrainSceneNode* node, s32 LOD ) 16CTerrainTriangleSelector::CTerrainTriangleSelector ( ITerrainSceneNode* node, s32 LOD )
17 : SceneNode(node) 17 : SceneNode(node)
18{ 18{
19 #ifdef _DEBUG 19 #ifdef _DEBUG
20 setDebugName ("CTerrainTriangleSelector"); 20 setDebugName ("CTerrainTriangleSelector");
21 #endif 21 #endif
22 22
23 setTriangleData(node, LOD); 23 setTriangleData(node, LOD);
24} 24}
25 25
26 26
27//! destructor 27//! destructor
28CTerrainTriangleSelector::~CTerrainTriangleSelector() 28CTerrainTriangleSelector::~CTerrainTriangleSelector()
29{ 29{
30 TrianglePatches.TrianglePatchArray.clear(); 30 TrianglePatches.TrianglePatchArray.clear();
31} 31}
32 32
33 33
34//! Clears and sets triangle data 34//! Clears and sets triangle data
35void CTerrainTriangleSelector::setTriangleData(ITerrainSceneNode* node, s32 LOD) 35void CTerrainTriangleSelector::setTriangleData(ITerrainSceneNode* node, s32 LOD)
36{ 36{
37 // Get pointer to the GeoMipMaps vertices 37 // Get pointer to the GeoMipMaps vertices
38 const video::S3DVertex2TCoords* vertices = static_cast<const video::S3DVertex2TCoords*>(node->getRenderBuffer()->getVertices()); 38 const video::S3DVertex2TCoords* vertices = static_cast<const video::S3DVertex2TCoords*>(node->getRenderBuffer()->getVertices());
39 39
40 // Clear current data 40 // Clear current data
41 const s32 count = (static_cast<CTerrainSceneNode*>(node))->TerrainData.PatchCount; 41 const s32 count = (static_cast<CTerrainSceneNode*>(node))->TerrainData.PatchCount;
42 TrianglePatches.TotalTriangles = 0; 42 TrianglePatches.TotalTriangles = 0;
43 TrianglePatches.NumPatches = count*count; 43 TrianglePatches.NumPatches = count*count;
44 44
45 TrianglePatches.TrianglePatchArray.reallocate(TrianglePatches.NumPatches); 45 TrianglePatches.TrianglePatchArray.reallocate(TrianglePatches.NumPatches);
46 for (s32 o=0; o<TrianglePatches.NumPatches; ++o) 46 for (s32 o=0; o<TrianglePatches.NumPatches; ++o)
47 TrianglePatches.TrianglePatchArray.push_back(SGeoMipMapTrianglePatch()); 47 TrianglePatches.TrianglePatchArray.push_back(SGeoMipMapTrianglePatch());
48 48
49 core::triangle3df tri; 49 core::triangle3df tri;
50 core::array<u32> indices; 50 core::array<u32> indices;
51 s32 tIndex = 0; 51 s32 tIndex = 0;
52 for(s32 x = 0; x < count; ++x ) 52 for(s32 x = 0; x < count; ++x )
53 { 53 {
54 for(s32 z = 0; z < count; ++z ) 54 for(s32 z = 0; z < count; ++z )
55 { 55 {
56 TrianglePatches.TrianglePatchArray[tIndex].NumTriangles = 0; 56 TrianglePatches.TrianglePatchArray[tIndex].NumTriangles = 0;
57 TrianglePatches.TrianglePatchArray[tIndex].Box = node->getBoundingBox( x, z ); 57 TrianglePatches.TrianglePatchArray[tIndex].Box = node->getBoundingBox( x, z );
58 u32 indexCount = node->getIndicesForPatch( indices, x, z, LOD ); 58 u32 indexCount = node->getIndicesForPatch( indices, x, z, LOD );
59 59
60 TrianglePatches.TrianglePatchArray[tIndex].Triangles.reallocate(indexCount/3); 60 TrianglePatches.TrianglePatchArray[tIndex].Triangles.reallocate(indexCount/3);
61 for(u32 i = 0; i < indexCount; i += 3 ) 61 for(u32 i = 0; i < indexCount; i += 3 )
62 { 62 {
63 tri.pointA = vertices[indices[i+0]].Pos; 63 tri.pointA = vertices[indices[i+0]].Pos;
64 tri.pointB = vertices[indices[i+1]].Pos; 64 tri.pointB = vertices[indices[i+1]].Pos;
65 tri.pointC = vertices[indices[i+2]].Pos; 65 tri.pointC = vertices[indices[i+2]].Pos;
66 TrianglePatches.TrianglePatchArray[tIndex].Triangles.push_back(tri); 66 TrianglePatches.TrianglePatchArray[tIndex].Triangles.push_back(tri);
67 ++TrianglePatches.TrianglePatchArray[tIndex].NumTriangles; 67 ++TrianglePatches.TrianglePatchArray[tIndex].NumTriangles;
68 } 68 }
69 69
70 TrianglePatches.TotalTriangles += TrianglePatches.TrianglePatchArray[tIndex].NumTriangles; 70 TrianglePatches.TotalTriangles += TrianglePatches.TrianglePatchArray[tIndex].NumTriangles;
71 ++tIndex; 71 ++tIndex;
72 } 72 }
73 } 73 }
74} 74}
75 75
76 76
77//! Gets all triangles. 77//! Gets all triangles.
78void CTerrainTriangleSelector::getTriangles(core::triangle3df* triangles, 78void CTerrainTriangleSelector::getTriangles(core::triangle3df* triangles,
79 s32 arraySize, s32& outTriangleCount, 79 s32 arraySize, s32& outTriangleCount,
80 const core::matrix4* transform) const 80 const core::matrix4* transform) const
81{ 81{
82 s32 count = TrianglePatches.TotalTriangles; 82 s32 count = TrianglePatches.TotalTriangles;
83 83
84 if (count > arraySize) 84 if (count > arraySize)
85 count = arraySize; 85 count = arraySize;
86 86
87 core::matrix4 mat; 87 core::matrix4 mat;
88 88
89 if (transform) 89 if (transform)
90 mat = (*transform); 90 mat = (*transform);
91 91
92 s32 tIndex = 0; 92 s32 tIndex = 0;
93 93
94 for (s32 i=0; i<TrianglePatches.NumPatches; ++i) 94 for (s32 i=0; i<TrianglePatches.NumPatches; ++i)
95 { 95 {
96 if (tIndex + TrianglePatches.TrianglePatchArray[i].NumTriangles <= count) 96 if (tIndex + TrianglePatches.TrianglePatchArray[i].NumTriangles <= count)
97 for (s32 j=0; j<TrianglePatches.TrianglePatchArray[i].NumTriangles; ++j) 97 for (s32 j=0; j<TrianglePatches.TrianglePatchArray[i].NumTriangles; ++j)
98 { 98 {
99 triangles[tIndex] = TrianglePatches.TrianglePatchArray[i].Triangles[j]; 99 triangles[tIndex] = TrianglePatches.TrianglePatchArray[i].Triangles[j];
100 100
101 mat.transformVect(triangles[tIndex].pointA); 101 mat.transformVect(triangles[tIndex].pointA);
102 mat.transformVect(triangles[tIndex].pointB); 102 mat.transformVect(triangles[tIndex].pointB);
103 mat.transformVect(triangles[tIndex].pointC); 103 mat.transformVect(triangles[tIndex].pointC);
104 104
105 ++tIndex; 105 ++tIndex;
106 } 106 }
107 } 107 }
108 108
109 outTriangleCount = tIndex; 109 outTriangleCount = tIndex;
110} 110}
111 111
112 112
113//! Gets all triangles which lie within a specific bounding box. 113//! Gets all triangles which lie within a specific bounding box.
114void CTerrainTriangleSelector::getTriangles(core::triangle3df* triangles, 114void CTerrainTriangleSelector::getTriangles(core::triangle3df* triangles,
115 s32 arraySize, s32& outTriangleCount, 115 s32 arraySize, s32& outTriangleCount,
116 const core::aabbox3d<f32>& box, const core::matrix4* transform) const 116 const core::aabbox3d<f32>& box, const core::matrix4* transform) const
117{ 117{
118 s32 count = TrianglePatches.TotalTriangles; 118 s32 count = TrianglePatches.TotalTriangles;
119 119
120 if (count > arraySize) 120 if (count > arraySize)
121 count = arraySize; 121 count = arraySize;
122 122
123 core::matrix4 mat; 123 core::matrix4 mat;
124 124
125 if (transform) 125 if (transform)
126 mat = (*transform); 126 mat = (*transform);
127 127
128 s32 tIndex = 0; 128 s32 tIndex = 0;
129 129
130 for (s32 i=0; i<TrianglePatches.NumPatches; ++i) 130 for (s32 i=0; i<TrianglePatches.NumPatches; ++i)
131 { 131 {
132 if (tIndex + TrianglePatches.TrianglePatchArray[i].NumTriangles <= count && 132 if (tIndex + TrianglePatches.TrianglePatchArray[i].NumTriangles <= count &&
133 TrianglePatches.TrianglePatchArray[i].Box.intersectsWithBox(box)) 133 TrianglePatches.TrianglePatchArray[i].Box.intersectsWithBox(box))
134 for (s32 j=0; j<TrianglePatches.TrianglePatchArray[i].NumTriangles; ++j) 134 for (s32 j=0; j<TrianglePatches.TrianglePatchArray[i].NumTriangles; ++j)
135 { 135 {
136 triangles[tIndex] = TrianglePatches.TrianglePatchArray[i].Triangles[j]; 136 triangles[tIndex] = TrianglePatches.TrianglePatchArray[i].Triangles[j];
137 137
138 mat.transformVect(triangles[tIndex].pointA); 138 mat.transformVect(triangles[tIndex].pointA);
139 mat.transformVect(triangles[tIndex].pointB); 139 mat.transformVect(triangles[tIndex].pointB);
140 mat.transformVect(triangles[tIndex].pointC); 140 mat.transformVect(triangles[tIndex].pointC);
141 141
142 ++tIndex; 142 ++tIndex;
143 } 143 }
144 } 144 }
145 145
146 outTriangleCount = tIndex; 146 outTriangleCount = tIndex;
147} 147}
148 148
149 149
150//! Gets all triangles which have or may have contact with a 3d line. 150//! Gets all triangles which have or may have contact with a 3d line.
151void CTerrainTriangleSelector::getTriangles(core::triangle3df* triangles, 151void CTerrainTriangleSelector::getTriangles(core::triangle3df* triangles,
152 s32 arraySize, s32& outTriangleCount, const core::line3d<f32>& line, 152 s32 arraySize, s32& outTriangleCount, const core::line3d<f32>& line,
153 const core::matrix4* transform) const 153 const core::matrix4* transform) const
154{ 154{
155 const s32 count = core::min_((s32)TrianglePatches.TotalTriangles, arraySize); 155 const s32 count = core::min_((s32)TrianglePatches.TotalTriangles, arraySize);
156 156
157 core::matrix4 mat; 157 core::matrix4 mat;
158 158
159 if (transform) 159 if (transform)
160 mat = (*transform); 160 mat = (*transform);
161 161
162 s32 tIndex = 0; 162 s32 tIndex = 0;
163 163
164 for (s32 i=0; i<TrianglePatches.NumPatches; ++i) 164 for (s32 i=0; i<TrianglePatches.NumPatches; ++i)
165 { 165 {
166 if (tIndex + TrianglePatches.TrianglePatchArray[i].NumTriangles <= count 166 if (tIndex + TrianglePatches.TrianglePatchArray[i].NumTriangles <= count
167 && TrianglePatches.TrianglePatchArray[i].Box.intersectsWithLine(line)) 167 && TrianglePatches.TrianglePatchArray[i].Box.intersectsWithLine(line))
168 { 168 {
169 for (s32 j=0; j<TrianglePatches.TrianglePatchArray[i].NumTriangles; ++j) 169 for (s32 j=0; j<TrianglePatches.TrianglePatchArray[i].NumTriangles; ++j)
170 { 170 {
171 triangles[tIndex] = TrianglePatches.TrianglePatchArray[i].Triangles[j]; 171 triangles[tIndex] = TrianglePatches.TrianglePatchArray[i].Triangles[j];
172 172
173 mat.transformVect(triangles[tIndex].pointA); 173 mat.transformVect(triangles[tIndex].pointA);
174 mat.transformVect(triangles[tIndex].pointB); 174 mat.transformVect(triangles[tIndex].pointB);
175 mat.transformVect(triangles[tIndex].pointC); 175 mat.transformVect(triangles[tIndex].pointC);
176 176
177 ++tIndex; 177 ++tIndex;
178 } 178 }
179 } 179 }
180 } 180 }
181 181
182 outTriangleCount = tIndex; 182 outTriangleCount = tIndex;
183} 183}
184 184
185 185
186//! Returns amount of all available triangles in this selector 186//! Returns amount of all available triangles in this selector
187s32 CTerrainTriangleSelector::getTriangleCount() const 187s32 CTerrainTriangleSelector::getTriangleCount() const
188{ 188{
189 return TrianglePatches.TotalTriangles; 189 return TrianglePatches.TotalTriangles;
190} 190}
191 191
192 192
193ISceneNode* CTerrainTriangleSelector::getSceneNodeForTriangle( 193ISceneNode* CTerrainTriangleSelector::getSceneNodeForTriangle(
194 u32 triangleIndex) const 194 u32 triangleIndex) const
195{ 195{
196 return SceneNode; 196 return SceneNode;
197} 197}
198 198
199 199
200/* Get the number of TriangleSelectors that are part of this one. 200/* Get the number of TriangleSelectors that are part of this one.
201Only useful for MetaTriangleSelector others return 1 201Only useful for MetaTriangleSelector others return 1
202*/ 202*/
203u32 CTerrainTriangleSelector::getSelectorCount() const 203u32 CTerrainTriangleSelector::getSelectorCount() const
204{ 204{
205 return 1; 205 return 1;
206} 206}
207 207
208 208
209/* Get the TriangleSelector based on index based on getSelectorCount. 209/* Get the TriangleSelector based on index based on getSelectorCount.
210Only useful for MetaTriangleSelector others return 'this' or 0 210Only useful for MetaTriangleSelector others return 'this' or 0
211*/ 211*/
212ITriangleSelector* CTerrainTriangleSelector::getSelector(u32 index) 212ITriangleSelector* CTerrainTriangleSelector::getSelector(u32 index)
213{ 213{
214 if (index) 214 if (index)
215 return 0; 215 return 0;
216 else 216 else
217 return this; 217 return this;
218} 218}
219 219
220 220
221/* Get the TriangleSelector based on index based on getSelectorCount. 221/* Get the TriangleSelector based on index based on getSelectorCount.
222Only useful for MetaTriangleSelector others return 'this' or 0 222Only useful for MetaTriangleSelector others return 'this' or 0
223*/ 223*/
224const ITriangleSelector* CTerrainTriangleSelector::getSelector(u32 index) const 224const ITriangleSelector* CTerrainTriangleSelector::getSelector(u32 index) const
225{ 225{
226 if (index) 226 if (index)
227 return 0; 227 return 0;
228 else 228 else
229 return this; 229 return this;
230} 230}
231 231
232 232
233} // end namespace scene 233} // end namespace scene
234} // end namespace irr 234} // end namespace irr