OpenGl 缩放 + 翻译不工作

OpenGl scale + translate not working

我在 Opengl (Glut) 中遇到以下问题。我已经使用 gluLookAt 将相机位置设置为 (posx,posy,posz),并且我需要在位置 (posx+offsetx,posy+offsety,posz+offsetz) 中显示一个缩放的立方体。我正在执行以下操作:

glPushMatrix(); 
glColor3f(0.6f,0.6f,0.6f);
glTranslatef( posx+offsetx, posy+offsety, posz+offsetz );
glScalef(20,20,60);
glutSolidCube(1.0);
glPopMatrix(); 

但是立方体没有出现在正确的位置。我也通过改变 glScalef 和 glTranslatef 的顺序来尝试这个(我在类似的问题中读到过)。但是也没用。

一些事情 - 您是否通过 glMatrixMode 在模式之间切换?

是否在切换后调用 glLoadIdentity()?

我假设您正在清除每次渲染的深度(如果启用)和颜色缓冲区?

我个人不倾向于 push/pop 矩阵,除非我正在调用第三方并且我想保持当前状态...但没有造成伤害。

gluLookAt 实际上只是一个转换本身,因此它可能不会按照您的预期进行。我假设您有一个如下所示的渲染函数:

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(posx, posy, posz, // where the eye is located
        0.0, 0.0, 0.0, // where the eye is looking
        0.0, 1.0, 0.0); // which direction is "up"

glMatrixMode(GL_PROJECTION);
glLoadIdentity();

glPushMatrix(); 
glColor3f(0.6f,0.6f,0.6f);
glTranslatef( posx+offsetx, posy+offsety, posz+offsetz );
glScalef(20,20,60);
glutSolidCube(1.0);
glPopMatrix();

glutSwapBuffers();

你开始使用这样的东西:

glutInit(&argc, argv);                                    
glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE|GLUT_DEPTH );
glutInitWindowSize(600,400);                  
glutCreateWindow("Test");                              
glutDisplayFunc(displayFunctionName);
glutKeyboardFunc(keyboardFunctionName);
glutMainLoop();

这都是使用老式的 OpenGL 直接调用(有时称为固定功能管道)模式,这很好(尤其是刚开始时),但您可能想阅读有关着色器 (GLSL) 以及管道现在如何工作的内容因为这个东西在 2004 年被弃用了。

否则,一个更完整的代码示例(包括您的相机定位代码和值以及屏幕截图和预期结果)可能会有所帮助。