6

(太陽のような) 光のオーブを作ろうとしていますが、まったく見えないようです。私が持っているコードのスニペットをいくつか紹介します。これは Java LWJGL にあるため、見た目が少し異なる場合があります。

private float lightAmbient[] = { 0.0f, 1.0f, 1.0f, 1.0f };  // Ambient Light Values ( NEW )
    private float lightDiffuse[] = { 1.0f, 1.0f, 1.0f, 1.0f };      // Diffuse Light Values ( NEW )
    private float lightPosition[] = { 0.0f, 0.0f, -5.0f, 1.0f }; // Light Position ( NEW )
    float lightSpecular[] = { 0f, 0f, 0.5f, 1.0f };  // highlight

ByteBuffer temp = ByteBuffer.allocateDirect(16);
        temp.order(ByteOrder.nativeOrder());
        GL11.glLight(GL11.GL_LIGHT1, GL11.GL_AMBIENT, (FloatBuffer)temp.asFloatBuffer().put(lightAmbient).flip());              // Setup The Ambient Light
        GL11.glLight(GL11.GL_LIGHT1, GL11.GL_DIFFUSE, (FloatBuffer)temp.asFloatBuffer().put(lightDiffuse).flip());              // Setup The Diffuse Light
        GL11.glLight(GL11.GL_LIGHT1, GL11.GL_POSITION,(FloatBuffer)temp.asFloatBuffer().put(lightPosition).flip());         // Position The Light
        GL11.glLight(GL11.GL_LIGHT1, GL11.GL_SPECULAR,(FloatBuffer)temp.asFloatBuffer().put(lightSpecular).flip());         // Position The Light

        GL11.glEnable(GL11.GL_LIGHT1); 

光を可視化するには、他に何をしなければなりませんか?

4

3 に答える 3

7

ライトは決して見えません。

ただし、他のオブジェクトのマテリアルへの影響はあります。したがって、シーン内のすべてのオブジェクトに適切なマテリアル プロパティが設定されていることが重要です。

シーンを照らそうとするときに犯す一般的な間違いについて言及しているこの記事に興味があるかもしれません.

代替テキスト

マテリアル プロパティを設定する最も簡単な方法であるため、glColorMaterial 関数を参照することをお勧めします。

于 2009-12-28T04:15:09.983 に答える
2

満開のスタイルの効果が必要か (そうであれば、Josh Perry の回答を参照)、または光を発しているように見える暗くないオブジェクト オブジェクトだけが必要かどうかに応じて、この単純なアプローチを検討することをお勧めします。

  • 実際の「太陽」メッシュなしでシーンをレンダリングしますが、「太陽」の中心にあるポイント ライトを使用します。
  • GLライティングを無効にします。
  • 球体をレンダリングするか、ビルボードを使用して、適切な場所にある太陽の画像をレンダリングします。
  • 次のフレームを表示する前に、GL Lighting を再度有効にします。

照明を無効にしているため、太陽は「完全に明るい」状態でレンダリングされ、シェーディングや照明の計算は実行されません。

于 2009-12-28T11:13:37.563 に答える
2

フランクが言ったように、ライトは目に見えず、レンダリング システム (ハードウェア/ソフトウェア) がジオメトリの最終的な色を計算するために使用する照明方程式への入力として使用されるだけです。

何かを光のように見せたい場合は、明るい光源を見たときに見慣れた効果を模倣する必要があります。太陽の場合、最も顕著な効果の 1 つはライト ブルームです。

ライト ブルームの生成については、このOpenGL ブルーム チュートリアルを参照してください。GLSL を使用してブルーム効果を生成する Javaのサンプル コードを次に示します。

于 2009-12-28T04:54:19.687 に答える