opengl中渲染对象的移动

时间:2017-10-08 17:35:16

标签: c++ opengl graphics coordinate-transformation

我无法使用openGL以有序的方式移动这些对象。

我想要做的是让每一行中的每个对象慢慢旋转并移动屏幕右侧,当它从视图中消失时,它应该重新出现在另一侧,就像在循环中一样。

idle函数适用于单个对象,但它不能与对象组一起使用。

str.replace('\\n','\n')

1 个答案:

答案 0 :(得分:0)

您必须更改说明的顺序。通过将平移矩阵乘以旋转矩阵,执行围绕对象轴的旋转。

object-matrix = translation-matrix * rotation-matrix

enter image description here

请参阅明确说明的glRotate文档:

  

glRotate围绕向量x y z生成角度旋转。当前矩阵(参见glMatrixMode)乘以旋转矩阵,产品替换当前矩阵。


像这样调整你的代码:

void renderObject(GLfloat x, GLfloat y,
    GLfloat ambr, GLfloat ambg, GLfloat ambb,
    GLfloat difr, GLfloat difg, GLfloat difb,
    GLfloat specr, GLfloat specg, GLfloat specb, GLfloat shine)
{
    glPushMatrix();

    glTranslatef(x, y, 0.0);            // translation-matrix
    glRotatef(yRotated, 0.0, 1.0, 0.0); // multiply by rotation-matrix
    glRotatef(xRotated, 1.0, 0.0, 0.0);

    .....
}

注意,你的轮换非常轻微。出于调试原因,将yRotated += 0.01;更改为yRotated += 1.0;(角度以度为单位)。

enter image description here