无法获得要旋转的简单 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 技能 ;)
我有一个方法 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 技能 ;)