Jump to content

Weird behavior when rotating in openGL

1 post in this topic

Recommended Posts

.... I hate radians. I hate degrees too. why cant we just use one system? Do you know how much trouble it causes me that there are 2 systems?





The sin() and cos() functions needed radians, i gave them degrees. ie undefined behavior.

so nevermind on this whole post.





ok so pretty much i have been staring at this forever and i dont know what is wrong. I am using objective-C (with some C++, but not here) to write openGL apps. Currently, I have a wine glass type of object that can rotate around the Y axis (the global one, but the object is at the origin) when you press < or >. Then, y and h rotate it around the X axis (the global X, assuming the the oject is at the origin.


I'm using XCode 2.4.1

/* important variables:
       camz is how far away the object is drawn from the camera
       rotx is its orientation around the y axis (its rotation on the horizontal plane)
       rotz is its orientation around the X. */

// this resets everything, then rotates and translates to the orientation/position i want it drawn at
- (void) loadIdentity 
glTranslatef(-camx, -camy, -camz);

glRotatef(rotx, 0, 1, 0);

glRotatef(rotz, cos(rotx), 0, sin(rotx));


* Called when the system thinks we need to draw.
- (void) drawRect:(NSRect)rect
// Clear the screen and depth buffer

[self loadIdentity];

	glCallList(tube); //tube is the oject i am drawing

[ [ self openGLContext ] flushBuffer ];

/* *****************************
   these next functions handle key presses, ie when
   i hit a key, these get called accordingly
******************************** */

//rotates around Y (up-down) axis
- (void) moveItLeft:(BOOL)left
if (left) {
	rotx += 5;
} else {
	rotx -= 5;


//moves the object closer and farther away
- (void) moveItUp:(BOOL)up
if (up) {

	camz -= .2;
} else {
	camz += .2;


//this actually rotates around the X axis, but i was too lazy to make it right
- (void) rotateAroundZAxis:(BOOL)up
if (up) {
	rotz += 5;
} else {
	rotz -= 5;



so here is the problem. It starts up and displays the object fine. When i spin it horizontally, its fine. 5 degree jumps, all good. when i then rotate it around the X axis, its all good. However, when i try to rotate it around the Y axis after rotating it around the X, it rotates to random orientations in huge jumps.


if that made any sense, i would gladly appreciate your help.

Link to comment
Share on other sites


  • Create New...