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]