Please help - Stopping cubes and Speed

Started by
4 comments, last by Ys 22 years, 5 months ago
q1)Im learning opengl and decided to have a go with cubes (eg spinning etc..) ive made them move about the screen and stuff but how can i make them stop, q2) Ive tried my opengl applications on different machines and the speed is dramitcally altered (i.e very slow or fast) i know this is because of the ability of different graphics cards, but how can i make it run at the speed i want no matter what the graphics card its using. Thanks Chris
Im not fat just big boned :)
Advertisement
To stop cubes, you have to implement Hunter class. Now there are two methods for the Hunter to catch a Cube, first it can try to project itself into barycentre of the Cube in 5th dimension, thats where the Cubes are most vulnerable. But if cube manages to extrapolate its volume outside of its own convex hull, this method is not gonna work. Another method involves the Hunter to traverse octree to the highest leaf, and trying to tetrahedralize the cube from there via raycasting.

(J/K)
Hahaha lol. Yeah that could work, or you could try the simpler (but crude) approach: blow it to bits with a rocket launcher.
Dirk =[Scarab]= Gerrits
I wouldn't normally reply to this but Scarab & no way are twisting your mind. I don't know alot about OGL but here are the two things you need to do:

1) Stopping your cubes from spinning:
Somewhere in your source is the code to spin your cubes. (at a guess its a call to glRotate() or something). Setup a variable some thing like this:

bool CubeSpinning = true;

then where ever you catch a key press change the state of the variable. eg:
case 'VK_S':	if (CubeSpinning) {		CubeSpinning = false;	} else {		CubeSpinning = true;	}  


then change you code for rotating your cube which looks something like this:

glRotate(...);

to take note of the variable CubeSpinning:

if (CubeSpinning) glRotate(...);


2) Making them spin at the same speed on different machines:
The way you do this is by taking the time since you last rotated and multipling it by a constant then rotating you cube by that amount.

You can do this by adding the following code above your rotate code.

static DWORD lastTickCount, thisTickCount;thisTickCount = GetTickCount();DWORD timeTaken = thisTickCount - lastTickCount;lastTickCount = thisTickCount;glRotate(timeTaken*0.1f, <+whatever params the fuction takes>); // Change you rotate line  


The function Rotate is what ever call rotates the cube and the 0.1f it the number of whatever units you are using (Degrees or Radians) to rotate the cube every millisecond.

Hope that makes sense and is what you are looking for
Good luck
X2K

Edited by - xstreme2000 on October 22, 2001 10:57:19 AM

Edited by - xstreme2000 on October 22, 2001 10:59:47 AM
quote:I wouldn''t normally reply to this but Scarab & no way are twisting your mind.

Couldn''t resist.

Anyway, as xstreme2000 is saying you need some variable to keep track of whether you should spin the cube or not. It would certainly help to see your code in answering this one though. Personally, if I had a spinning cude, I''d probably have some variables like cubeAngle and cubeRotation. Then every frame use: cubeAngle += cubeRotation;
glRotate(cubeAngle, ....);

Then you can certain keypresses change the cubeRotation variable. A value of 0 would make it stop rotating, a negative value would make it spin clockwise and a positive value would make it spin counter-clockwise.

As on your second question, I agree with xstreme2000 except that you should initialize lastTickCount somewhere otherwise your program could crash. (Notice the COULD, it might also work perfectly.)

Cheers.
Dirk =[Scarab]= Gerrits
no way you are a real twat
Im not fat just big boned :)

This topic is closed to new replies.

Advertisement