在OpenGL中创建关节臂时遇到问题

时间:2014-11-06 22:59:09

标签: java opengl matrix jogl

我试图在OpenGL(JAVA)中创建一个关节臂。我已经开始创建一个drawTriangle方法,它在画布上绘制3个三角形,它们彼此略微重叠。我现在正在尝试编写一个drawArm方法,它通过调用drawTriangle方法开始,然后使用glPushMatrix,glPopMatrix,glTranslate和glRotate,将能够在特定点(三角形重叠的位置)旋转手臂。

这是我的drawTriangle方法:

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

    gl.glTranslatef(-2.0f, -1.5f, -6.0f);

    // Drawing first red triangle
    gl.glBegin(GL.GL_TRIANGLES);
    gl.glColor3f(1f, 0f, 0f);
    gl.glVertex3f(1f, 1f, 0.0f);    // Bottom Left
    gl.glVertex3f(1f, 1.2f, 0.0f);     // Top left
    gl.glVertex3f(2f, 1.1f, 0.0f);      // Pointy bit
    gl.glEnd();   
    gl.glTranslatef(0.9f, 0f, 0f);

    // Drawing first red triangle
    gl.glBegin(GL.GL_TRIANGLES);
    gl.glColor3f(0f, 1f, 0f);
    gl.glVertex3f(1f, 1f, 0.0f);    // Bottom Left
    gl.glVertex3f(1f, 1.2f, 0.0f);     // Top left
    gl.glVertex3f(2f, 1.1f, 0.0f);      // Pointy bit
    gl.glEnd();   
    gl.glTranslatef(0.9f, 0f, 0f);

    // Drawing first red triangle
    gl.glBegin(GL.GL_TRIANGLES);
    gl.glColor3f(0f, 0f, 1f);
    gl.glVertex3f(1f, 1f, 0.0f);    // Bottom Left
    gl.glVertex3f(1f, 1.2f, 0.0f);     // Top left
    gl.glVertex3f(2f, 1.1f, 0.0f);      // Pointy bit
    gl.glEnd();   
    gl.glTranslatef(0.9f, 0f, 0f);
}

这是我对drawArm方法的开始尝试:

public void drawArm(GL gl, float offset, float angle1, float angle2) {

    // Call drawTriangle method
    drawTriangle(gl,0,0,0,5,10,7);
    gl.glPushMatrix();
    gl.glTranslatef(-2.0f,-1.5f,-6.0f);  // Translates to origin of first triangle
    gl.glRotatef(offset, angle1, angle2, offset);
    gl.glPopMatrix();
    gl.glEnd();   
}

然后我将从display()方法中调用drawArm方法,其中offset是每个臂的长度,角度1改变三角形1和2之间的旋转,角度2改变三角形2和3之间的旋转。

编写drawArm方法有什么帮助吗?

0 个答案:

没有答案