Seems ok. Personally though I'm wondering why you're doing this. If I
walk on a slope I will still try to stand straigth up. I don't think
it is realistic for a human character to follow the slope like that.

Greetings,

On 2/15/07, Quentin Anciaux <[EMAIL PROTECTED]> wrote:
> Hello,
>
> ok seems like doing this:
>
>                 iMovable movable = this.hulk.GetMovable();
>                 csReversibleTransform transform = movable.GetTransform();
>                 csVector3 newPos = transform.GetOrigin().add(
>                                 transform.GetFront().multiply(-elapsed_second 
> * speed));
>                 csHitBeamResult hbr = meshTerrain.HitBeam(
>                                 new 
> csVector3(newPos.getX(),-100,newPos.getZ()),
>                                 new csVector3(newPos.getX(),100,newPos.getZ())
>                 );
>                 newPos = hbr.getIsect();
>                 csHitBeamResult v1 = meshTerrain.HitBeam(
>                                 new 
> csVector3(newPos.getX(),-100,newPos.getZ()+0.1f),
>                                 new 
> csVector3(newPos.getX(),100,newPos.getZ()+0.1f));
>                 csHitBeamResult v2 = meshTerrain.HitBeam(
>                                 new 
> csVector3(newPos.getX()-0.1f,-100,newPos.getZ()-0.1f),
>                                 new 
> csVector3(newPos.getX()-0.1f,100,newPos.getZ()-0.1f));
>                 csHitBeamResult v3 = meshTerrain.HitBeam(
>                                 new 
> csVector3(newPos.getX()+0.1f,-100,newPos.getZ()-0.1f),
>                                 new 
> csVector3(newPos.getX()+0.1f,100,newPos.getZ()-0.1f));
>                 csPlane3 plane = new csPlane3(
>                                 v1.getIsect(),
>                                 v2.getIsect(),
>                                 v3.getIsect()
>                 );
>                 csVector3 norm = plane.Normal();
>                 norm.Normalize();
>                 if (norm.getY() < 0.0f) {
>                         norm = norm.multiply(-1.0f);
>                 }
>                 float ax = (float)-(Math.PI/2-Math.acos(norm.multiply(new 
> csVector3
>                 (0,0,1))));
>                 float az = (float)(Math.PI/2-Math.acos(norm.multiply(new 
> csVector3
>                 (1,0,0))));
>                 movable.SetTransform(new csOrthoTransform(
>                                 new csYRotMatrix3(this.hulkRotY)
>                                 .multiply(new csXRotMatrix3(ax))
>                                 .multiply(new csZRotMatrix3(az))
>                                 ,newPos));
>                 movable.UpdateMove();
>
> yield the correct result...
> http://www.allcolor.org/terrain-character-pos2.png
>
> Is this correct ?
>
> Thanks,
> Quentin Anciaux
>
> On Thursday 15 February 2007 10:54:44 Quentin Anciaux wrote:
> > Hi, I tried...
> >
> > But I don't have the result I wish... see
> > http://www.allcolor.org/terrain-character-pos.png
> >
> > To arrive at this, I first hitbeam the character position with the terrain
> > to find the elevation.
> > Then I do three hitbeams near the character to form a plane and get the
> > normal, then I compute the angle with the X and Z axis... but this is not
> > correct.... someone could help me ?
> >
> > I used the following code to position the character (please not this is in
> > java).
> >
> >               iMeshWrapper meshTerrain =
> > this.app.getEngine().FindMeshObject("Terrain");
> > CDebug.assertNotNull(meshTerrain);
> >               iMovable movable = this.hulk.GetMovable();
> >               csReversibleTransform transform = movable.GetTransform();
> >               csVector3 newPos = transform.GetOrigin().add(
> >                               transform.GetFront().multiply(-elapsed_second 
> > * speed));
> >               csHitBeamResult hbr = meshTerrain.HitBeam(
> >                               new 
> > csVector3(newPos.getX(),-100,newPos.getZ()),
> >                               new csVector3(newPos.getX(),100,newPos.getZ())
> >               );
> >               newPos = hbr.getIsect();
> >               csHitBeamResult v1 = meshTerrain.HitBeam(
> >                               new 
> > csVector3(newPos.getX()+0.1f,-100,newPos.getZ()),
> >                               new 
> > csVector3(newPos.getX()+0.1f,100,newPos.getZ()));
> >               csHitBeamResult v2 = meshTerrain.HitBeam(
> >                               new 
> > csVector3(newPos.getX()-0.1f,-100,newPos.getZ()),
> >                               new 
> > csVector3(newPos.getX()-0.1f,100,newPos.getZ()));
> >               csHitBeamResult v3 = meshTerrain.HitBeam(
> >                               new 
> > csVector3(newPos.getX()+0.1f,-100,newPos.getZ()+0.1f),
> >                               new 
> > csVector3(newPos.getX()+0.1f,100,newPos.getZ()+0.1f));
> >               csPlane3 plane = new csPlane3(
> >                               v1.getIsect(),
> >                               v2.getIsect(),
> >                               v3.getIsect()
> >               );
> >               csVector3 norm = plane.Normal();
> >               norm.Normalize();
> >               if (norm.getY() < 0.0f) {
> >                       norm = norm.multiply(-1.0f);
> >               }
> >               movable.SetTransform(new csOrthoTransform(
> >                               new csYRotMatrix3(this.hulkRotY).multiply(
> >                                               new csZRotMatrix3( (float) 
> > (Math.PI/2-Math.acos(norm.multiply(new
> > csVector3(0,0,1)))) ).multiply(
> >                                                               new 
> > csXRotMatrix3( (float) (Math.PI/2-Math.acos(norm.multiply(new
> > csVector3(1,0,0)))) )
> >                                               )
> >                               )
> >                               ,newPos));
> >               movable.UpdateMove();
> >
> > and I used the following code to position the camera:
> >
> > csReversibleTransform spriteTransform = this.hulk.GetMovable()
> >                               .GetTransform();
> >               csReversibleTransform cameraTransform = camera.GetTransform();
> >               csVector3 cameraOrigin = spriteTransform.GetOrigin().add(new 
> > csVector3
> > (0,2,-8));
> >               cameraTransform.SetOrigin(cameraOrigin);
> >               csVector3 lookAt =
> > cameraOrigin.subtract(spriteTransform.GetOrigin()).multiply(-1.0f);
> >               cameraTransform.LookAt(lookAt,this.cameraOrientation);
> >
> >
> > Quentin Anciaux
> >
> > On Thursday 15 February 2007 00:49:18 Andrew Robberts wrote:
> > > csReversibleTransform has a LookAt function that will compute a look-at
> > > transform.
> > >
> > > So, you can use this to compute a transform that will "look" towards the
> > > normal of the terrain.  You can do this by doing the following:
> > >
> > > csReversibleTransform rt;
> > > rt.LookAt(terrainNormal, csVector3(0,1,0));
> > > csMatrix3 mat = rt.GetT2O();
> > > meshWrapper->GetMovable()->SetTransform(mat);
> > >
> > > This should orient your mesh so that some part of it is facing down the
> > > terrain, but it probably won't be the correct part.  I can't remember off
> > > the top of my head which way the lookat will orient, but you can fix this
> > > with a bit of trial and error.  What you'll have to do is rotate your
> > > character and then apply the lookat transform.
> > >
> > > For example, if your character's back faces the direction you want its
> > > front to face then you can change line 3 to:
> > >
> > > csMatrix3 mat = rt.GetT2O() * csYRotMatrix3(3.14f);
> > >
> > > 3.14f is a half-turn rotation.
> > >
> > > If your character isn't even standing upright, then you'll probably have
> > > to apply a rotation around the X axis:
> > >
> > > csMatrix3 mat = rt.GetT2O() * csXRotMatrix3(3.14f * 0.5f); // half of
> > > 3.14fis a quarter turn
> > >
> > > If neither is sufficient then you might have to combine the two in some
> > > way:
> > >
> > > csMatrix3 mat = rt.GetT2O() * csYRotMatrix3(3.14f) * csXRotMatrix3(3.14f
> > > * 0.5f);
> > >
> > > or something similar.  If you play around with it then you should get a
> > > feel for transforming your character and manage to get him facing the
> > > right way.
> > >
> > > --
> > > Andrew Robberts
> > >
> > > On 2/14/07, Quentin Anciaux <[EMAIL PROTECTED]> wrote:
> > > > Hi,
> > > >
> > > > I've another question now that I know how to find the elevation. I
> > > > would like
> > > > the character displayed on the surface not only to be shown at the
> > > > correct elevation but also to "rotate" according to the vector
> > > > perpendicular (normal ?) from the terrain... How can I do ?
> > > >
> > > > Thank you very much, any help is appreciated.
> > > >
> > > > Quentin Anciaux
> > > >
> > > > -----------------------------------------------------------------------
> > > >-- 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=DEVD
> > > >EV _______________________________________________
> > > > Crystal-main mailing list
> > > > Crystal-main@lists.sourceforge.net
> > > > https://lists.sourceforge.net/lists/listinfo/crystal-main
> > > > Unsubscribe: mailto:[EMAIL PROTECTED]
> > > > ?subject=unsubscribe
> >
> > -------------------------------------------------------------------------
> > 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
> > _______________________________________________
> > Crystal-main mailing list
> > Crystal-main@lists.sourceforge.net
> > https://lists.sourceforge.net/lists/listinfo/crystal-main
> > Unsubscribe:
> > mailto:[EMAIL PROTECTED]
>
>
>
> -------------------------------------------------------------------------
> 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
> _______________________________________________
> Crystal-main mailing list
> Crystal-main@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/crystal-main
> Unsubscribe: mailto:[EMAIL PROTECTED]
>


-- 
Project Manager of Crystal Space (http://www.crystalspace3d.org)
and CEL (http://cel.crystalspace3d.org)
Support Crystal Space. Donate at
https://sourceforge.net/donate/index.php?group_id=649

-------------------------------------------------------------------------
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
_______________________________________________
Crystal-main mailing list
Crystal-main@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/crystal-main
Unsubscribe: mailto:[EMAIL PROTECTED]

Reply via email to