28 #ifndef _DHEIGHTFIELD_H_
29 #define _DHEIGHTFIELD_H_
32 #include <ode/common.h>
33 #include "collision_kernel.h"
36 #define HEIGHTFIELDMAXCONTACTPERCELL 10
54 dReal m_fSampleZXAspect;
55 dReal m_fInvSampleWidth;
56 dReal m_fInvSampleDepth;
69 int m_bCopyHeightData;
73 const void* m_pHeightData;
83 void SetData(
int nWidthSamples,
int nDepthSamples,
84 dReal fWidth, dReal fDepth,
85 dReal fScale, dReal fOffset,
86 dReal fThickness,
int bWrapMode );
88 void ComputeHeightBounds();
91 const dReal *
const pos,
const bool isABC)
const;
93 dReal GetHeight(
int x,
int z);
94 dReal GetHeight(dReal x, dReal z);
98 typedef int HeightFieldVertexCoords[2];
106 HeightFieldVertexCoords coords;
123 inline void setMinMax()
125 maxAAAB = vertices[0]->vertex[1] > vertices[1]->vertex[1] ? vertices[0]->vertex[1] : vertices[1]->vertex[1];
126 maxAAAB = vertices[2]->vertex[1] > maxAAAB ? vertices[2]->vertex[1] : maxAAAB;
142 trianglelistReservedSize(0),
143 trianglelistCurrentSize(0)
149 delete [] trianglelist;
152 inline void setMinMax()
154 const size_t asize = trianglelistCurrentSize;
157 maxAAAB = trianglelist[0]->maxAAAB;
158 for (
size_t k = 1; asize > k; k++)
160 if (trianglelist[k]->maxAAAB > maxAAAB)
161 maxAAAB = trianglelist[k]->maxAAAB;
166 void resetTriangleListSize(
const size_t newSize)
168 if (trianglelistReservedSize < newSize)
170 delete [] trianglelist;
171 trianglelistReservedSize = newSize;
174 trianglelistCurrentSize = 0;
179 dIASSERT(trianglelistCurrentSize < trianglelistReservedSize);
181 trianglelist[trianglelistCurrentSize++] = tri;
185 size_t trianglelistReservedSize;
186 size_t trianglelistCurrentSize;
206 int dCollideHeightfieldZone(
const int minX,
const int maxX,
const int minZ,
const int maxZ,
207 dxGeom *o2,
const int numMaxContacts,
212 TEMP_PLANE_BUFFER_ELEMENT_COUNT_ALIGNMENT = 4,
213 TEMP_HEIGHT_BUFFER_ELEMENT_COUNT_ALIGNMENT_X = 4,
214 TEMP_HEIGHT_BUFFER_ELEMENT_COUNT_ALIGNMENT_Z = 4,
215 TEMP_TRIANGLE_BUFFER_ELEMENT_COUNT_ALIGNMENT = 1
218 static inline size_t AlignBufferSize(
size_t value,
size_t alignment) { dIASSERT((alignment & (alignment - 1)) == 0);
return (value + (alignment - 1)) & ~(alignment - 1); }
220 void allocateTriangleBuffer(
size_t numTri);
221 void resetTriangleBuffer();
222 void allocatePlaneBuffer(
size_t numTri);
223 void resetPlaneBuffer();
224 void allocateHeightBuffer(
size_t numX,
size_t numZ);
225 void resetHeightBuffer();
227 void sortPlanes(
const size_t numPlanes);
231 size_t tempPlaneBufferSize;
234 size_t tempTriangleBufferSize;
238 size_t tempHeightBufferSizeX;
239 size_t tempHeightBufferSizeZ;
245 #endif //_DHEIGHTFIELD_H_
Definition: heightfield.h:48
Definition: heightfield.h:100
dReal dHeightfieldGetHeight(void *p_user_data, int x, int z)
Callback prototype.
Definition: collision.h:1118
Definition: heightfield.h:137
Definition: heightfield.h:197
Definition: heightfield.h:110
Definition: collision_kernel.h:96
Definition: collision_kernel.h:202
Definition: heightfield.h:118