00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef __SGL_DISTANCE_SWITCH_HPP
00027 #define __SGL_DISTANCE_SWITCH_HPP
00028
00029 #include <sgl.h>
00030 #include <vector>
00031
00032 #include <sglVector.hpp>
00033 #include <sglGroup.hpp>
00034 #include <sglLODState.hpp>
00035
00036
00037
00145 class SGL_DLL_API sglLOD : public sglGroup
00146 {
00147 public:
00149 sglLOD();
00151 virtual ~sglLOD();
00152
00156 unsigned int getNumRanges() const { return m_ranges.size(); }
00157
00163 void setRange(unsigned int index, float range);
00164
00171 float getRange(unsigned int index) const;
00172
00177 void setCenter(const sglVec3f ¢er) { m_center = center; }
00178
00182 const sglVec3f &getCenter() const { return m_center; }
00183
00188 static void setScaleFactor(float scale) { s_range_scale = scale; }
00189
00193 static float getScaleFactor() { return s_range_scale; }
00194
00205 void setLODState(sglLODState *lod_state);
00206
00211 sglLODState *getLODState() const { return m_lod_state; }
00212
00213
00214 virtual sglBound::IntersectResultEnum intersect(
00215 sglIntersectf &isector) const;
00216
00217
00218 virtual sglBound::IntersectResultEnum intersect(
00219 sglIntersectd &isector) const;
00220
00221
00222 virtual void pick(sglPickf &pick_state, unsigned int cull_flags) const;
00223
00224
00225 virtual void pick(sglPickd &pick_state, unsigned int cull_flags) const;
00226
00227
00228 virtual sglNode *clone(unsigned int mode) const;
00229
00230
00231 virtual void printInfo(ostream &ostrm, const char *indent_string) const;
00232
00233 protected:
00234
00235 virtual void cull(sglCull<float> &trav_state,
00236 unsigned int cull_flags) const;
00237
00238
00239 virtual void cull(sglCull<double> &trav_state,
00240 unsigned int cull_flags) const;
00241
00242
00243
00244
00245
00246 virtual float computeRange(float trav_lod_scale,
00247 float trav_lod_offset,
00248 const sglMat4f &view_matrix) const;
00249 virtual float computeRange(float trav_lod_scale,
00250 float trav_lod_offset,
00251 const sglMat4d &view_matrix) const;
00252
00253 void copyTo(sglLOD *dst, unsigned int mode) const;
00254
00255 private:
00256 sglLOD(const sglLOD &);
00257 sglLOD &operator=(const sglLOD &);
00258
00259 protected:
00260 static float s_range_scale;
00261
00262 sglVec3f m_center;
00263 vector<float> m_ranges;
00264
00265 sglLODState *m_lod_state;
00266 };
00267
00268 #endif