54 #ifndef ACG_SPLATCLOUDNODE_HH
55 #define ACG_SPLATCLOUDNODE_HH
61 #include "SplatCloud/SplatCloud.hh"
65 #include <ACG/Scenegraph/BaseNode.hh>
67 #include <ACG/Scenegraph/DrawModes.hh>
69 #include <ACG/GL/gl.hh>
76 namespace SceneGraph {
93 typedef SplatCloud::Position Position;
94 typedef SplatCloud::Color
Color;
95 typedef SplatCloud::Normal
Normal;
96 typedef SplatCloud::Pointsize Pointsize;
97 typedef SplatCloud::Index Index;
98 typedef SplatCloud::Viewlist Viewlist;
99 typedef SplatCloud::Selection Selection;
117 void boundingBox( ACG::Vec3d &_bbMin, ACG::Vec3d &_bbMax );
130 inline const SplatCloud &splatCloud()
const {
return splatCloud_; }
134 inline void modifiedPositions() { positionsModified_ =
true; }
135 inline void modifiedColors() { colorsModified_ =
true; }
136 inline void modifiedNormals() { normalsModified_ =
true; }
137 inline void modifiedPointsizes() { pointsizesModified_ =
true; }
138 inline void modifiedSelections() { selectionsModified_ =
true; }
139 inline void modifiedPickColors() { pickColorsModified_ =
true; }
141 inline void modifiedAll()
146 modifiedPointsizes();
147 modifiedSelections();
148 modifiedPickColors();
153 inline void setDefaultColor (
const Color &_color ) { defaultColor_ = _color; }
154 inline void setDefaultNormal (
const Normal &_normal ) { defaultNormal_ = _normal; }
155 inline void setDefaultPointsize(
const Pointsize &_pointsize ) { defaultPointsize_ = _pointsize; }
157 inline const Color &defaultColor()
const {
return defaultColor_; }
158 inline const Normal &defaultNormal()
const {
return defaultNormal_; }
159 inline const Pointsize &defaultPointsize()
const {
return defaultPointsize_; }
162 inline const Position &
getPosition (
int _idx )
const {
return splatCloud_.hasPositions() ? splatCloud_.positions ( _idx ) : DEFAULT_POSITION; }
163 inline const Color &getColor (
int _idx )
const {
return splatCloud_.hasColors() ? splatCloud_.colors ( _idx ) : defaultColor_; }
164 inline const Normal &getNormal (
int _idx )
const {
return splatCloud_.hasNormals() ? splatCloud_.normals ( _idx ) : defaultNormal_; }
165 inline const Pointsize &getPointsize(
int _idx )
const {
return splatCloud_.hasPointsizes() ? splatCloud_.pointsizes( _idx ) : defaultPointsize_; }
166 inline const Index &getIndex (
int _idx )
const {
return splatCloud_.hasIndices() ? splatCloud_.indices ( _idx ) : DEFAULT_INDEX; }
167 inline const Viewlist &getViewlist (
int _idx )
const {
return splatCloud_.hasViewlists() ? splatCloud_.viewlists ( _idx ) : DEFAULT_VIEWLIST; }
168 inline const Selection &getSelection(
int _idx )
const {
return splatCloud_.hasSelections() ? splatCloud_.selections( _idx ) : DEFAULT_SELECTION; }
183 bool colorsModified_;
184 bool normalsModified_;
185 bool pointsizesModified_;
186 bool selectionsModified_;
187 bool pickColorsModified_;
190 inline bool vboModified()
const
192 return positionsModified_ ||
195 pointsizesModified_ ||
196 selectionsModified_ ||
204 Normal defaultNormal_;
205 Pointsize defaultPointsize_;
215 unsigned int pickingBaseIndex_;
223 unsigned int vboNumSplats_;
224 unsigned char *vboData_;
228 int vboColorsOffset_;
229 int vboNormalsOffset_;
230 int vboPointsizesOffset_;
231 int vboSelectionsOffset_;
232 int vboPickColorsOffset_;
235 inline bool vboStructureModified()
const
237 return vboNumSplats_ != splatCloud_.numSplats() ||
238 (vboPositionsOffset_ != -1) != splatCloud_.hasPositions() ||
239 (vboColorsOffset_ != -1) != splatCloud_.hasColors() ||
240 (vboNormalsOffset_ != -1) != splatCloud_.hasNormals() ||
241 (vboPointsizesOffset_ != -1) != splatCloud_.hasPointsizes() ||
242 (vboSelectionsOffset_ != -1) != splatCloud_.hasSelections();
247 void rebuildVBO(
GLState &_state );
249 void rebuildVBOPositions();
250 void rebuildVBOColors();
251 void rebuildVBONormals();
252 void rebuildVBOPointsizes();
253 void rebuildVBOSelections();
254 void rebuildVBOPickColors(
GLState &_state );
256 static const Position DEFAULT_POSITION;
257 static const Index DEFAULT_INDEX;
258 static const Viewlist DEFAULT_VIEWLIST;
259 static const Selection DEFAULT_SELECTION;
273 #endif // ACG_SPLATCLOUDNODE_HH