HRESULT CALLBACK EmaginZ800Class::TrackProc(EMADeviceData* data, void* param)<br />{<br />ššš if ( NULL == data )<br />ššš {<br />ššššššš return EMA_INVALID_PARAMETER;<br />ššš }<br />šš <br />ššš // make a copy of the command so we can use it later on<br />ššš // when we draw the data on the screen<br />šš šYaw = data->Yaw;<br />ššš Pitch = data->Pitch;<br />ššš Roll = data->Roll;<br /><br />šš š//std::cout << Yaw << " " << Pitch << " " << Roll << std::endl;<br /><br />ššš return S_OK;<br />}<br /><br />....my example<br /><br />ššš ššš osg::Matrixd myCameraMatrix;<br />ššš ššš osg::Matrixd cameraRotation;<br />ššš ššš osg::Matrixd cameraTrans;<br /><br />ššš ššš float xtrans = BodyX;<br />ššš ššš float ztrans = BodyY;<br />ššš ššš float ytrans = BodyZ;<br />ššš ššš float xrotateš = 360.0f - HeadX;<br />ššš ššš float yrotateš = HeadY;//UserInput->getYrotate();<br />ššš ššš float zrotateš = HeadZ;<br /><br />ššš ššš cameraRotation.makeRotate(<br />ššš ššš osg::DegreesToRadians(zrotate), osg::Vec3(0,1,0), // roll<br />ššš ššš osg::DegreesToRadians(yrotate), osg::Vec3(1,0,0) , // pitch<br />ššš ššš osg::DegreesToRadians(xrotate), osg::Vec3(0,0,1) ); // heading <br /><br />ššš ššš cameraTrans.makeTranslate( xtrans,ztrans,ytrans );<br />ššš ššš myCameraMatrix = cameraRotation * cameraTrans;<br /><br />ššš ššš osg::Matrixd i = myCameraMatrix.inverse(myCameraMatrix);<br />ššš ššš .....getViewer()->getCamera()->setViewMatrix((osg::Matrixd(i.ptr()))* osg::Matrixd::rotate( -3.14f / 2.0, 1, 0, 0 ));<br /><br /><br /><br /><br /><br /><br />13.09.08, 14:08, "alessandro terenzi" <a.terenzi@gmail.com>:

<br /><BLOCKQUOTE mce_style="border-left:1px solid #CCCCCC;margin:0pt 0pt 0pt 0.8ex;padding-left:1em;" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1em;" ><DIV dir="ltr" ><DIV >I'm going to use a head-mounted display with integratedšhead tracker in my osg application. The tracker sensors, when activated,šactually replace the mouse, so for instance is possible to move the cursor on the desktop just moving the head. I wonder how to use it inside an osg application, in particular I thought to modify one of the provided manipulators but, since I still don't know how manipulators work internally, I'd like to ask an advice about how to proceed or where to start. </DIV>

<DIV >š</DIV>
<DIV >Looking at examples, it looks like that the DriverManipulator could be very useful for my goal,šbecause it already lets me move the head to the left and to the right butšI cannot just move the head up and down, so I think it would be a good idea to start from that manipulator.</DIV>

<DIV >š</DIV>
<DIV >Is still a better way to do it? </DIV>
<DIV >š</DIV>
<DIV >Anyway, if I have to implement a new manipulator, what should I know about them? How do manipulators work in general? </DIV>
<DIV >š</DIV>
<DIV >Thank you.</DIV>
<DIV >Alessandro</DIV></DIV>
</BLOCKQUOTE><br /><br />-- <br />φΙΪΞΨ ΒΕΪ ΣΠΑΝΑ ΞΑ ρΞΔΕΛΣ.πΟήΤΕ http://mail.yandex.ru/nospam