Hi Jan,

Jan wrote:
> Hi Carsten,
> 
> Carsten Neumann schreef:
>> there is Camera::getWorldToScreen(Matrixr &result,
>>                  const Viewport &port) which should give you the matrix
>> for that transformation.
>>   
> I guess that the multiplication of a vector with this transformation 
> matrix results in the clipping coordinates of my object (the 3D 
> pointer)  ?  After this, I rescale these coordinates according to the 
> viewport size. These two steps are done in the two routines below.
> 
> After the WorldToViewportCoordinates() method, I'm calling the 
> calcViewRay() function with the obtained X and Y coordinates. When I use 
> the calculated ray for my picking routine, it doesn't give the expected 
> results: the picking ray is not perpendicular on the pointer into the 
> screen.
> 
> To clarify my intentions, please look at this screenshot: 
> http://lumumba.uhasselt.be/~meskensj/opensg/opensg_picking.JPG. The red 
> sphere is my pointer, when a ray is shot from the pointer, I expect that 
> the big white box should be selected. Well, this is not the case! Can 
> someone explain this behavior and/or give me some advice to solve this 
> problem?

did you insert some std::cout statements to see what coordinates you 
actually get ?

> //Convert a point in the world to the clipping coordinates
> void Renderer::WorldToClippingCoordinates(Vec3f& point, float& x, float& 
> y, float& z)
> {
>     Matrix wts;
>     m_matrixCamera->getWorldToScreen(wts,*m_viewport);
>     Vec3f dest;
>     wts.multVecMatrix(point,dest);
> 
>     x = dest[0];
>     y = dest[1];
>     z = dest[3];
> }
> 
> //Map to viewport coordinates
> void Renderer::WorldToViewportCoordinates(Vec3f& point, float& x, float& y)
> {
>     float _x,_y,_z;
>     WorldToClippingCoordinates(point,_x,_y,_z);
>     //Map to a 0..1 interval
>     _x = (_x + 1)/2.0;
>     _y = (_y + 1)/2.0;
>     //Scale
>     x = _x * SCREEN_WIDTH;
>     y = ((_y * SCREEN_HEIGHT) - SCREEN_HEIGHT)*(-1);
> }

hm, only thing that springs to mind is that you are using Vec3f and 
OpenSG handles vectors different from points, i.e. vectors ignore 
translation when transformed, so you might want to try using a Pnt3f there.

        Hope it helps,
                Carsten


-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Opensg-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensg-users

Reply via email to