如果我将GL_QUADS切换到GL_TRIANGLES并删除最后一个点,则三角形呈现正常。 但是,将其更改回GL_QUADS并添加另一个点只会让我看到黑屏。那我该怎么办?
import org.lwjgl.LWJGLException;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
import org.lwjgl.opengl.GL11;
import org.lwjgl.util.glu.GLU;
public class Main {
public Main() {
this.start();
}
private void start() {
try {
Display.setDisplayMode(new DisplayMode(640,640));
Display.setTitle("FPSTest");
Display.create();
} catch (LWJGLException e) {
e.printStackTrace();
}
GL11.glMatrixMode(GL11.GL_PROJECTION);
GL11.glLoadIdentity();
GL11.glOrtho(-10, 10, -10, 10, -1000, 1000);
GL11.glMatrixMode(GL11.GL_MODELVIEW);
while (!Display.isCloseRequested()) {
GL11.glClear(GL11.GL_DEPTH_BUFFER_BIT|GL11.GL_COLOR_BUFFER_BIT);
GL11.glRotatef(0, 1, 1, 1);
GL11.glBegin(GL11.GL_QUADS);
// GL11.glBegin(GL11.GL_TRIANGLES);
{
GL11.glColor3f(1.0f, 0.0f, 0.0f);
GL11.glVertex3f(0.0f, 3.0f, 0.0f);
GL11.glColor3f(0.0f, 1.0f, 0.0f);
GL11.glVertex3f(0.0f, 0.0f, -3.0f);
GL11.glColor3f(0.0f, 0.0f, 1.0f);
GL11.glVertex3f(3.0f, 0.0f, 0.0f);
GL11.glColor3f(0.0f, 1.0f, 0.0f);
GL11.glVertex3f(0.0f, 0.0f, 3.0f);
}
GL11.glEnd();
GL11.glLoadIdentity();
Display.update();
}
Display.destroy();
}
public static void main(String[] argv) {
new Main();
}
}
答案 0 :(得分:2)
正如mgibsonbr所提到的,顶点是非共面的。他发布了一个很好的工具来帮助你。
这也可以帮到你。
如果四个顶点,有组件; 1< = n< = 4是共面的,然后是矩阵的行列式:
|x1 y1 z1 1|
|x2 y2 z2 1|
|x3 y3 z3 1|
|x4 y4 z4 1|
将为0。
答案 1 :(得分:1)
四边形的顶点必须是共面的。您指定的四个顶点不是,并且根据this,在这种情况下结果是未定义的(这可能是空白屏幕的原因)。
这是一个tool来帮助您找到平面方程,因此您可以选择共面的第4点。您的前3个点形成等式-9x -9y +9z + 27 = 0
,因此合适点的一个示例是:
GL11.glVertex3f(2.0f, 2.0f, 1.0f);
答案 2 :(得分:0)
你也可以使用glBegin(GL_TRIANGLE_STRIP),所有三角形都是coplanar;)