2011-12-26 13 views
1

私の環境ボックスにC++を使ってOpenGLで街灯を作成しようとしています。私はスポットライトを作成する必要がありますが、私は以下のコードを書いていますが、スポットライトとしては機能しません。私は間違って何をしているのですか、私の問題に対して他の解決方法がありますか?OpenGLで街灯を作成する

GLfloat ambientLight[] = {0.7f, 0.2f, 0.2f, 1.0f}; 
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambientLight); 
GLfloat directedLight[] = {0.7f, 0.7f, 0.7f, 1.0f}; 
GLfloat directedLightPos[] = {-10.0f, 15.0f, 20.0f, 0.0f}; 
glLightfv(GL_LIGHT0, GL_DIFFUSE, directedLight); 
glLightfv(GL_LIGHT0, GL_POSITION, directedLightPos); 

ありがとうございます。

答えて

2

これがライトコードのすべてである場合は、いくつかの重要な行がありません。周囲/拡散光の色と明るい位置のみを定義します。 glEnable(GL_LIGHT0)

  • 私はわからないが、私はあなたにも材料を定義する必要があります(glMaterial)を考える:例えば:あなたが使用している光を有効にする必要がありglEnable(GL_LIGHTING)
    • あなたが持つ照明を有効にする必要があります。

      • あなたの法線ベクトルが正しい設定されている場合や、結果
      • は表示されませんを確認します。他のノートはglLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, direction);

      2:あなたはあなたの光の方向を定義する必要が

    • 正しく固定された関数ライティングは、ピクセルではなく頂点に対してのみ機能することを覚えています。したがって、1つのクワッドの上に光源がある場合、ライトスポットは見えません。
  • +0

    +1。また、最後の要素はスポットライトの場合は0でなくてもよく、GL_SPOT_CUTOFFは90より小さい必要があります(light0の場合はデフォルトで180)。 –

    +0

    あなたの答えをありがとう。私は以下のように自分のコードを編集しましたが、環境はまだ暗いです。私は何が欠けていますか? glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); GLfloat spotLightColour [] = {1.0,0.0,1.0}; GLfloat spotlightDirection [] = {0.0、-1.0,0.0}; GLfloat directedLightPos [] = {100.0f、100.0f、100.0f、10.0f}; glLightf(GL_LIGHT0、GL_SPOT_CUTOFF、45); glLightfv(GL_LIGHT0、GL_SPOT_DIRECTION、spotlightDirection); glLightfv(GL_LIGHT0、GL_POSITION、directedLightPos); glLightfv(GL_LIGHT0、GL_SPECULAR、spotLightColour); glLightf(GL_LIGHT0、GL_SPOT_EXPONENT、120); – goncag

    0

    「新しい」OpenGL(コア3.+)では「ライティング」のサポートがありませんのでご注意ください。これらの列挙型と関数はすべて廃止予定です。

    だから、他のいくつかの解決策を見てみたいことがあります。

    はまた、それは、これらの「古い」照明機能は非常に使用することを容易にしたと言って価値があります彼らは多くの教訓の利点を持っています。

    関連する問題