我试图在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方法有什么帮助吗?