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が述べたように、頂点は非同一平面上にあります。彼はあなたにも役立つ素晴らしいツールを投稿しました。

これも役立つかもしれません。

コンポーネントを含む4つの頂点の場合。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

クワッドの頂点は同一平面上にある必要があります。指定した4つの頂点はそうではなく、これによると、この場合、結果は未定義です(これがおそらく空白の画面の理由です)。

これは、平面方程式を見つけるのに役立つツールです。これにより、同一平面上の4番目の点を選択できます。最初の3つのポイントが方程式を形成する-9x -9y +9z + 27 = 0ため、適切なポイントの1つの例は次のとおりです。

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 に答える