无法获得要旋转的简单 OpenGL 三角形

Unable to get a simple OpenGL triangle to rotate

我有一个方法 drawTriangle,它在 JAVA 的 OpenGL 程序的 display() 方法中被引用。

public void drawTriangle(GL gl, int x1, int y1, int x2, int y2, int x3, int y3){

    gl.glVertex2d(x1, y1);
    gl.glVertex2d(x2, y2);
    gl.glVertex2d(x3, y3);

}

然后我调用 Display()

中的三角形
public void display(GLAutoDrawable drawable){
    GL gl = drawable.getGL();

    gl.glClear(GL.GL_COLOR_BUFFER_BIT);
    gl.glColor3f(0.4f, 1.0f, 0.4f);
    gl.glBegin(GL.GL_TRIANGLES);
    gl.glPushMatrix();
    drawTriangle(gl,0,0,0,20,100,10);
    gl.glTranslatef(0f, 0f, 0f);
    gl.glRotatef(90f, 0f, 0f, 1f);
    gl.glPopMatrix();        
}

这就画了一个可爱的红色三角形。

我无法更改三角形的位置或旋转。

它只是在这里生成它:

您正在渲染后应用变换。这不起作用!

  • 首先设置您的矩阵(即进行转换)
  • 然后渲染
  • 最后popMatrix恢复原矩阵

即:

public void display(GLAutoDrawable drawable)
{
    GL gl = drawable.getGL();
    gl.glClear(GL.GL_COLOR_BUFFER_BIT);
    gl.glPushMatrix();
    gl.glTranslatef(0f, 0f, 0f);
    gl.glRotatef(90f, 0f, 0f, 1f);
    gl.glBegin(GL.GL_TRIANGLES);
    gl.glColor3f(0.4f, 1.0f, 0.4f);
    drawTriangle(gl,0,0,0,20,100,10);
    gl.glEnd();
    gl.glPopMatrix();        
}

代码有一些问题。首先,gl.glBegin(...) 后面应该是 gl.glEnd()。将绘图函数(例如 drawTriangle(...))保留在这两个函数中,并将任何矩阵运算保留在这两个函数之外。

public void display(GLAutoDrawable drawable)
{ 
    GL gl = drawable.getGL();
    gl.glClear(GL.GL_COLOR_BUFFER_BIT);
    gl.glColor3f(0.4f, 1.0f, 0.4f);
    gl.glPushMatrix();
    gl.glTranslatef(0f, 0f, 0f);
    gl.glRotatef(90f, 0f, 0f, 1f);
    gl.glBegin(GL.GL_TRIANGLES);
    drawTriangle(gl,0,0,0,20,100,10); 
    gl.glEnd();
    gl.glPopMatrix(); 
}

我的例子旋转了一个四边形,我假设你可以修改它来旋转一个三角形: https://gist.github.com/gouessej/3420e2b6f632efdddf98

它被引用 on Wikipedia and in the JogAmp wiki。下次提高你的 Yacy/DuckDuckGo/IxQuick/Seeks 技能 ;)