Added SmokeTrailEffect which renders created particles as single quad or line
strip, in the case of the quad strip the strip is aligned to the be orthogonal with the eye point.
This commit is contained in:
@@ -79,37 +79,8 @@ void CullStack::pushCullingSet()
|
||||
const osg::Viewport& W = *_viewportStack.back();
|
||||
const osg::Matrix& P = *_projectionStack.back();
|
||||
const osg::Matrix& M = *_modelviewStack.back();
|
||||
|
||||
// pre adjust P00,P20,P23,P33 by multiplying them by the viewport window matrix.
|
||||
// here we do it in short hand with the knowledge of how the window matrix is formed
|
||||
// note P23,P33 are multiplied by an implicit 1 which would come from the window matrix.
|
||||
// Robert Osfield, June 2002.
|
||||
|
||||
// scaling for horizontal pixels
|
||||
float P00 = P(0,0)*W.width()*0.5f;
|
||||
float P20_00 = P(2,0)*W.width()*0.5f + P(2,3)*W.width()*0.5f;
|
||||
osg::Vec3 scale_00(M(0,0)*P00 + M(0,2)*P20_00,
|
||||
M(1,0)*P00 + M(1,2)*P20_00,
|
||||
M(2,0)*P00 + M(2,2)*P20_00);
|
||||
|
||||
// scaling for vertical pixels
|
||||
float P10 = P(1,1)*W.height()*0.5f;
|
||||
float P20_10 = P(2,1)*W.height()*0.5f + P(2,3)*W.height()*0.5f;
|
||||
osg::Vec3 scale_10(M(0,1)*P10 + M(0,2)*P20_10,
|
||||
M(1,1)*P10 + M(1,2)*P20_10,
|
||||
M(2,1)*P10 + M(2,2)*P20_10);
|
||||
|
||||
float P23 = P(2,3);
|
||||
float P33 = P(3,3);
|
||||
osg::Vec4 pixelSizeVector(M(0,2)*P23,
|
||||
M(1,2)*P23,
|
||||
M(2,2)*P23,
|
||||
M(3,2)*P23 + M(3,3)*P33);
|
||||
|
||||
float scaleRatio = 0.7071067811f/sqrtf(scale_00.length2()+scale_10.length2());
|
||||
|
||||
pixelSizeVector *= scaleRatio;
|
||||
|
||||
osg::Vec4 pixelSizeVector = CullingSet::computePixelSizeVector(W,P,M);
|
||||
|
||||
if (_index_modelviewCullingStack>=_modelviewCullingStack.size())
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user