gpt4 book ai didi

c++ - 当我使用 glutIdleFunc 尝试将立方体放在不同的 x 轴上时,3d 立方体在 x 轴上跳跃

转载 作者:行者123 更新时间:2023-11-28 00:40:03 25 4
gpt4 key购买 nike

我正在使用 rand() 函数将我的立方体放置在屏幕上的不同位置。原因是我必须在屏幕上放置随机数量的立方体,我不希望它们都从同一个位置开始。发生的事情是,当我运行程序时,由于 glutPostRedisplay() 我需要在其中旋转立方体,立方体会在整个屏幕上跳跃。我的问题是,例如,当所有旋转时,我怎么能有 7 个立方体从屏幕上的 7 个不同点开始?我最终需要它们从屏幕上沿 z 轴的起始点移动,然后从头开始整个过程​​吗?

这是我的代码:

/* -- GLOBAL VARIABLES --------------------------------------------------------------------------    --------------- */

GLint screenWidth = 500;
GLint screenHeight = 500;
GLfloat cubeX = 0.0;
GLfloat cubeY = 5.0;
GLfloat cubeZ = -20.0;
GLfloat rotateY = 0.0;
//GLfloat rotCube = 0.0;
GLint cubeCount = 0;
//const GLint CUBE_LOW = 7;
//const GLint CUBE_HIGH = 15;
const GLint CUBE_HIGH = 15;
const GLint CUBE_LOW = 7;
const GLfloat X_HIGH = 10.0;
const GLfloat X_LOW = -10.0;
const GLfloat Y_HIGH = 10.0;
const GLfloat Y_LOW = -10.0;

/* -- NAMESPACE --------------------------------------------------------------------------------- --------------- */

using namespace std;

/* ---------------------------------------------------------------------------------------------- -------------- */
/*
Function: unsigned time_seed()
*/

unsigned time_seed()
{
time_t now = time (0);
unsigned char *p = (unsigned char *)&now;
unsigned seed = 0;
size_t i;

for(i = 0; i < sizeof now; i++)
seed = seed * (UCHAR_MAX + 2U) + p[i];

return seed;
}

/* ---------------------------------------------------------------------------------------------- --------------- */
/*
Function: void rotateCube()
*/

void rotateCube()
{
rotateY += 0.050f;
if(rotateY > 360.0f)
rotateY -= 360.0f;
glutPostRedisplay();
}

/* ---------------------------------------------------------------------------------------------- --------------- */
/*
Function: void myDisplay()
*/

void myDisplay()
{
cubeCount = CUBE_LOW + rand() / RAND_MAX * (CUBE_HIGH - CUBE_LOW);
float cubeX = X_LOW + (float)rand() / (float)RAND_MAX * (X_HIGH - X_LOW);
float cubeY = Y_LOW + (float)rand() / (float)RAND_MAX * (Y_HIGH - Y_LOW);

for(int i = 0; i < cubeCount; i++)
{
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
glTranslatef(cubeX, cubeY, cubeZ);
glRotatef(rotateY, 0.0f, 1.0f, 0.0f);

glutWireCube(2.0f);
glutSwapBuffers();
glFlush();


}
}

/* ---------------------------------------------------------------------------------------------- --------------- */
/*
Function: int main( int argc, char **argv )
*/

void myReshape(int width, int height)
{
glViewport(0, 0, (GLsizei)width, (GLsizei)height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60, (GLfloat)width / (GLfloat)height, 1.0, 100);
glMatrixMode(GL_MODELVIEW);
}
/* ---------------------------------------------------------------------------------------------- --------------- */
/*
Function: int main( int argc, char **argv )
*/

int main( int argc, char **argv )
{
srand(time_seed());
glutInit( &argc, argv );
glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE);
glutInitWindowSize(screenWidth, screenHeight);
glutInitWindowPosition(100, 40);
glutCreateWindow("Boxes!");
glutDisplayFunc(myDisplay);
glutIdleFunc(rotateCube);
glutReshapeFunc(myReshape);
glutMainLoop();

return 0;
}

最佳答案

您的立方体似乎使用相同的坐标,因为您在循环之前设置了 cubeX 和 cubeY。您可以在迭代所有立方体的 for 循环内设置坐标,以确保所有立方体都有不同的坐标。此外,您可能不应该在循环内执行 glClear() (在循环外执行),除非您只想在 7 个不同位置绘制一个立方体。 glClear() 将清除整个屏幕。

关于c++ - 当我使用 glutIdleFunc 尝试将立方体放在不同的 x 轴上时,3d 立方体在 x 轴上跳跃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19329506/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com