PDA

View Full Version : 3Rd person character problems.



ManOfSpace
05-20-2004, 10:46 AM
Hey,

I've got the camera working like first person camera should. i.e up to look up, left,right to turn left or right properly.

But whenever I add a character to the scene, I can't get it to rotate in the same way. I.e if I rotate the character as I do the camera, it pitches in the same direction no matter which way the model is facing. which means as soon as I turn the character, I can't look up and down because he then rotates side ways...

The code I use to set the scene up for each entity is this.


for each model

glLoadIdentity()
glRotatef(cameraPitch,1,0,0)
glRotatef(cameraYaw,0,1,0)
glRotatef(cameraRoll,0,0,1)

glTranslatef cameraX-modelX,cameraY-modelY,cameraZ-modelZ

glRotatef(ModelPitch,1,0,0)
glRotatef(ModelYaw,0,1,0)
glRotatef(ModelRoll,0,0,1)

RenderMesh(Model)
}the result is although I can fly through the level (A single mesh) fine, I can't get any sort of control on the character model.
I place the camera behind the character model every frame(Taking into account yaw etc)

and basically do this,

modelPitch=ModelPitch+mouseYSpeed()
modelYaw=ModelYaw+MouseXSpeed()

Any help would be great..my engine is almost complete, I only noticed this while doing a little test game(Why I can't post all the code..it's alot)

plasmonster
05-20-2004, 04:19 PM
Try something like this




// put camera at top of stack
// only need to calculate this once
glLoadIdentity();
glRotatef( -cameraRoll,0,0,1 );
glRotatef( -cameraPitch,1,0,0 );
glRotatef( -cameraYaw,0,1,0 );
glTranslatef( -cameraX,-cameraY,-cameraZ );

for each model

// push camera
glPushMatrix();

// translate model into world *last*
glTranslatef( modelX, modelY, modelZ );

// rotate at origin *first*
glRotatef(ModelRoll,0,0,1)
glRotatef(ModelPitch,1,0,0)
glRotatef(ModelYaw,0,1,0)

// render
RenderMesh(Model)

// pop back to camera
glPopMatrix();
I may be mistaken in my interpretation of your problem, but I had difficult understanding your pseudo code.