csharp100

10-13-2013, 08:06 PM

Hi everyone. Love this board! I have almost finished my program except this last thing. I am trying to get my cubes to start in the z plane at different points and fly off the screen. It is like the old "flying windows" screen saver. Right now they all start at a point and move out which is great but they do it uniformly. First some code. This is my display function:

void myDisplay()

{

glClearColor(0.0f, 0.0f, 0.0f, 0.0f);

glClear(GL_COLOR_BUFFER_BIT);

for(int i = 0; i < maxCubes; i++)

{

glLoadIdentity();

glTranslatef(0.0f, 0.0f, -120.0);

glTranslatef(cubeOrigins[i].x, cubeOrigins[i].y, cubeZ);

glRotatef(rotateAxis, cubeOrigins[i].rotateX, cubeOrigins[i].rotateY, 0.0f);

glutWireCube(cubeOrigins[i].size);

}

cubeZ += 0.050f;

glutSwapBuffers();

if (cubeZ > 120.0f)

{

cubeZ -= 100.f;

glClearColor(0.0f, 0.0f, 0.0f, 0.0f);

glClear(GL_COLOR_BUFFER_BIT);

for(int i = 0; i < maxCubes; i++)

{

initRandoms();

glLoadIdentity();

glTranslatef(0.0f, 0.0f, -120.0);

glTranslatef(cubeOrigins[i].x, cubeOrigins[i].y, cubeZ);

glRotatef(rotateAxis, cubeOrigins[i].rotateX, cubeOrigins[i].rotateY, 0.0f);

glutWireCube(cubeOrigins[i].size);

}

cubeZ += 0.050f;

glutSwapBuffers();

}

}

And this is my random function which is taking care of all the randomness:

void initRandoms()

{

maxCubes = rand() % (CUBE_HIGH - CUBE_LOW + 1) + CUBE_LOW;

for (int i = 0; i < maxCubes; i++)

{

cubeOrigins[i].x = X_LOW + (float)rand() / (float)RAND_MAX * (X_HIGH - X_LOW);

cubeOrigins[i].y = Y_LOW + (float)rand() / (float)RAND_MAX * (Y_HIGH - Y_LOW);

//cubeOrigins[i].z = Z_LOW + (float)rand() / (float)RAND_MAX * (Z_HIGH - Z_LOW);

cubeOrigins[i].size = SIZE_LOW + (double)rand() / (double)RAND_MAX * (SIZE_HIGH - SIZE_LOW);

cubeOrigins[i].rotateX = rand() % 2;

cubeOrigins[i].rotateY = rand() % 2;

if (cubeOrigins[i].rotateX == 0 && cubeOrigins[i].rotateY == 0)

{

cubeOrigins[i].rotateX = 1;

}

}

}

I have commented out the line:

//cubeOrigins[i].z = Z_LOW + (float)rand() / (float)RAND_MAX * (Z_HIGH - Z_LOW);

because I know I will need this and this will start my cubes at different z-axis. My range is:

const GLfloat Z_HIGH = 120.0;

const GLfloat Z_LOW = 0.0;

The problem I am having is the movement. As you can see above I have cubeZ which is where the cubes start in the z plane and move out of view than starts over. I really do not know how to get the values of cubeOrgins[I].z into the myDisplay() function. I am hope someone can show me what I need to do the get them started at different points and moving out of the view. As one moves out of view, it needs to start again. I hope someone can help me and I appreciate all the help I can get. Thank You all!

void myDisplay()

{

glClearColor(0.0f, 0.0f, 0.0f, 0.0f);

glClear(GL_COLOR_BUFFER_BIT);

for(int i = 0; i < maxCubes; i++)

{

glLoadIdentity();

glTranslatef(0.0f, 0.0f, -120.0);

glTranslatef(cubeOrigins[i].x, cubeOrigins[i].y, cubeZ);

glRotatef(rotateAxis, cubeOrigins[i].rotateX, cubeOrigins[i].rotateY, 0.0f);

glutWireCube(cubeOrigins[i].size);

}

cubeZ += 0.050f;

glutSwapBuffers();

if (cubeZ > 120.0f)

{

cubeZ -= 100.f;

glClearColor(0.0f, 0.0f, 0.0f, 0.0f);

glClear(GL_COLOR_BUFFER_BIT);

for(int i = 0; i < maxCubes; i++)

{

initRandoms();

glLoadIdentity();

glTranslatef(0.0f, 0.0f, -120.0);

glTranslatef(cubeOrigins[i].x, cubeOrigins[i].y, cubeZ);

glRotatef(rotateAxis, cubeOrigins[i].rotateX, cubeOrigins[i].rotateY, 0.0f);

glutWireCube(cubeOrigins[i].size);

}

cubeZ += 0.050f;

glutSwapBuffers();

}

}

And this is my random function which is taking care of all the randomness:

void initRandoms()

{

maxCubes = rand() % (CUBE_HIGH - CUBE_LOW + 1) + CUBE_LOW;

for (int i = 0; i < maxCubes; i++)

{

cubeOrigins[i].x = X_LOW + (float)rand() / (float)RAND_MAX * (X_HIGH - X_LOW);

cubeOrigins[i].y = Y_LOW + (float)rand() / (float)RAND_MAX * (Y_HIGH - Y_LOW);

//cubeOrigins[i].z = Z_LOW + (float)rand() / (float)RAND_MAX * (Z_HIGH - Z_LOW);

cubeOrigins[i].size = SIZE_LOW + (double)rand() / (double)RAND_MAX * (SIZE_HIGH - SIZE_LOW);

cubeOrigins[i].rotateX = rand() % 2;

cubeOrigins[i].rotateY = rand() % 2;

if (cubeOrigins[i].rotateX == 0 && cubeOrigins[i].rotateY == 0)

{

cubeOrigins[i].rotateX = 1;

}

}

}

I have commented out the line:

//cubeOrigins[i].z = Z_LOW + (float)rand() / (float)RAND_MAX * (Z_HIGH - Z_LOW);

because I know I will need this and this will start my cubes at different z-axis. My range is:

const GLfloat Z_HIGH = 120.0;

const GLfloat Z_LOW = 0.0;

The problem I am having is the movement. As you can see above I have cubeZ which is where the cubes start in the z plane and move out of view than starts over. I really do not know how to get the values of cubeOrgins[I].z into the myDisplay() function. I am hope someone can show me what I need to do the get them started at different points and moving out of the view. As one moves out of view, it needs to start again. I hope someone can help me and I appreciate all the help I can get. Thank You all!