私は一日中オブジェクトを適切に照らそうとしていて、結果が出ないようにしようとしていたので、ここで試してみます。本質的に、私はオブジェクトを次のように見せようとしています。
私のプログラムでは、次のようになります。
これが私のコンテキストです:
glClearDepth(1.0);
glShadeModel(GL_SMOOTH);
glEnable(GL_DEPTH_TEST);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glLight(GL_LIGHT0, GL_POSITION, {0, 5, 0, 1});
glDisable(GL_TEXTURE_2D);
そして私の材料/照明設定:
glMaterialf(GL_FRONT, GL_SHININESS, 10);
glLight(GL_LIGHT0, GL_AMBIENT, {0.1, 0.1, 0.1, 1.0});
glLight(GL_LIGHT0, GL_DIFFUSE, {0.2, 0.2, 0.2, 1.0});
glLight(GL_LIGHT0, GL_SPECULAR, {0.6, 0.6, 0.6, 1.0});
glMaterial(GL_FRONT, GL_AMBIENT, {1, 0.8078, 0});
glMaterial(GL_FRONT, GL_DIFFUSE, {1, 0.8078, 0});
glMaterial(GL_FRONT, GL_SPECULAR, {0.5, 0.5, 0.5});
glMaterial(GL_FRONT, GL_EMISSION, {0, 0, 0});
[簡単にするために、配列を示すために{r、g、b、a}を使用しました。モデルの描画に使用された実際の値を調べて、配列に書き込みました]
主な問題は、オブジェクトが完全に照らされるたびに、すべてが周囲の色に「乱雑」になることです。フラグメントの方向に応じて、明るい部分と暗い部分はなくなり、単色の1つのチャンクだけになります。
プロジェクト全体で、見逃した可能性のあるopenGL設定を検索しましたが、上記で表示されているものだけが見つかりました(投影とモデルビューのマトリックスをリセットするためのいくつかの呼び出しを省略し、画面をクリアし、変換/回転します)。
また、ライトとマテリアルの値を変更しようとしましたが、あまり成功しませんでした。アンビエントカラーを変更すると、モデル全体が明るくなります。ライトも動かしてみました。
編集:リクエストに応じて、モデルを保存して描画する方法は次のとおりです。
OBJファイルからモデルをロードします。法線がリストされているファイル自体を調べました。ローダーもそれを認識します。
VBOの描画方法は次のとおりです。
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glBindBufferARB(GL_ARRAY_BUFFER_ARB, vertexBufferID);
glVertexPointer(3, GL_FLOAT, stride, 0 * 4);
glNormalPointer(GL_FLOAT, stride, 3 * 4);
glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, indexBufferID);
glDrawElements(GL_TRIANGLES, this.numberOfVertices, GL_UNSIGNED_INT, 0);
VBOはインターリーブされ、[vertex、normal、vertex、normal、..]のようにフォーマットされます。描画コードにいくつかの印刷呼び出しを削除しました。これにより、頂点と通常のポインターが設定されます。したがって、VBO自体が正しくロードおよび描画されていることを確信しています。