无法获得一个简单的OpenGL三角形来旋转

时间:2015-10-27 21:56:22

标签: java opengl rotation jogl translate

我有一个方法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();        
}

然后画出一个可爱的红色三角形。

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

它只是在这里产生:

triangle

3 个答案:

答案 0 :(得分:1)

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

  • 首先设置你的矩阵(即进行转换)
  • 然后渲染
  • 最后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();        
}

答案 1 :(得分:1)

代码存在一些问题。首先,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(); 
}

答案 2 :(得分:1)

我的示例旋转四边形,我假设您可以修改它以旋转三角形: https://gist.github.com/gouessej/3420e2b6f632efdddf98

引用了on Wikipediathe JogAmp wiki。下次提高你的Yacy / DuckDuckGo / IxQuick / Seeks技能;)