vec4 worldSpaceCameraPosition = osg_ViewMatrixInverse * vec4(0,0,0,1);//you can 
use just translation column(or row?) of matrix instead
vec4 worldSpaceVertexPosition = osg_ViewMatrixInverse * gl_ModelViewMatrix * 
gl_Vertex;
vec4 worldSpaceVectorFromCameraToVertex = osg_ViewMatrixInverse * 
vec4((gl_ModelViewMatrix * gl_Vertex).xyz, 0.0);

Cheers

13.09.2011, 20:30, "Conan Doyle" <[email protected]>:
> How would I calculate the actual world positions, not distances, of the 
> camera and the vertices?
>
> CD
>
> hybr wrote:
>
>>  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" <>:
>>>  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
>>>
>>>  http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>>  _______________________________________________
>>  osg-users mailing list
>>
>>  http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>>
>>   ------------------
>>  Post generated by Mail2Forum
>
> ------------------
> Read this topic online here:
> http://forum.openscenegraph.org/viewtopic.php?p=42716#42716
>
> _______________________________________________
> 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