使用OpenGL围绕轴心点旋转
Rotation around a pivot point with OpenGL
我正在尝试将一个对象绕其一侧旋转,并且已经尝试了论坛上常见的方法:
translate(-P);
rotate();
translate(P);
在OpenGL
(反转平移/旋转的顺序)中,我使用了以下代码:
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glPushMatrix();
glTranslatef(-50, 50, 0);
glRotatef(rotationCoord, 0, 1, 0);
glTranslatef(50, -50, 0);
glBegin(GL_QUADS);
glVertex3f(-50.0, 50.0, 0);
glVertex3f(50.0, 50.0, 0);
glVertex3f(50.0, -50.0, 0);
glVertex3f(-50.0, -50.0, 0);
glEnd();
glPopMatrix();
然而,我绘制的矩形似乎并没有围绕一侧作为枢轴旋转。(尝试将左侧设置为轴心点并围绕它旋转)。我制作了一个截屏视频来展示我现在的旋转方式。这是视频:
http://youtu.be/VgEZ_rsG3xU
如何设置该对象的轴,使其围绕该点旋转?
问题来自
glTranslatef(0, 0, -10.0);
您在旋转之后调用。这意味着(0,0,-10)在对象坐标(+-50,+-50,0)被其他任何东西变换之前应用于对象坐标,因此四边形在旋转之前会发生偏移。
这是我用来测试的代码,也许你可以从中得到一些东西:
#include <glm/glm.hpp>
#include <glm/ext.hpp>
using namespace glm;
void display(void)
{
glClearColor(0,0,0,0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
GLfloat aspect = (float)g_Width / g_Height;
mat4 eyeToCamera = perspective(45.f, aspect, g_nearPlane, g_farPlane); // projection
mat4 cameraToWorld = lookAt(vec3(0, 0, -150), vec3(), vec3(0, 1, 0)); // view
vec3 pivot(50, -50, 0);
mat4 worldToObject = translate(pivot)
* rotate(rotationAngle, vec3(0, 1, 0))
* translate(-pivot); // model
glLoadMatrixf(value_ptr(eyeToCamera * cameraToWorld * worldToObject));
glBegin(GL_QUADS);
glVertex3f(-50.0, 50.0, 0);
glVertex3f(50.0, 50.0, 0);
glVertex3f(50.0, -50.0, 0);
glVertex3f(-50.0, -50.0, 0);
glEnd();
glutSwapBuffers();
}
请注意,我不使用任何矩阵堆栈函数,只设置GL_MODELVIEW矩阵。
相关文章:
- 发布旋转矩阵(openGL/glm)
- 如何在OpenGL中正确旋转和缩放对象?
- 使用 C++在 OpenGL 中移动自动旋转的 3D 多边形
- 按时间自动旋转形状,同时在 OpenGL 中使用C++移动它们
- 如何在 openGL 中围绕全局轴旋转模型?
- 如何在 opengl 中仅旋转特定对象而不影响其他对象?
- 在OpenGL(GLM/C++)中使用四元数旋转时出现问题
- 鼠标单击 OpenGL 时无法围绕其自己的中心旋转对象
- OpenGL:在那个方向上旋转和移动
- 在 OpenGL 中旋转一个正方形
- 如何使用gluLookAt围绕OpenGL中的点旋转相机视图
- 如何在 opengl 中旋转矢量?
- 现代 OpenGL 多维数据集旋转未按预期工作
- 在使用PI上的OpenGL ES绘制之前,如何旋转纹理
- C++ OpenGL 如何从 quaterion 获取旋转 x,y,z
- Opengl 旋转不起作用
- 绕摄影机旋转opengl c++/设置旋转中心
- 使用 GLM 围绕点旋转 OpenGL
- 第一人称相机,旋转OPENGL
- 立方体旋转- OpenGL