Michael Boccara (boccara++at++MIT.EDU)
Thu, 25 Jun 1998 18:17:44 -0700
Mike
Michael Boccara wrote:
>
> Ballard Andrews; (4/28/98) wrote:
> >
> > The eyepoint is preserved in perfly when switching to trackball
> > from fly mode, but not the other way around. How do you fix this
> > so that the viewMat is also preserved when switching from trackball
> > to fly - is this possible?
> >
> > b. andrews
> > =======================================================================
> > List Archives, FAQ, FTP: http://www.sgi.com/Technology/Performer/
> > Submissions: info-performer++at++sgi.com
> > Admin. requests: info-performer-request++at++sgi.com
>
> You have to modify the bug in void pfiTDFXformer::selectModel(int)
>
> Make your own class :
>
> class myTDFXformer :: public pfiTDFXformer
> {
> public:
> virtual void selectModel(int _which);
> };
>
> void
> myTDFXformer::selectModel(int _which)
> {
> float n, f;
> if (xCurModelIndex == _which)
> return;
>
> if (_which > xModelList->getNum())
> {
> pfNotify(PFNFY_WARN, PFNFY_RESOURCE,
> "pfiTDFSelectXformerModel - index %d is more than number of models (%d)",
> _which, xModelList->getNum());
> return;
> }
>
> stop();
>
> // The Xformer transfers position changes between motion models.
> // The trackball is special because its matrix edits to the
> // scene DCS matrix must now
> // be applied in reverse to the current position.
>
> if (xCurModelIndex == PFITDF_TRACKBALL)
> {
>
> //#################################################
> // Here is the bug :
> /*
> pfMatrix mat;
> pfVec3 trans;
>
> xIx->getMat(mat);
> pfGetMatRowVec3(mat, 3, trans);
> PFSUB_VEC3(xMotionCoord.pos.xyz, xMotionCoord.pos.xyz, trans);
> // XXX compute new HPR based on rotations !!!
> xMotionCoord.makeMat();
> */
> //###################################################
> // You have to invert all the Trackball matrix
>
> pfMatrix TBmat;
> xIx->getMat(TBmat);
> TBmat.invertOrthoN(TBmat);
> xMotionCoord.setMat(xMotionCoord.mat * TBmat);
> xIx->setMat(pfIdentMat);
> if (xPosDCS)
> pfDCSMat(xPosDCS, pfIdentMat);
> //###############################
> // End of bug correction
>
> }
> xCurModelIndex = _which;
> xIx = (pfiInputXform *) xModelList->get(xCurModelIndex);
> /* init new model with position of old model */
> xIx->setCoord(&(xMotionCoord.pos));
> /* update current position motion parameters to match motion model */
> xIx->getMotionCoord(&(xMotionCoord));
>
> /* update collider with new model */
> xCollide->setCurMotionParams(&xMotionCoord.pos, &xMotionCoord.prevPos,
> xMotionCoord.speed);
> pfGetChanNearFar(xInputChan, &n, &f);
>
> if (xIx->isOfType(pfiInputXformTrackball::getClassType()))
> {
> xCollide->setMode(PFIC_RESPONSE, PFIC_RESPONSE_NONE);
> setCollision(PFUCOLLIDE_GROUND, 0.0f, NULL);
> setCollision(PFUCOLLIDE_OBJECT, 0.0f, NULL);
> }
> else if (xIx->isOfType(pfiInputXformDrive::getClassType()))
> {
> float dh = ((pfiInputXformDrive *)xIx)->getDriveHeight();
> xCollide->setMode(PFIC_RESPONSE, PFIC_RESPONSE_STOP);
> setCollision(PFUCOLLIDE_GROUND, dh, xNode);
> setCollision(PFUCOLLIDE_OBJECT, n * 2.0f, xNode);
> }
> else if (xIx->isOfType(pfiInputXformFly::getClassType()))
> {
> xCollide->setMode(PFIC_RESPONSE, PFIC_RESPONSE_BOUNCE);
> /* Do not terrain follow */
> setCollision(PFUCOLLIDE_GROUND, 0.0f, xNode);
> setCollision(PFUCOLLIDE_OBJECT, n * 2.0f, xNode);
> }
>
> }
>
> --
> ___________________________________________________________________
> Michael Boccara Massachussets Institute of Technology
> Research Laboratory of Electronics
> (617) 253 0005 Virtual Environment Technologies for Training
--
___________________________________________________________________
Michael Boccara Massachussets Institute of Technology
Research Laboratory of Electronics
(617) 253 0005 Virtual Environment Technologies for Training
=======================================================================
List Archives, FAQ, FTP: http://www.sgi.com/Technology/Performer/
Submissions: info-performer++at++sgi.com
Admin. requests: info-performer-request++at++sgi.com
This archive was generated by hypermail 2.0b2 on Mon Aug 10 1998 - 17:57:35 PDT