Panda3D

physxHeightFieldDesc.cxx
Go to the documentation of this file.
1 /**
2 * PANDA 3D SOFTWARE
3 * Copyright (c) Carnegie Mellon University. All rights reserved.
4 *
5 * All use of this software is subject to the terms of the revised BSD
6 * license. You should have received a copy of this license along
7 * with this source code in a file named "LICENSE."
8 *
9 * @file physxHeightFieldDesc.cxx
10 * @author enn0x
11 * @date 2009-10-15
12 */
13
14 #include "physxHeightFieldDesc.h"
15
16 /**
17 *
18 */
19 void PhysxHeightFieldDesc::
20 set_convex_edge_threshold(float threshold) {
21
22 _desc.convexEdgeThreshold = threshold;
23 }
24
25 /**
26 *
27 */
28 void PhysxHeightFieldDesc::
29 set_thickness(float thickness) {
30
31 _desc.thickness = thickness;
32 }
33
34 /**
35 *
36 */
37 void PhysxHeightFieldDesc::
38 set_image(const PNMImage &image, unsigned short materialIndex) {
39
40 NxU32 _32K = 32767; // (1<<15)-1;
41 NxU32 _64K = 65535; // (1<<16)-1;
42
43 NxU32 nbRows = image.get_x_size();
44 NxU32 nbColumns = image.get_y_size();
45
46 set_size(nbRows, nbColumns);
47
48 NxU8 *currentByte = (NxU8 *)(_desc.samples);
49
50 for (NxU32 row=0; row < nbRows; row++) {
51 for (NxU32 column=0; column < nbColumns; column++) {
52
53 NxHeightFieldSample* currentSample = (NxHeightFieldSample *)currentByte;
54
55 NxReal fvalue = image.get_bright(row, column);
56 NxI16 ivalue = (NxI16)((fvalue - 0.5f) * _32K);
57
58 currentSample->height = (NxI16)ivalue;
59 currentSample->tessFlag = (NxU8)0;
60 currentSample->materialIndex0 = (NxU8)materialIndex;
61 currentSample->materialIndex1 = (NxU8)materialIndex;
62
63 currentByte += _desc.sampleStride;
64 }
65 }
66 }
67
68 /**
69 *
70 */
71 void PhysxHeightFieldDesc::
72 set_material_index(unsigned int row, unsigned int column, unsigned short materialIndex0, unsigned short materialIndex1) {
73
74 nassertv(_desc.samples);
75 nassertv(row < _desc.nbRows);
76 nassertv(column < _desc.nbColumns);
77
78 NxU32 idx = row * _desc.nbColumns + column;
79 NxU8 *byte = (NxU8 *)_desc.samples + _desc.sampleStride * idx;
80 NxHeightFieldSample* sample = (NxHeightFieldSample *)byte;
81
82 // NxHeightFieldSample* sample = ((NxHeightFieldSample *)_desc.samples) +
83 // idx;
84
85 sample->materialIndex0 = (NxU8)materialIndex0;
86 sample->materialIndex1 = (NxU8)materialIndex1;
87 }
88
89 /**
90 *
91 */
92 void PhysxHeightFieldDesc::
93 set_height(unsigned int row, unsigned int column, short height) {
94
95 nassertv(_desc.samples);
96 nassertv(row < _desc.nbRows);
97 nassertv(column < _desc.nbColumns);
98
99 NxU32 idx = row * _desc.nbColumns + column;
100 NxU8 *byte = (NxU8 *)_desc.samples + _desc.sampleStride * idx;
101 NxHeightFieldSample* sample = (NxHeightFieldSample *)byte;
102
103 sample->height = (NxI16)height;
104 }
105
106 /**
107 *
108 */
109 void PhysxHeightFieldDesc::
110 set_tess_flag(unsigned int row, unsigned int column, unsigned short value) {
111
112 nassertv(_desc.samples);
113 nassertv(row < _desc.nbRows);
114 nassertv(column < _desc.nbColumns);
115
116 NxU32 idx = row * _desc.nbColumns + column;
117 NxU8 *byte = (NxU8 *)_desc.samples + _desc.sampleStride * idx;
118 NxHeightFieldSample* sample = (NxHeightFieldSample *)byte;
119
120 nassertv(value < 2);
121 sample->tessFlag = (NxU8)value;
122 }
PNMImageHeader::get_x_size
int get_x_size() const
Returns the number of pixels in the X direction.
Definition: pnmImageHeader.I:144
PNMImageHeader::get_y_size
int get_y_size() const
Returns the number of pixels in the Y direction.
Definition: pnmImageHeader.I:153
PNMImage
The name of this class derives from the fact that we originally implemented it as a layer on top of t...
Definition: pnmImage.h:58
PNMImage::get_bright
float get_bright(int x, int y) const
Returns the linear brightness of the given xel, as a linearized float in the range 0....
Definition: pnmImage.I:869
physxHeightFieldDesc.h
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.