0

Blender からシーンにレンダリングされたオブジェクトがあり、法線が正しくロードされています。ModelViewProjectionMatrix (CameraToClip * ModelToCamera) をシェーダーに渡す Gourrad Diffuse シェーディングと、ModelToCameraMatrix の 3x3 バージョンを法線と乗算するために使用しています。

ただし、出力色を DiffuseColor * 角度に設定すると、オブジェクト全体 (私の場合は立方体) が消えます (黒い線でさえなく、灰色の背景には何も表示されません)。coloroutput を

theColor = Vec4(1.0f, 1.0f, 1.0f, 1.0f); 

obj をシェーディングなしで白で表示します。なぜ何も表示されないのか、非常に興味があります。シェーダーまたはユニフォームの渡し方に何か問題がありますか?

頂点シェーダー:

#version 330

layout(location = 0) in vec4 position;
layout(location = 1) in vec3 normal;

smooth out vec4 theColor;

uniform mat4 modelViewProjectionMatrix;

uniform vec3 lightDir;
uniform mat3 normalModelToCameraMatrix;

void main()
{
    gl_Position = modelViewProjectionMatrix * position;

    vec3 normCamSpace = normalize(normalModelToCameraMatrix * normal);

    vec4 diffuseColor = vec4(0.6f, 0.7f, 0.8f, 1.0f);

    float angle = dot(normCamSpace, lightDir);
    angle = clamp(angle, 0, 1);

    theColor = diffuseColor  * angle;
}

レンダリング方法:

stack.Translate(glm::vec3(0.0f, 0.0f, 3.0f));

glm::vec4 lightDirCameraSpace = stack.Top() * glm::vec4(1.5f, 1.0f, 0.0f, 0.0f);
glUniform3fv(lightDirUnif, 1, glm::value_ptr(lightDirCameraSpace));
glm::mat3 normalMatrix(stack.Top());
glUniformMatrix3fv(normalModelToCameraMatrixUnif, 1, GL_FALSE, glm::value_ptr(normalMatrix));


// Draw Blender object
glBindVertexArray(this->load.vertexArrayOBject);

glm::mat4 modelViewProjectionMatrix = cameraToClipMatrix * stack.Top();
glUniformMatrix4fv(modelViewProjectionMatrixUnif, 1, GL_FALSE, glm::value_ptr(modelViewProjectionMatrix));


glDrawElements(GL_TRIANGLES, this->load.indicesVec.size(), GL_UNSIGNED_INT, 0);

シェーダーもレンダリング部分もどこが悪いのかわかりません。


更新 glGetError を使用すると、「メモリ不足」の問題に関連していると思われるエラー コード 1285 が継続的に発生するようです。しかし、私はどんな種類のテクスチャも使用していないので、なぜこれが起こっているのか混乱していますか?

4

1 に答える 1

1

私の推測では、あなたは次のようになっています。

  1. ブレンディングおよび/またはアルファテストを有効にする
  2. angleアルファチャネルにあなたを掛ける
  3. 角度に実際に必要な値ではなく、すべての重要な角度の場合に0で終わる値を取得する

したがって、alpha = 0の場合、ポリゴンはすべて透明/アルファテスト済みです。

最初に行うべきことは、アルファが常に1.fであることを確認し、rgbのみを変調することです。ブレンディング/アルファテストをオフにすることもできます。

次に、角度変数を実際に計算する計算を必要に応じて修正します。

于 2012-09-15T16:09:54.480 に答える