Fixed handling of scale.x, scale.y and scale.z paramters so that all of them now take an effect.

This commit is contained in:
Robert Osfield
2011-10-21 09:31:56 +00:00
parent 6607b373d5
commit 088d00c651

View File

@@ -1529,18 +1529,19 @@ void SlideShowConstructor::addModel(osg::Node* subgraph, const PositionData& pos
subgraph = specularHighlights;
}
}
if (positionData.frame==SLIDE)
{
osg::Vec3 pos = convertSlideToModel(positionData.position);
const osg::BoundingSphere& bs = subgraph->getBound();
float model_scale = positionData.scale.x()*_slideHeight*(1.0f-positionData.position.z())*0.7f/bs.radius();
float slide_scale = _slideHeight*(1.0f-positionData.position.z())*0.7f/bs.radius();
osg::MatrixTransform* transform = new osg::MatrixTransform;
transform->setDataVariance(defaultMatrixDataVariance);
transform->setMatrix(osg::Matrix::translate(-bs.center())*
osg::Matrix::scale(model_scale,model_scale,model_scale)*
osg::Matrix::scale(positionData.scale.x()*slide_scale, positionData.scale.y()*slide_scale ,positionData.scale.z()*slide_scale)*
osg::Matrix::rotate(osg::DegreesToRadians(positionData.rotate[0]),positionData.rotate[1],positionData.rotate[2],positionData.rotate[3])*
osg::Matrix::translate(pos));
@@ -1553,7 +1554,7 @@ void SlideShowConstructor::addModel(osg::Node* subgraph, const PositionData& pos
}
else
{
osg::Matrix matrix(osg::Matrix::scale(1.0f/positionData.scale.x(),1.0f/positionData.scale.x(),1.0f/positionData.scale.x())*
osg::Matrix matrix(osg::Matrix::scale(1.0f/positionData.scale.x(),1.0f/positionData.scale.y(),1.0f/positionData.scale.z())*
osg::Matrix::rotate(osg::DegreesToRadians(positionData.rotate[0]),positionData.rotate[1],positionData.rotate[2],positionData.rotate[3])*
osg::Matrix::translate(positionData.position));