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 が継続的に発生するようです。しかし、私はどんな種類のテクスチャも使用していないので、なぜこれが起こっているのか混乱していますか?