1

私は OpenGL を学習していますが、レンダリングが正しくないという問題があります。これは私が抱えている問題です。ピラミッドの側面の間に隙間があります。

ここに画像の説明を入力

これが私が構築するために使用している頂点です。

// Create Pyramid Vertex Buffer
FloatBuffer vertexBuffer = BufferUtils.createFloatBuffer(3 * 12);
vertexBuffer.put(new float[]
{
    // Side one
    0f, 0.8f, 0f,
    -0.8f, -0.8f, 0.8f,
    0.8f, -0.8f, 0.8f,

    // Side two
    0f, 0.8f, 0f,
    0.8f, -0.8f, 0.8f,
    0.8f, -0.8f, -0.8f,

    // Side three
    0f, 0.8f, 0f,
    0.8f, -0.8f, -0.8f,
    -0.8f, -0.8f, -0.8f,

    // Side four
    0f, 0.8f, 0f,
    -0.8f, -0.8f, -0.8f,
    -0.8f, -0.8f, 0.8f
});
vertexBuffer.rewind();

これはモデルが画面からはみ出してしまうからだと思いました。したがって、z軸での変換は問題ないと思い、呼び出す前にこの行を追加しましたglDrawArrays

glTranslatef(0f, 0f, -1f);

これにより、より多くの面が描画されるという奇妙な動作が発生しました。

ここに画像の説明を入力

3 つの側面がレンダリングされますが、2 つのみしか表示されません。どうすればこの問題を解決できますか? 深度テストも有効にしました。

OpenGLを初期化する方法は次のとおりです

// Initialize OpenGL
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-1, 1, -1, 1, 1, -1);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

glViewport(0, 0, Display.getWidth(), Display.getHeight());
4

1 に答える 1

2

glOrtho は表示領域を設定します。形状は 1 平方単位の内側に収まりますが、全体を見たい場合は、形状全体を囲むように近距離と遠距離を設定するか (2、-2 が行います)、または設定することができます。 glOrtho から glOrtho(-1, 1, -1, 1, 0, -5); のようなものへ 形状を後方に移動して、表示フィールドに表示します。

もう1つの(悪い)オプションは、頂点の絶対位置を変更して、頂点が近距離フィールドと遠距離フィールド内に収まるようにすることですが、それは一般的な変換と変換のポイントであるため、お勧めしません。

すべてを正投影ビューにすることを意味しますか、それとも遠近法を使用することを意味しますか? 正射投影ビューは、翻訳が最初に役に立たなかった理由です。

于 2013-09-11T03:30:09.170 に答える