1

3Dゲームを作っています。ゲーム内にオブジェクトがあります。敵が自分の位置に当たったときに、画面が短時間赤くなるようにします。カメラの位置にフルスクリーンの赤い正方形をレンダリングすることで、これを行うことにしました。これは私の render メソッドにある私の試みです。

     RenderQuadTerrain();   

    //Draw the skybox
    CreateSkyBox(vNewPos.x,  vNewPos.y,  vNewPos.z,3500,3000,3500);
    DrawCoins();

    CollisionTest(g_Camera.Position().x, g_Camera.Position().y, g_Camera.Position().z);
    DrawEnemy();
    DrawEnemy1();

    //Draw SecondaryObjects models
    DrawSecondaryObjects(); 

    //Apply lighting effects
    LightingEffects();
    escapeAttempt();
if(hitbyenemy==true){
    glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE); // additive blending
float blendFactor = 1.0;
glColor3f(blendFactor ,0,0); // when blendFactor = 0, the quad won't be visible. When    blendFactor=1, the scene will be bathed in redness

    glBegin(GL_QUADS);                      // Draw A Quad
    glVertex3f(-1.0f, 1.0f, 0.0f);              // Top Left
    glVertex3f( 1.0f, 1.0f, 0.0f);              // Top Right
    glVertex3f( 1.0f,-1.0f, 0.0f);              // Bottom Right
    glVertex3f(-1.0f,-1.0f, 0.0f);              // Bottom Left
glEnd();
}

ただし、これはゲーム内のすべてのオブジェクトを透明な色に変えるだけで、正方形はどこにも見えません。クワッドの配置もわかりません。私はopenGLに非常に慣れていません。

クワッドをレンダリングしようとせずにゲームがどのように見えるか: ここに画像の説明を入力

試行後のゲームの外観: ここに画像の説明を入力

ケビンのコードとglDisable(GL_DEPTH_TEST); ここに画像の説明を入力

EDIT:コードを以下のペーストに変更しました..まだ画像1のように見えます.

http://pastebin.com/eiVFcQqM

4

1 に答える 1

2

この問題には、いくつかの原因が考えられます。

  • おそらく、加算ブレンドではなく、通常のブレンドが必要です。加算ブレンディングでは、白、黄、または紫のオブジェクトが赤くなりません。ブレンド関数をに変更しglBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);、の色を使用しますglColor4f(1, 0, 0, blendFactor);

  • オーバーレイをglDisable(GL_DEPTH_TEST);描画している間は、オーバーレイが他のジオメトリによって隠されないようにし、後で再度有効にする必要があります (または を使用しますglPush/PopAttrib(GL_ENABLE_BIT))。

  • プロジェクションとモデルビューのマトリックスは、それらの座標を持つクワッドが画面全体をカバーするようにするために、アイデンティティである必要があります。(ただし、それが全画面に影響していると言うので、それは暗黙のうちにすでにあるかもしれませんが、正しい方法ではありません。)

これらの提案で問題が解決しない場合は、質問を編集して、問題をよりよく理解できるように、ゲームのスクリーンショットを赤いフラッシュの有無にかかわらず表示してください。

于 2012-07-30T23:57:18.430 に答える