Archived

This topic is now archived and is closed to further replies.

Bucket_Head

Got a problem with objects in 3D world...

Recommended Posts

Alright, so far, I have three game objects: The world, (terrain) the camera, and a ship (floating triangle). I had gotten the terrain working just fine, and I can spend all day flying around my little world. However, when I try to show a third object, which most everything else in the game(s) I intend to make would be, things don''t show up in the right place. I commented out the code for rotating the object according to its roll pitch and yaw, and the object showed up fine EXCEPT for that, so I know the problem is in the rotation, not the translation. See, when rotation is activated, things get screwy...I think I am doing matrix operations out of order or something. This is what I have got, in pseudo code... push_matrix Rotate (croll, cpitch, cyaw) Translate(-camx, -camy, -camz) render_scene() push_matrix translate(camx, camy, camz) rotate(oroll, opitch, oyaw) //line A translate(ox, oy, oz) translate(-camx, -camy, -camz) render_object() pop_matrix pop_matrix What am I doing wrong? Once again, when I comment out line A, things are translated fine, but not rotated (triangle always facing north) but when I uncomment it, things are...strange. Please help, thank you for your time. - Hai, watashi no chichi no kuruma ga oishii deshita! ...or, in other words, "Yes, my dad's car was deliscious!"

Share this post


Link to post
Share on other sites
Argh...well, thanks, heh...I''m currently taking my second semester of Japanese, it''s pretty nifty.

Anyways, I rewrote some of the code (not deleting the old code, however) and what I have NOW is something like this...

push_matrix
Rotate (croll, cpitch, cyaw)
Translate(-camx, -camy, -camz)
render_scene()
pop_matrix

push_matrix
Rotate (croll, cpitch, cyaw)
Translate(objx-camx, objy-camy, objz-camz)
render_object()

...Once again, this is working perfectly translating-wise, but the object is not being rotated. When I try to put in code to rotate it, it gets funky. I''ve tried a number of different things, and I haven''t gotten anything to work yet. Please help me! Thank you for your time.

- Hai, watashi no chichi no kuruma ga oishii deshita!
...or, in other words, "Yes, my dad's car was deliscious!"

Share this post


Link to post
Share on other sites
Howdy Bucket_Head,

I think I have an idea why everything is screwy... you seem to be pushing and popping matrices in the wrong places.

What you should be doing when rendering a frame (in logical steps) is 1) apply the viewing transformation, 2) then, for each object in your scene, save the viewing matrix, apply transformations and draw, then restore the viewing matrix...
(well, at least this is how I do it, and it works )

so try this:

glPushMatrix()


// APPLY VIEWING TRANSFORMATION (ie camera)
//do your rotations around each axis. NOTE: i have found order does matter(maybe its just me?)
glRotate(...)
glRotate(...)
glRotate(...)
glTranslate(...)


//NOW DRAW YOUR OBJECTS
glPushMatrix() //save matrix state
render_terrain()
glPopMatrix() //restore matrix state


glPushMatrix() //save matrix state
glRotate(...) //do object rotations
glTranslate(...) //do object translation
render_object()
glPopMatrix() //restore matrix state


glPopMatrix()


Hope that is helpful.
thankyoubye


-------------
squirrels are a remarkable source of protein...

Edited by - Bad Monkey on 4/3/00 7:19:15 PM

Share this post


Link to post
Share on other sites
Guest Anonymous Poster
Your mistake is a rather simple one that can make things seem completely messed up: You need to translate first, then rotate. If you have already tried this and it still doesn''t work then I don''t know what''s going on (beyond what others have already mentioned).

AirMouse

Share this post


Link to post
Share on other sites