gpt4 book ai didi

c++ - OpenGL glTranslatef 无法正常工作

转载 作者:行者123 更新时间:2023-11-28 03:33:04 24 4
gpt4 key购买 nike

所以我决定用 C++ 和 SDL 和 OpenGL 制作一个 3D 星星之类的东西。我创建了一个包含 x、y 和 z 值的 Point 类。我创建了一个点数组并用随机坐标填充它。这似乎可行,但是当我执行 glTranslatef(0,0,0.1f) 或类似操作时,星星并没有靠近,它们就消失了。

//OpenGL Initialization Code
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(30.0f,640.0/480.0,0.3f,500.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glEnable(GL_DEPTH_TEST);

//Random point generation
for(int i = 0; i < 200000; i++)
{
float randomX = (float)rand()/((float)RAND_MAX/100.0f) - 50.0f;
float randomY = (float)rand()/((float)RAND_MAX/20) - 10.0f;
float randomZ = (float)rand()/((float)RAND_MAX/20) - 20.0f;
points[i] = Point(randomX, randomY,randomZ);
}

//Render
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBegin(GL_POINTS);
for(int i = 0; i < 200000; i++)
{
glVertex3f(points[i]._x, points[i]._y, points[i]._z);
}
glEnd();
glTranslatef(0,0,0.1f);
SDL_GL_SwapBuffers();
SDL_Flip(screen);

我做错了什么?

最佳答案

该代码是您的渲染函数吗?

如果是,那么您应该将点生成移动到别处,以便它们只生成一次。

如果不是,则应将初始化代码移至渲染函数的开头。每帧都应清除矩阵。

如果这不起作用:

尝试暂时禁用深度测试。如果它们没有消失并且您看到线条,则需要调整视锥体。尝试使用 gluLookAt

此外,尝试在负 z 轴上平移它们。如果我没记错的话,在 opengl 中,对象空间坐标随着 z 的减小而远离。 (0比-1更接近)

关于c++ - OpenGL glTranslatef 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11979086/

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