diff options
Diffstat (limited to 'libraries/irrlicht-1.8/include/ITerrainSceneNode.h')
-rw-r--r-- | libraries/irrlicht-1.8/include/ITerrainSceneNode.h | 182 |
1 files changed, 0 insertions, 182 deletions
diff --git a/libraries/irrlicht-1.8/include/ITerrainSceneNode.h b/libraries/irrlicht-1.8/include/ITerrainSceneNode.h deleted file mode 100644 index 4802710..0000000 --- a/libraries/irrlicht-1.8/include/ITerrainSceneNode.h +++ /dev/null | |||
@@ -1,182 +0,0 @@ | |||
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 | // The code for the TerrainSceneNode is based on the terrain renderer by | ||
6 | // Soconne and the GeoMipMapSceneNode developed by Spintz. They made their | ||
7 | // code available for Irrlicht and allowed it to be distributed under this | ||
8 | // licence. I only modified some parts. A lot of thanks go to them. | ||
9 | |||
10 | #ifndef __I_TERRAIN_SCENE_NODE_H__ | ||
11 | #define __I_TERRAIN_SCENE_NODE_H__ | ||
12 | |||
13 | #include "ETerrainElements.h" | ||
14 | #include "ISceneNode.h" | ||
15 | #include "IDynamicMeshBuffer.h" | ||
16 | #include "irrArray.h" | ||
17 | |||
18 | namespace irr | ||
19 | { | ||
20 | namespace io | ||
21 | { | ||
22 | class IReadFile; | ||
23 | } // end namespace io | ||
24 | namespace scene | ||
25 | { | ||
26 | class IMesh; | ||
27 | |||
28 | //! A scene node for displaying terrain using the geo mip map algorithm. | ||
29 | /** The code for the TerrainSceneNode is based on the Terrain renderer by Soconne and | ||
30 | * the GeoMipMapSceneNode developed by Spintz. They made their code available for Irrlicht | ||
31 | * and allowed it to be distributed under this licence. I only modified some parts. | ||
32 | * A lot of thanks go to them. | ||
33 | * | ||
34 | * This scene node is capable of very quickly loading | ||
35 | * terrains and updating the indices at runtime to enable viewing very large terrains. It uses a | ||
36 | * CLOD (Continuous Level of Detail) algorithm which updates the indices for each patch based on | ||
37 | * a LOD (Level of Detail) which is determined based on a patch's distance from the camera. | ||
38 | * | ||
39 | * The Patch Size of the terrain must always be a size of ( 2^N+1, i.e. 8+1(9), 16+1(17), etc. ). | ||
40 | * The MaxLOD available is directly dependent on the patch size of the terrain. LOD 0 contains all | ||
41 | * of the indices to draw all the triangles at the max detail for a patch. As each LOD goes up by 1 | ||
42 | * the step taken, in generating indices increases by - 2^LOD, so for LOD 1, the step taken is 2, for | ||
43 | * LOD 2, the step taken is 4, LOD 3 - 8, etc. The step can be no larger than the size of the patch, | ||
44 | * so having a LOD of 8, with a patch size of 17, is asking the algoritm to generate indices every | ||
45 | * 2^8 ( 256 ) vertices, which is not possible with a patch size of 17. The maximum LOD for a patch | ||
46 | * size of 17 is 2^4 ( 16 ). So, with a MaxLOD of 5, you'll have LOD 0 ( full detail ), LOD 1 ( every | ||
47 | * 2 vertices ), LOD 2 ( every 4 vertices ), LOD 3 ( every 8 vertices ) and LOD 4 ( every 16 vertices ). | ||
48 | **/ | ||
49 | class ITerrainSceneNode : public ISceneNode | ||
50 | { | ||
51 | public: | ||
52 | //! Constructor | ||
53 | ITerrainSceneNode(ISceneNode* parent, ISceneManager* mgr, s32 id, | ||
54 | const core::vector3df& position = core::vector3df(0.0f, 0.0f, 0.0f), | ||
55 | const core::vector3df& rotation = core::vector3df(0.0f, 0.0f, 0.0f), | ||
56 | const core::vector3df& scale = core::vector3df(1.0f, 1.0f, 1.0f) ) | ||
57 | : ISceneNode (parent, mgr, id, position, rotation, scale) {} | ||
58 | |||
59 | //! Get the bounding box of the terrain. | ||
60 | /** \return The bounding box of the entire terrain. */ | ||
61 | virtual const core::aabbox3d<f32>& getBoundingBox() const =0; | ||
62 | |||
63 | //! Get the bounding box of a patch | ||
64 | /** \return The bounding box of the chosen patch. */ | ||
65 | virtual const core::aabbox3d<f32>& getBoundingBox(s32 patchX, s32 patchZ) const =0; | ||
66 | |||
67 | //! Get the number of indices currently in the meshbuffer | ||
68 | /** \return The index count. */ | ||
69 | virtual u32 getIndexCount() const =0; | ||
70 | |||
71 | //! Get pointer to the mesh | ||
72 | /** \return Pointer to the mesh. */ | ||
73 | virtual IMesh* getMesh() =0; | ||
74 | |||
75 | //! Get pointer to the buffer used by the terrain (most users will not need this) | ||
76 | virtual IMeshBuffer* getRenderBuffer() =0; | ||
77 | |||
78 | |||
79 | //! Gets the meshbuffer data based on a specified level of detail. | ||
80 | /** \param mb A reference to an IDynamicMeshBuffer object | ||
81 | \param LOD The level of detail you want the indices from. */ | ||
82 | virtual void getMeshBufferForLOD(IDynamicMeshBuffer& mb, s32 LOD=0) const =0; | ||
83 | |||
84 | //! Gets the indices for a specified patch at a specified Level of Detail. | ||
85 | /** \param indices A reference to an array of u32 indices. | ||
86 | \param patchX Patch x coordinate. | ||
87 | \param patchZ Patch z coordinate. | ||
88 | \param LOD The level of detail to get for that patch. If -1, | ||
89 | then get the CurrentLOD. If the CurrentLOD is set to -1, | ||
90 | meaning it's not shown, then it will retrieve the triangles at | ||
91 | the highest LOD (0). | ||
92 | \return Number of indices put into the buffer. */ | ||
93 | virtual s32 getIndicesForPatch(core::array<u32>& indices, | ||
94 | s32 patchX, s32 patchZ, s32 LOD=0) =0; | ||
95 | |||
96 | //! Populates an array with the CurrentLOD of each patch. | ||
97 | /** \param LODs A reference to a core::array<s32> to hold the | ||
98 | values | ||
99 | \return Number of elements in the array */ | ||
100 | virtual s32 getCurrentLODOfPatches(core::array<s32>& LODs) const =0; | ||
101 | |||
102 | //! Manually sets the LOD of a patch | ||
103 | /** \param patchX Patch x coordinate. | ||
104 | \param patchZ Patch z coordinate. | ||
105 | \param LOD The level of detail to set the patch to. */ | ||
106 | virtual void setLODOfPatch(s32 patchX, s32 patchZ, s32 LOD=0) =0; | ||
107 | |||
108 | //! Get center of terrain. | ||
109 | virtual const core::vector3df& getTerrainCenter() const =0; | ||
110 | |||
111 | //! Get height of a point of the terrain. | ||
112 | virtual f32 getHeight(f32 x, f32 y) const =0; | ||
113 | |||
114 | //! Sets the movement camera threshold. | ||
115 | /** It is used to determine when to recalculate | ||
116 | indices for the scene node. The default value is 10.0f. */ | ||
117 | virtual void setCameraMovementDelta(f32 delta) =0; | ||
118 | |||
119 | //! Sets the rotation camera threshold. | ||
120 | /** It is used to determine when to recalculate | ||
121 | indices for the scene node. The default value is 1.0f. */ | ||
122 | virtual void setCameraRotationDelta(f32 delta) =0; | ||
123 | |||
124 | //! Sets whether or not the node should dynamically update its associated selector when the geomipmap data changes. | ||
125 | /** \param bVal: Boolean value representing whether or not to update selector dynamically. */ | ||
126 | virtual void setDynamicSelectorUpdate(bool bVal) =0; | ||
127 | |||
128 | //! Override the default generation of distance thresholds. | ||
129 | /** For determining the LOD a patch is rendered at. If any LOD | ||
130 | is overridden, then the scene node will no longer apply scaling | ||
131 | factors to these values. If you override these distances, and | ||
132 | then apply a scale to the scene node, it is your responsibility | ||
133 | to update the new distances to work best with your new terrain | ||
134 | size. */ | ||
135 | virtual bool overrideLODDistance(s32 LOD, f64 newDistance) =0; | ||
136 | |||
137 | //! Scales the base texture, similar to makePlanarTextureMapping. | ||
138 | /** \param scale The scaling amount. Values above 1.0 | ||
139 | increase the number of time the texture is drawn on the | ||
140 | terrain. Values below 0 will decrease the number of times the | ||
141 | texture is drawn on the terrain. Using negative values will | ||
142 | flip the texture, as well as still scaling it. | ||
143 | \param scale2 If set to 0 (default value), this will set the | ||
144 | second texture coordinate set to the same values as in the | ||
145 | first set. If this is another value than zero, it will scale | ||
146 | the second texture coordinate set by this value. */ | ||
147 | virtual void scaleTexture(f32 scale = 1.0f, f32 scale2=0.0f) =0; | ||
148 | |||
149 | //! Initializes the terrain data. Loads the vertices from the heightMapFile. | ||
150 | /** The file must contain a loadable image of the heightmap. The heightmap | ||
151 | must be square. | ||
152 | \param file The file to read the image from. File is not rewinded. | ||
153 | \param vertexColor Color of all vertices. | ||
154 | \param smoothFactor Number of smoothing passes. */ | ||
155 | virtual bool loadHeightMap(io::IReadFile* file, | ||
156 | video::SColor vertexColor=video::SColor(255,255,255,255), | ||
157 | s32 smoothFactor=0) =0; | ||
158 | |||
159 | //! Initializes the terrain data. Loads the vertices from the heightMapFile. | ||
160 | /** The data is interpreted as (signed) integers of the given bit size or | ||
161 | floats (with 32bits, signed). Allowed bitsizes for integers are | ||
162 | 8, 16, and 32. The heightmap must be square. | ||
163 | \param file The file to read the RAW data from. File is not rewinded. | ||
164 | \param bitsPerPixel Size of data if integers used, for floats always use 32. | ||
165 | \param signedData Whether we use signed or unsigned ints, ignored for floats. | ||
166 | \param floatVals Whether the data is float or int. | ||
167 | \param width Width (and also Height, as it must be square) of the heightmap. Use 0 for autocalculating from the filesize. | ||
168 | \param vertexColor Color of all vertices. | ||
169 | \param smoothFactor Number of smoothing passes. */ | ||
170 | virtual bool loadHeightMapRAW(io::IReadFile* file, s32 bitsPerPixel=16, | ||
171 | bool signedData=false, bool floatVals=false, s32 width=0, | ||
172 | video::SColor vertexColor=video::SColor(255,255,255,255), | ||
173 | s32 smoothFactor=0) =0; | ||
174 | |||
175 | }; | ||
176 | |||
177 | } // end namespace scene | ||
178 | } // end namespace irr | ||
179 | |||
180 | |||
181 | #endif // __I_TERRAIN_SCENE_NODE_H__ | ||
182 | |||