HI Adrain,
The way I'd do it is to create a cube in clip space (-1,-1,-1,1,1,1,)
than transform this by the inverse of the view*project matrix to put
it into world coords.
Robert.
On 2/5/07, Adrian Egli <[EMAIL PROTECTED]> wrote:
hi all
i feel like i am too stupid, i like to implement a new drawable to drawing a
plane on the bottom of the view frustum volume. the plane should always be
on the viewfrustumvolume bottom.
i have only the sceneview
osg::Vec3 eye,center,up,vdir;
sceneView->getViewMatrixAsLookAt(eye,center,up);
double left,right,botton,top,zFar,zNear;
sceneView->getProjectionMatrixAsFrustum(left,right,botton,top,zNear,zFar);
double fov,ratio;
sceneView->getProjectionMatrixAsPerspective(fov,ratio,zNear,zFar);
osg::Vec3 fdir(center-eye);
osg::Vec3 dir(fdir);
dir.normalize ();
osg::Vec3 s(dir^up);
s.normalize();
double Hnear = 2.0 * tan(fov / 2.0) * zNear;
double Wnear = Hnear * ratio;
double Hfar = 2.0 * tan(fov / 2.0) * zFar;
double Wfar = Hfar * ratio;
osg::Vec3d eyeAtNear = eye + dir * zNear;
osg::Vec3d eyeAtFar = eye + dir * zFar;
edgeNearLeft = eyeAtNear + s * -Wnear/2.0;
edgeNearRight = eyeAtNear + s * Wnear/2.0;
edgeFarLeft = eyeAtFar + s * -Wfar/2.0;
edgeFarRight = eyeAtFar + s * Wfar/2.0;
glBegin(GL_TRIANGLE_STRIP);
glVertex3dv(edgeNearLeft.ptr());
glVertex3dv(edgeNearRight.ptr ());
glVertex3dv(edgeFarLeft.ptr());
glVertex3dv(edgeFarRight.ptr());
glEnd();
what is wrong?
_______________________________________________
osg-users mailing list
[email protected]
http://openscenegraph.net/mailman/listinfo/osg-users
http://www.openscenegraph.org/
_______________________________________________
osg-users mailing list
[email protected]
http://openscenegraph.net/mailman/listinfo/osg-users
http://www.openscenegraph.org/