15 #include "physxHeightFieldDesc.h" 22 void PhysxHeightFieldDesc::
23 set_convex_edge_threshold(
float threshold) {
25 _desc.convexEdgeThreshold = threshold;
33 void PhysxHeightFieldDesc::
34 set_thickness(
float thickness) {
36 _desc.thickness = thickness;
44 void PhysxHeightFieldDesc::
45 set_image(
const PNMImage &image,
unsigned short materialIndex) {
53 set_size(nbRows, nbColumns);
55 NxU8 *currentByte = (NxU8 *)(_desc.samples);
57 for (NxU32 row=0; row < nbRows; row++) {
58 for (NxU32 column=0; column < nbColumns; column++) {
60 NxHeightFieldSample* currentSample = (NxHeightFieldSample *)currentByte;
63 NxI16 ivalue = (NxI16)((fvalue - 0.5f) * _32K);
65 currentSample->height = (NxI16)ivalue;
66 currentSample->tessFlag = (NxU8)0;
67 currentSample->materialIndex0 = (NxU8)materialIndex;
68 currentSample->materialIndex1 = (NxU8)materialIndex;
70 currentByte += _desc.sampleStride;
80 void PhysxHeightFieldDesc::
81 set_material_index(
unsigned int row,
unsigned int column,
unsigned short materialIndex0,
unsigned short materialIndex1) {
83 nassertv(_desc.samples);
84 nassertv(row < _desc.nbRows);
85 nassertv(column < _desc.nbColumns);
87 NxU32 idx = row * _desc.nbColumns + column;
88 NxU8 *byte = (NxU8 *)_desc.samples + _desc.sampleStride * idx;
89 NxHeightFieldSample* sample = (NxHeightFieldSample *)byte;
93 sample->materialIndex0 = (NxU8)materialIndex0;
94 sample->materialIndex1 = (NxU8)materialIndex1;
102 void PhysxHeightFieldDesc::
103 set_height(
unsigned int row,
unsigned int column,
short height) {
105 nassertv(_desc.samples);
106 nassertv(row < _desc.nbRows);
107 nassertv(column < _desc.nbColumns);
109 NxU32 idx = row * _desc.nbColumns + column;
110 NxU8 *byte = (NxU8 *)_desc.samples + _desc.sampleStride * idx;
111 NxHeightFieldSample* sample = (NxHeightFieldSample *)byte;
113 sample->height = (NxI16)height;
121 void PhysxHeightFieldDesc::
122 set_tess_flag(
unsigned int row,
unsigned int column,
unsigned short value) {
124 nassertv(_desc.samples);
125 nassertv(row < _desc.nbRows);
126 nassertv(column < _desc.nbColumns);
128 NxU32 idx = row * _desc.nbColumns + column;
129 NxU8 *byte = (NxU8 *)_desc.samples + _desc.sampleStride * idx;
130 NxHeightFieldSample* sample = (NxHeightFieldSample *)byte;
133 sample->tessFlag = (NxU8)value;
The name of this class derives from the fact that we originally implemented it as a layer on top of t...
float get_bright(int x, int y) const
Returns the linear brightness of the given xel, as a linearized float in the range 0...