0
這是我的魔方。一旦創建,它具有在任-2,-1,0,1,或2隨機翻譯在GLUT變壞
void cube(void)
{
srand (time(0));
int cube_posX;
int lowv = -2;
int highv = 2;
cube_posX = rand() % (highv - lowv + 1) + lowv;
glTranslatef(cube_posX, 0.0, cube_angle);
glRotatef(cube_angle, 90.0, 0.0, 1.0);
glutSolidCube(0.25);
}
隨機x位置,這是我怎麼移動立方體緩緩前行
void MOVE_CUBE(int value)
{
cube_posZ = cube_posZ - 0.01;
glutPostRedisplay();
glutTimerFunc(25, MOVE_CUBE, 0);
}
最後將它們放在顯示:
void init(void)
{
glEnable(GL_DEPTH_TEST);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
}
float cam_eyeX = 0.0, cam_eyeY = 1.5, cam_eyeZ = 5.0;
float cam_centerX = 0.0, cam_centerY = 0.0, cam_centerZ = 0.0;
void display(void)
{
glClearColor(1.0,1.0,1.0,1.0); //to add background color (white)
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
gluLookAt(cam_eyeX, cam_eyeY, cam_eyeZ, cam_centerX, cam_centerY, cam_centerZ, 0.0, 1.0, 0.0); //camera! (cam position X, cam position Y, cam position Z, cam target X, cam target Y, cam target Z, up position X, up position Y, up position Z)
cube();
glutSwapBuffers();
angle += 0.05; //to affect the glRotate function
glFlush();
}
void reshape(int w, int h)
{
glViewport (0, 0, (GLsizei)w, (GLsizei)h);
glMatrixMode (GL_PROJECTION);
glLoadIdentity();
gluPerspective (60, (GLfloat)w/(GLfloat)h, 1.0, 100.0);
glMatrixMode (GL_MODELVIEW);
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH); // Set up display buffer
glutInitWindowSize(750, 500); //window's size
glutInitWindowPosition(100, 100); //window's position
glutCreateWindow("Hendra Ganteng!"); //window's title
init();
glutDisplayFunc(display);
glutIdleFunc (display);
glutReshapeFunc(reshape);
glutKeyboardFunc(keyboard_Handler);
MOVE_CUBE(0);
glutMainLoop();
return 0;
}
但是,當我看到它的行動,立方體向前移動完美無缺,但不斷變化到那些5種可能性x位置(-2,-1,0,1,2)每0.5到1秒。如果我禁用srand(time(0)),立方體會迅速改變它的x位置。我只是想讓它停留在1個位置,然後我可以在不同的x位置調用更多的立方體。有人可以請我的代碼好嗎?
我似乎有一種「預生成」問題的立方體,我不明白其中部分用於循環屬於。我在上面的源代碼中將void代碼複製並粘貼到函數void display(void)中,結果是立方體仍在迅速切換x位置。我不是編程專家,因爲我希望更簡單的解釋。謝謝! –
當我們談論生成,特別是「預生成」時,我們的意思是在剩下的任何代碼之前做一次*。這意味着,*不要*在你的'display'函數中生成。整個過程就是你在一個隨機位置創建一個立方體*,然後更新並顯示多次。 – paddy
您需要將'Cube'實例傳遞給函數!我編輯了我的答案,試圖明確你應該如何使用代碼。 – paddy