簡體   English   中英

使用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矩陣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM