我正在尝试围绕其中一方旋转一个对象,并且已尝试在论坛上找到的常用方法:
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();
然而,我正在绘制的矩形似乎不是围绕一侧作为枢轴旋转。 (尝试将左侧设置为枢轴点并围绕它旋转)。我制作了一个屏幕截图视频,以显示我现在正在获得什么样的轮播。这是视频:
如何为此对象设置枢轴,使其围绕该点旋转?
答案 0 :(得分:2)
问题来自
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矩阵。