Moved Text3D across to using Style for character thickness.
Quitened down debug messages in 3D text geometry creation. Improved the Text3D implementation of the new 3D text geometry.
This commit is contained in:
parent
f8b44c3b33
commit
5af4884558
@ -165,8 +165,6 @@ protected:
|
|||||||
osg::ref_ptr<Font> _font;
|
osg::ref_ptr<Font> _font;
|
||||||
osg::ref_ptr<Style> _style;
|
osg::ref_ptr<Style> _style;
|
||||||
|
|
||||||
float _characterDepth;
|
|
||||||
|
|
||||||
RenderMode _renderMode;
|
RenderMode _renderMode;
|
||||||
|
|
||||||
osg::ref_ptr<osg::StateSet> _wallStateSet;
|
osg::ref_ptr<osg::StateSet> _wallStateSet;
|
||||||
|
@ -511,12 +511,12 @@ GlyphGeometry* Glyph3D::getGlyphGeometry(const Style* style)
|
|||||||
GlyphGeometry* glyphGeometry = itr->get();
|
GlyphGeometry* glyphGeometry = itr->get();
|
||||||
if (glyphGeometry->match(style))
|
if (glyphGeometry->match(style))
|
||||||
{
|
{
|
||||||
OSG_NOTICE<<"Glyph3D::getGlyphGeometry(Style* style) found matching GlyphGeometry."<<std::endl;
|
OSG_INFO<<"Glyph3D::getGlyphGeometry(Style* style) found matching GlyphGeometry."<<std::endl;
|
||||||
return glyphGeometry;
|
return glyphGeometry;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
OSG_NOTICE<<"Glyph3D::getGlyphGeometry(Style* style) could not find matching GlyphGeometry, creating a new one."<<std::endl;
|
OSG_INFO<<"Glyph3D::getGlyphGeometry(Style* style) could not find matching GlyphGeometry, creating a new one."<<std::endl;
|
||||||
|
|
||||||
osg::ref_ptr<GlyphGeometry> glyphGeometry = new GlyphGeometry();
|
osg::ref_ptr<GlyphGeometry> glyphGeometry = new GlyphGeometry();
|
||||||
glyphGeometry->setup(this, style);
|
glyphGeometry->setup(this, style);
|
||||||
@ -543,22 +543,22 @@ void GlyphGeometry::setup(const Glyph3D* glyph, const Style* style)
|
|||||||
|
|
||||||
if (!style)
|
if (!style)
|
||||||
{
|
{
|
||||||
OSG_NOTICE<<"GlyphGeometry::setup(const Glyph* glyph, NULL) creating default glyph geometry."<<std::endl;
|
OSG_INFO<<"GlyphGeometry::setup(const Glyph* glyph, NULL) creating default glyph geometry."<<std::endl;
|
||||||
|
|
||||||
float width = glyph->getFont()->getFontDepth();
|
float width = 0.1f;
|
||||||
|
|
||||||
_geometry = osgText::computeTextGeometry(glyph, width);
|
_geometry = osgText::computeTextGeometry(glyph, width);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
OSG_NOTICE<<"GlyphGeometry::setup(const Glyph* glyph, NULL) create glyph geometry with custom Style."<<std::endl;
|
OSG_INFO<<"GlyphGeometry::setup(const Glyph* glyph, NULL) create glyph geometry with custom Style."<<std::endl;
|
||||||
|
|
||||||
// record the style
|
// record the style
|
||||||
_style = dynamic_cast<Style*>(style->clone(osg::CopyOp::DEEP_COPY_ALL));
|
_style = dynamic_cast<Style*>(style->clone(osg::CopyOp::DEEP_COPY_ALL));
|
||||||
|
|
||||||
const Bevel* bevel = style ? style->getBevel() : 0;
|
const Bevel* bevel = style ? style->getBevel() : 0;
|
||||||
bool outline = style ? style->getOutlineRatio()>0.0f : false;
|
bool outline = style ? style->getOutlineRatio()>0.0f : false;
|
||||||
float width = glyph->getFont()->getFontDepth();//style->getThicknessRatio();
|
float width = style->getThicknessRatio();
|
||||||
|
|
||||||
if (bevel)
|
if (bevel)
|
||||||
{
|
{
|
||||||
@ -577,7 +577,7 @@ void GlyphGeometry::setup(const Glyph3D* glyph, const Style* style)
|
|||||||
|
|
||||||
if (!_geometry)
|
if (!_geometry)
|
||||||
{
|
{
|
||||||
OSG_NOTICE<<"Warning: GlyphGeometry::setup(const Glyph* glyph, const Style* style) failed."<<std::endl;
|
OSG_INFO<<"Warning: GlyphGeometry::setup(const Glyph* glyph, const Style* style) failed."<<std::endl;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -117,7 +117,7 @@ public:
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
OSG_NOTICE<<" computeBisectorNormal(a=["<<a<<"], b=["<<b<<"], c=["<<c<<"], d=["<<d<<"]), nx="<<nx<<", ny="<<ny<<", denominator="<<denominator<<" need to swap!!!"<<std::endl;
|
OSG_INFO<<" computeBisectorNormal(a=["<<a<<"], b=["<<b<<"], c=["<<c<<"], d=["<<d<<"]), nx="<<nx<<", ny="<<ny<<", denominator="<<denominator<<" need to swap!!!"<<std::endl;
|
||||||
return osg::Vec3(-nx,-ny,0.0f);
|
return osg::Vec3(-nx,-ny,0.0f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -660,7 +660,7 @@ osg::Geometry* computeTextGeometry(osg::Geometry* glyphGeometry, const osgText::
|
|||||||
osg::Vec3Array* orig_vertices = dynamic_cast<osg::Vec3Array*>(glyphGeometry->getVertexArray());
|
osg::Vec3Array* orig_vertices = dynamic_cast<osg::Vec3Array*>(glyphGeometry->getVertexArray());
|
||||||
if (!orig_vertices)
|
if (!orig_vertices)
|
||||||
{
|
{
|
||||||
OSG_NOTICE<<"computeTextGeometry(..): No vertices on glyphGeometry."<<std::endl;
|
OSG_INFO<<"computeTextGeometry(..): No vertices on glyphGeometry."<<std::endl;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -21,7 +21,6 @@ namespace osgText
|
|||||||
Text3D::Text3D():
|
Text3D::Text3D():
|
||||||
_font(0),
|
_font(0),
|
||||||
_style(0),
|
_style(0),
|
||||||
_characterDepth(1),
|
|
||||||
_renderMode(PER_GLYPH)
|
_renderMode(PER_GLYPH)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@ -30,7 +29,6 @@ Text3D::Text3D(const Text3D & text3D, const osg::CopyOp & copyop):
|
|||||||
osgText::TextBase(text3D, copyop),
|
osgText::TextBase(text3D, copyop),
|
||||||
_font(text3D._font),
|
_font(text3D._font),
|
||||||
_style(text3D._style),
|
_style(text3D._style),
|
||||||
_characterDepth(text3D._characterDepth),
|
|
||||||
_renderMode(text3D._renderMode)
|
_renderMode(text3D._renderMode)
|
||||||
{
|
{
|
||||||
computeGlyphRepresentation();
|
computeGlyphRepresentation();
|
||||||
@ -38,12 +36,15 @@ Text3D::Text3D(const Text3D & text3D, const osg::CopyOp & copyop):
|
|||||||
|
|
||||||
float Text3D::getCharacterDepth() const
|
float Text3D::getCharacterDepth() const
|
||||||
{
|
{
|
||||||
return _characterDepth;
|
if (!_style) return _characterHeight*0.1f;
|
||||||
|
else return _characterHeight * _style->getThicknessRatio();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Text3D::setCharacterDepth(float characterDepth)
|
void Text3D::setCharacterDepth(float characterDepth)
|
||||||
{
|
{
|
||||||
_characterDepth = characterDepth;
|
if (!_style) _style = new Style;
|
||||||
|
_style->setThicknessRatio(characterDepth / _characterHeight);
|
||||||
|
|
||||||
computeGlyphRepresentation();
|
computeGlyphRepresentation();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -462,7 +463,9 @@ void Text3D::computeGlyphRepresentation()
|
|||||||
|
|
||||||
++lineNumber;
|
++lineNumber;
|
||||||
}
|
}
|
||||||
_textBB.expandBy(0.0f,0.0f,-1);
|
|
||||||
|
float thickness = _style.valid() ? _style->getThicknessRatio() : 0.1f;
|
||||||
|
_textBB.zMin() = -thickness;
|
||||||
|
|
||||||
TextBase::computePositions();
|
TextBase::computePositions();
|
||||||
}
|
}
|
||||||
@ -516,7 +519,8 @@ void Text3D::computePositions(unsigned int contextID) const
|
|||||||
|
|
||||||
|
|
||||||
float scale = _font->getScale();
|
float scale = _font->getScale();
|
||||||
osg::Vec3 scaleVec(scale * _characterHeight, scale * _characterHeight / _characterAspectRatio, _characterDepth);
|
osg::Vec3 scaleVec(scale * _characterHeight, scale * _characterHeight / _characterAspectRatio, scale * _characterHeight);
|
||||||
|
|
||||||
matrix.makeTranslate(-_offset);
|
matrix.makeTranslate(-_offset);
|
||||||
matrix.postMultScale(scaleVec);
|
matrix.postMultScale(scaleVec);
|
||||||
matrix.postMultRotate(_rotation);
|
matrix.postMultRotate(_rotation);
|
||||||
|
Loading…
Reference in New Issue
Block a user