Hi, Conan

gl_ModelViewMatrix * gl_Vertex is position of vertex in camera space
If your view matrix dont have scale component, you dont need anything else to 
calculate distance (by distance i mean vector length)
In general case you can use:
osg_ViewMatrixInverse * gl_ModelViewMatrix * gl_Vertex <- this is world space 
vector from camera to vertex

Cheers,
Sergey.

13.09.2011, 18:19, "Conan Doyle" <[email protected]>:
> Hi,
>
> I want to calculate the distance between my final render cameras position and 
> the vertices of each object rendered.  I want to pass the world position of 
> the camera into a shader and then use gl_Vertex position to perform the 
> calculation.  In search the OSG website, the net and this forum (as I 
> understand a good OSG newbie should) I found the following
>
> http://www.openscenegraph.org/projects/osg/wiki/Support/Tutorials/CameraControlFindingWorldCoordinates
>
>>  "Where in the world am I?
>>  To compute where a particular node is the scene graph is, in world 
>> coordinates, you need to acquire the accumulated 4x4 matrix from the root of 
>> the scene graph down to your node. osg::Node contains a convenience method, 
>> Node::getWorldMatrices(..), that walks the parental chain from your node to 
>> the root(s) of your scene graph, returning a list of matrices. A list of 
>> matrices is returned rather than a single matrix as the OpenSceneGraph 
>> supports sharing of nodes, so they may have multiple parents, and if the 
>> parent chain has separate transforms in them the different paths will result 
>> in different matrices - in this case you node is effectively in more than 
>> one place at once! Multiple parents would be typical in cases such as a 
>> wheel subgraph that is reused four times on a car, each with a transform 
>> above it to place it in the appropriate place.
>>  To use this feature use code such as:
>>
>>  osg::MatrixList worldMatrices = myNode->getWorldMatrices();
>>
>>     for(osg::MatrixList::iterator itr = worldMatrices.begin();
>>         itr != worldMatrices.end();
>>         ++itr)
>>     {
>>         osg::Matrix& matrix = *itr;
>>         osg::Vec3 center = myNode->getBound().center() * matrix;
>>         std::cout<<"Node "<<myNode->getName()<<" center = "<<center<<" 
>> worldMatrix = "<<matrix<<std::end;
>>     }
>>  "
>
> I am wondering if this is what I need to do...  with myNode being my viewer 
> camera node, and then getting the worldMatrix for it.... If so, how do I get 
> the position from the worldMatrix?
>
> Conan
>
> Thank you!
>
> Cheers,
> Conan
>
> ------------------
> Read this topic online here:
> http://forum.openscenegraph.org/viewtopic.php?p=42702#42702
>
> _______________________________________________
> osg-users mailing list
> [email protected]
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to