gpt4 book ai didi

c++ - glPushMatrix 停止所有旋转发生

转载 作者:行者123 更新时间:2023-11-30 02:03:43 24 4
gpt4 key购买 nike

我在旋转方面遇到了麻烦。我可以让立方体旋转得很好,但我只希望那个立方体旋转。我知道我必须使用 glPushMatrix() 和 glPopMatrix() 但每次我将这两个包裹在我的绘图周围时,它就会停止旋转。

这是我设置 OpenGL 的方式:

void initOpenGL()
{
//these are the current version of OpenGL
string versions[14] =
{
"GL_VERSION_1_1",
"GL_VERSION_1_2",
"GL_VERSION_1_3",
"GL_VERSION_1_4",
"GL_VERSION_1_5",
"GL_VERSION_2_0",
"GL_VERSION_2_1",
"GL_VERSION_3_0",
"GL_VERSION_3_1",
"GL_VERSION_3_2",
"GL_VERSION_3_3",
"GL_VERSION_4_0",
"GL_VERSION_4_1",
"GL_VERSION_4_2"
};

//Determine which versions are safe to use
cerr << "OpenGL+GLEW Info: " << endl;
for (int i = 0; i < 14; ++i)
{
if (glewIsSupported(versions[i].c_str()))
cerr << versions[i] << " is supported" << endl;
else
cerr << "ERROR: " << versions[i] << " is not supported" << endl;
}
cerr << endl << "Open GL " << glGetString (GL_VERSION) << " is the current OpenGL version" << endl << endl;

glClearColor(0, 0, 0, 0);
//By setting this option, we can explicityly control how the program terminates to ensure proper cleanup
glutSetOption(GLUT_ACTION_ON_WINDOW_CLOSE, GLUT_ACTION_GLUTMAINLOOP_RETURNS);

//setup the camera
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(MIN_X, MAX_X, MIN_Y, MAX_Y, MIN_Z, MAX_Z);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

//enable access to the alpha channel
glEnable (GL_BLEND);
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

... some more code to load textures...
}

这是我的显示功能:

void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glPushMatrix();
glColor3f(1, 0, 0);
glRotatef(angle, 1, 1, 0);
glutSolidCube(30);
glPopMatrix();

glutSwapBuffers();
}

最佳答案

您基本上似乎总是旋转到相同的角度,因为弹出矩阵会将其返回到调用 push 时的状态。您可能想尝试在每次显示调用时稍微增加角度变量(或代码中的其他地方,以便它不断变化)。

它在没有 push 和 pop 的情况下工作的原因是所有矩阵操作都是累积的,并且由于您没有在每一轮加载单位矩阵,所以每次调用 display 函数时最终都会旋转可变角度的值。顺便说一句,这可能是您想要改变的东西,因为将您的世界状态与显示它分开可能是有意义的。

关于c++ - glPushMatrix 停止所有旋转发生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11497837/

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