-2

これを lwjgl ゲームのレンダリング関数の一部として使用しています。画面には何も表示されませんが、何がおかしいのかわかりません。プログラムは、テクスチャ キューブの高度な世界を既に描画しています。これは、プレイヤーが見ているものを選択することになります。それはおそらく私が見逃しているばかげた設定です。いくつかの設定をいじるだけでなく、レンダリング ループのさまざまな時点で実行してみました。空間座標は間違いなく正しいです。

現時点では、選択した立方体の上に白い正方形をレンダリングしようとしています。

        GL11.glMatrixMode(GL11.GL_MODELVIEW);
    GL11.glPushMatrix();
    GL11.glLoadIdentity();
    System.out.println("coords: "+left+" "+bottom+" "+back);
    GL11.glColor3f(255f, 255f, 255f);
    //left
    GL11.glBegin(GL11.GL_QUADS);
    GL11.glVertex3f(left, bottom, back);
    GL11.glVertex3f(left, bottom, front);
    GL11.glVertex3f(left, top, front);
    GL11.glVertex3f(left, top, back);
    //right
    GL11.glVertex3f(right, bottom, front);
    GL11.glVertex3f(right, bottom, back);
    GL11.glVertex3f(right, top, back);
    GL11.glVertex3f(right, top, front);
    //top
    GL11.glVertex3f(left, top, front);
    GL11.glVertex3f(right, top, front);
    GL11.glVertex3f(right, top, back);
    GL11.glVertex3f(left, top, back);
    //front
    GL11.glVertex3f(left, bottom, front);
    GL11.glVertex3f(right, bottom, front);
    GL11.glVertex3f(right, top, front);
    GL11.glVertex3f(left, top, front);
    //back
    GL11.glVertex3f(right, bottom, back);
    GL11.glVertex3f(left, bottom, back);
    GL11.glVertex3f(left, top, back);
    GL11.glVertex3f(right, top, back);
    //bottom
    GL11.glVertex3f(right, bottom, front);
    GL11.glVertex3f(left, bottom, front);
    GL11.glVertex3f(left, bottom, back);
    GL11.glVertex3f(right, bottom, back);
    GL11.glEnd();
    GL11.glPopMatrix();

そして、私のすべてのイニシャライザは、上記を実行する前に無効にしたものもあれば、準備/元に戻すのが簡単だったために省略したものもあります。コードが長すぎるため、完全なコードを掲載することはできません。このゲームのグラフィック エンジンは、すでに開発中です。

    GL11.glTexEnvf(GL11.GL_TEXTURE_ENV, GL11.GL_TEXTURE_ENV_MODE,GL11.GL_MODULATE);
    GL11.glClearColor(0.47f,0.55f,1.0f, 0.0f); 
    GL11.glClearDepth(1.0f); 
    GL11.glEnable(GL11.GL_DEPTH_TEST);
    GL11.glDepthFunc(GL11.GL_LEQUAL);
        GL11.glEnableClientState(GL11.GL_COLOR_ARRAY);
        GL11.glEnableClientState(GL11.GL_VERTEX_ARRAY);
        GL11.glEnableClientState(GL11.GL_TEXTURE_COORD_ARRAY);
        GL11.glEnable(GL11.GL_TEXTURE_2D);
        GL11.glEnable(GL11.GL_ALPHA_TEST);
        GL11.glEnable( GL13.GL_MULTISAMPLE );
        GL11.glEnable( GL13.GL_SAMPLE_ALPHA_TO_COVERAGE );
        GL11.glAlphaFunc(GL11.GL_GREATER, (float) 0.01);
        GL11.glEnable(GL11.GL_BLEND);
        GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
        GL11.glTexParameterf( GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST);
        GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_NEAREST);
        GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_NEAREST);
4

3 に答える 3

2
GL11.glMatrixMode(GL11.GL_MODELVIEW);
GL11.glPushMatrix();
GL11.glLoadIdentity();

モデルビュー マトリックスを ID にリセットしているため、ビューの変換 (「カメラ」の位置合わせ/配置) はオーバーライドされます。技術的には、「デフォルト」ビューで描画しており、おそらく表示ボリュームの境界外で透視投影を使用する必要があります。

于 2011-10-09T14:23:44.897 に答える
1

私はこれを自分で解決しました.座標を間違って計算していました.

ここでは、著作権のために多くの重要なコードを省略しなければなりませんでしたが、私が見つけたバグを誰かが発見したとは思えません。

于 2011-10-10T00:43:18.620 に答える
0

テクスチャリングを有効にしますが、頂点にテクスチャ座標を与えません。法線も与えていないので、照明を有効にしないでください。

初期化子に関するあなたの声明(「上記を実行する前に無効にしたものと省略したものがあります」)に基づいて、このキューブをレンダリングするときのGLの状態を実際に投稿するか、投稿する前に自分で確認してください。エンジンが行うすべての状態変更をいじる際に、自分でエラーを見つけることさえあるかもしれません。

一般に、明示的な初期化コードからはむしろ劣化し、レンダリングの直前に必要なすべての状態を常に設定する必要があります。これにより、GL が実際にどの状態にあるのかわからないような奇妙なことを防ぐことができます。OpenGL はステート マシンであることを常に覚えておいてください。

于 2011-10-09T18:22:38.033 に答える