OpenGLで鏡面カラーを取得するには?

私のコードは、鏡面反射成分以外のすべてに対して機能します。

glEnable(GL_COLOR_SUM);
...
glEnableClientState(GL_COLOR_ARRAY);
glColorPointer(4, GL_UNSIGNED_BYTE, 0, color);
glEnableClientState(GL_SECONDARY_COLOR_ARRAY);
glSecondaryColorPointer(3, GL_UNSIGNED_BYTE, 0, specular);
...
glDrawArrays(D3DPT_TRIANGLELIST, 0, 2);

スペキュラを無視しているようですが、色、テクスチャの座標、位置などはすべて問題ありません。

ライトとマテリアルを使用していません。固定頂点パイプライン。残念ながらシェイダーはこの時点では選択肢ではありません。

glGetError()はいずれの時点でもエラーを報告しません。

1
"これはライトとマテリアルを使用していません。"ライトとマテリアルを使用していない場合、セカンダリカラーはテクスチャ環境の機能の一部としてのみ使用されます。だから...彼らは何ですか?どのような glTexEnv 関数を呼びますか?
追加された 著者 Nicol Bolas,
私はデフォルトを使用しています...もしglTexEnvを適切に変更しなければならない場合、それらは何に変更されますか?そして、ドキュメントで言及されているGL_COLOR_SUMの使用は何ですか?
追加された 著者 Mike Weir,

1 答え

あなたが言った:

これはライトとマテリアルを使用していません。

スペキュラは、それを得るための光があるときにのみ計算することができます。 (もし私がそれの背後にある数学に入ることができれば...)

http://ja.wikipedia.org/wiki/Specular_highlight から:

鏡面ハイライトは、照らされたときに光るオブジェクトに表示される明るい光のスポットです。

サイドノートでD3DPT_TRIANGLELISTはOpenGLコードで何をしていますか?それはちょうど質問の間違いですか、それとも実際にはそれのように機能しますか?

1
追加された
私は解決策を見つけて以来、二次色を有効にしてそれを使用しています。 Specularとdiffuseは、独自のライティング計算を行い、OpenGLマテリアル/ライトシステムを使用していない場合に使用できます。
追加された 著者 Mike Weir,
うーん...これは2Dゲームのためのもので、スペキュラは下端のハードウェアでシェーダを使用せずにフラッシュ効果を生成するように変更されています。
追加された 著者 Mike Weir,
@ PhoenixX_2 wait ...シェーダなしで自分のライティング計算をどうやってやっていますか?セカンダリカラーにプレ/手動で計算された鏡面反射値を入れていますか?申し訳ありませんが、私はあなたの質問を誤解しました。
追加された 著者 chipgw,
私はまだD3DPT_TRIANGLELISTがOpenGLコードで何をしているのか知りたいです...
追加された 著者 chipgw,