Changeset 7968
- Timestamp:
- 03/18/08 16:37:38 (5 years ago)
- Location:
- OpenSceneGraph/trunk
- Files:
-
- 6 modified
-
examples/osgautotransform/osgautotransform.cpp (modified) (3 diffs)
-
include/osg/AutoTransform (modified) (2 diffs)
-
src/osg/AutoTransform.cpp (modified) (3 diffs)
-
src/osgPlugins/ive/AutoTransform.cpp (modified) (2 diffs)
-
src/osgPlugins/ive/IveVersion.h (modified) (1 diff)
-
src/osgPlugins/osg/AutoTransform.cpp (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
OpenSceneGraph/trunk/examples/osgautotransform/osgautotransform.cpp
r7967 r7968 29 29 #include <osg/Geometry> 30 30 31 #include <osgDB/WriteFile> 32 31 33 #include <osgText/Text> 32 34 … … 113 115 geom->setVertexArray(vertices); 114 116 geom->setColorArray(colors); 117 geom->setColorBinding(osg::Geometry::BIND_OVERALL); 115 118 geom->addPrimitiveSet(new osg::DrawArrays(GL_LINE_STRIP,0,vertices->size())); 116 119 … … 139 142 geom->setVertexArray(vertices); 140 143 geom->setColorArray(colors); 144 geom->setColorBinding(osg::Geometry::BIND_OVERALL); 141 145 geom->addPrimitiveSet(new osg::DrawArrays(GL_LINE_STRIP,0,vertices->size())); 142 146 -
OpenSceneGraph/trunk/include/osg/AutoTransform
r7965 r7968 84 84 bool getAutoScaleToScreen() const { return _autoScaleToScreen; } 85 85 86 void setAutoScaleTransistionWidthRatio(float ratio) { _autoScaleTransitionWidthRatio = ratio; } 87 float getAutoScaleTransistionWidthRatio() const { return _autoScaleTransitionWidthRatio; } 88 86 89 87 90 virtual bool computeLocalToWorldMatrix(Matrix& matrix,NodeVisitor* nv) const; … … 116 119 float _minimumScale; 117 120 float _maximumScale; 118 121 float _autoScaleTransitionWidthRatio; 119 122 120 123 void computeMatrix() const; -
OpenSceneGraph/trunk/src/osg/AutoTransform.cpp
r7965 r7968 26 26 _minimumScale(0.0f), 27 27 _maximumScale(FLT_MAX), 28 _autoScaleTransitionWidthRatio(0.25f), 28 29 _matrixDirty(true) 29 30 { … … 43 44 _minimumScale(pat._minimumScale), 44 45 _maximumScale(pat._maximumScale), 46 _autoScaleTransitionWidthRatio(pat._autoScaleTransitionWidthRatio), 45 47 _matrixDirty(true) 46 48 { … … 179 181 { 180 182 float size = 1.0f/cs->pixelSize(getPosition(),0.48f); 181 182 if (size<_minimumScale) size = _minimumScale; 183 if (size>_maximumScale) size = _maximumScale; 183 184 if (_autoScaleTransitionWidthRatio>0.0f) 185 { 186 if (_minimumScale>0.0f) 187 { 188 float j = _minimumScale; 189 float i = (_maximumScale<FLT_MAX) ? 190 _minimumScale+(_maximumScale-_minimumScale)*_autoScaleTransitionWidthRatio : 191 _minimumScale*(1.0f+_autoScaleTransitionWidthRatio); 192 float c = 1.0f/(4.0f*(i-j)); 193 float b = 1.0f - 2.0f*c*i; 194 float a = j + b*b / (4.0f*c); 195 float k = -b / (2.0f*c); 196 197 if (size<k) size = _minimumScale; 198 else if (size<i) size = a + b*size + c*(size*size); 199 } 200 201 if (_maximumScale<FLT_MAX) 202 { 203 float n = _maximumScale; 204 float m = (_minimumScale>0.0) ? 205 _maximumScale+(_minimumScale-_maximumScale)*_autoScaleTransitionWidthRatio : 206 _maximumScale*(1.0f-_autoScaleTransitionWidthRatio); 207 float c = 1.0f / (4.0f*(m-n)); 208 float b = 1.0f - 2.0f*c*m; 209 float a = n + b*b/(4.0f*c); 210 float p = -b / (2.0f*c); 211 212 if (size>p) size = _maximumScale; 213 else if (size>m) size = a + b*size + c*(size*size); 214 } 215 } 184 216 185 217 setScale(size); -
OpenSceneGraph/trunk/src/osgPlugins/ive/AutoTransform.cpp
r4992 r7968 38 38 out->writeBool(getAutoScaleToScreen()); 39 39 40 if ( out->getVersion() >= VERSION_0025 ) 41 { 42 out->writeFloat(getMinimumScale()); 43 out->writeFloat(getMaximumScale()); 44 out->writeFloat(getAutoScaleTransistionWidthRatio()); 45 } 46 40 47 out->writeQuat(getRotation()); 41 48 out->writeVec3(getScale()); 49 42 50 } 43 51 … … 65 73 setAutoScaleToScreen(in->readBool()); 66 74 75 if ( in->getVersion() >= VERSION_0025 ) 76 { 77 setMinimumScale(in->readFloat()); 78 setMaximumScale(in->readFloat()); 79 setAutoScaleTransistionWidthRatio(in->readFloat()); 80 } 81 67 82 setRotation(in->readQuat()); 68 83 setScale(in->readVec3()); 84 85 69 86 } 70 87 else{ -
OpenSceneGraph/trunk/src/osgPlugins/ive/IveVersion.h
r7891 r7968 34 34 #define VERSION_0023 23 35 35 #define VERSION_0024 24 36 #define VERSION_0025 25 36 37 37 #define VERSION VERSION_002 438 #define VERSION VERSION_0025 38 39 39 40 /* The BYTE_SEX tag is used to check the endian -
OpenSceneGraph/trunk/src/osgPlugins/osg/AutoTransform.cpp
r7965 r7968 141 141 } 142 142 143 if (fr.matchSequence("autoScaleTransistionWidthRatio %f")) 144 { 145 float ratio; 146 fr[1].getFloat(ratio); 147 148 transform.setAutoScaleTransistionWidthRatio(ratio); 149 150 fr += 2; 151 iteratorAdvanced = true; 152 } 153 154 143 155 return iteratorAdvanced; 144 156 } … … 168 180 } 169 181 170 171 182 fw.indent()<<"autoScaleToScreen "<<(transform.getAutoScaleToScreen()?"TRUE":"FALSE")<<std::endl; 172 183 184 if (transform.getAutoScaleTransistionWidthRatio()!=0.25) 185 { 186 fw.indent()<<"autoScaleTransistionWidthRatio "<<transform.getAutoScaleTransistionWidthRatio()<<std::endl; 187 } 188 173 189 return true; 174 190 }
