我有cpp代码,可在Maya中显示简单的OpenGL形状。
如果使用旧版视口(viewport),那么我正好有想要的东西:沿x轴移动的箭头:

但是,如果我在ViewPort 2.0中使用相同的代码,则箭头将跟随摄像机的移动:



仅当我应用glTranslatef(我将需要使用)时才会发生这种情况。

这是一段代码:

 for (int i=0;i<10;i++)
 {
    glPushMatrix();
    glTranslatef(i,0,0);
    glBegin(GL_LINES);
    // Arrow
    glVertex3f(0,  y,  z);
    glVertex3f(1,  y,  z);

    glVertex3f(1,  y,  z);
    glVertex3f(0.5,  y,  z+0.5);

    glVertex3f(1,  y,  z);
    glVertex3f(0.5,  y,  z-0.5);

    glEnd();
    glPopMatrix();
}

如何在"new" Maya视口(viewport)中具有适当的行为?

最佳答案

根据我的评论,这似乎是平移发生在与渲染不同的坐标系中,这向我暗示绑定(bind)了不同的矩阵堆栈。

因此,在旧的视口(viewport)(结果为“正确”的情况下),您将平移连接到模型 View 矩阵上,但是在2.0情况下,您可能将平移连接到投影矩阵上-这将导致平移看起来像是相对于屏幕,而不是 View 。

我建议确保在渲染调用中正确设置所有相关状态,例如在与矩阵堆栈混淆之前设置所需的glMatrixMode()等。

10-01 20:07