glPushMatrix停止所有旋转
glPushMatrix stops all rotation from happening
本文关键字:旋转 glPushMatrix 更新时间:2023-10-16
我在旋转方面遇到问题。我可以让立方体旋转得很好,但我只想让立方体旋转。我知道我必须使用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时的状态。您可能想尝试在每次显示调用中增加一点角度变量(或者在代码中的其他地方,使其不断变化)。
它在没有推送和弹出的情况下工作的原因是,所有的矩阵运算都是累积的,因为你没有在每一轮上加载单位矩阵,所以每次调用显示函数时,你都会旋转可变角度的值。顺便说一句,这可能是你想要改变的事情,因为将世界的状态与显示状态分开可能是有意义的。
相关文章:
- 与互斥锁相比,旋转锁可以保证上下文切换
- 绘制旋转的三角形
- 旋转模型矩阵时的形状失真
- 四边形的 2D 旋转
- 垂直方向的 Gtk3+ 旋转按钮 (c/c++)
- 发布旋转矩阵(openGL/glm)
- 顺时针迭代旋转 3 位数字
- 形状对象的旋转和缩放不正确C++
- 如何在 OpenSceneGraph 中缩放/旋转/移动资产
- 如何有效地计算将单位立方体映射到自身的反射和旋转?
- 子轴围绕父轴而不是他自己的轴旋转
- 将使用太多的纹理插值器 - 带旋转的着色器
- SFML 向下移动时如何围绕屏幕中心旋转?
- 如何在OpenGL中正确旋转和缩放对象?
- 使用 C++在 OpenGL 中移动自动旋转的 3D 多边形
- 按时间自动旋转形状,同时在 OpenGL 中使用C++移动它们
- 如何使用增强::几何计算多边形的旋转固体体积?
- 使用 GDI+ 旋转位图,然后转换为 HDC
- 如何绕任意轴旋转点?
- glPushMatrix停止所有旋转