2

如果我将 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();
}

}
4

3 回答 3

2

正如 mgibsonbr 提到的,顶点是非共面的。他也发布了一个很好的工具来帮助你。

这也可能对您有所帮助。

如果是四个顶点,有分量;1 <= n <= 4 是共面的,那么矩阵的行列式:

|x1  y1  z1  1|
|x2  y2  z2  1|
|x3  y3  z3  1|
|x4  y4  z4  1|

将为0。

于 2012-06-25T03:53:18.507 回答
1

四边形的顶点必须共面。您指定的四个顶点不是,根据this,在这种情况下结果未定义(这可能是空白屏幕的原因)。

这是一个帮助您找到平面方程的工具,因此您可以选择共面的第 4 点。您的前 3 个点构成方程-9x -9y +9z + 27 = 0,因此合适点的一个示例是:

GL11.glVertex3f(2.0f, 2.0f, 1.0f);
于 2012-06-25T03:38:48.913 回答
0

您也可以使用 glBegin(GL_TRIANGLE_STRIP),所有三角形都是共面的;)

于 2014-07-15T20:32:11.193 回答