我的延期着色實施有一個奇怪的問題。 我渲染通過地鐵所需的信息到FBO,目前瀰漫,地位和在世界空間法線,它看起來像這樣:在OpenGL中延遲着色?
這是通過以下設置對所有樹的紋理進行:
dsShader->bind();
dsShader->enableVertexAttribArrays();
ds->diffuse->bind(GL_TEXTURE0); // "ds" is an FBO containing the textures
ds->position->bind(GL_TEXTURE0+1);
ds->normal->bind(GL_TEXTURE0+2);
dsShader->sendUniform("diffuse", 0);
dsShader->sendUniform("position", 1);
dsShader->sendUniform("normal", 2);
dsShader->sendUniform("camera", camera3D->position.x, camera3D->position.y, camera3D->position.z);
dsOut->indexBuffer->bind();
dsOut->vertex2Buffer->bind();
dsOut->vertex2Buffer->vertexAttribPointer(dsShader->getAttribLocation("vertex0"), 2, GL_FLOAT, false, 0, 0);
glDrawElements(GL_TRIANGLES, dsOut->indexBuffer->size(), GL_UNSIGNED_INT, 0);
ds->diffuse->unbind();
ds->position->unbind();
ds->normal->unbind();
dsShader->disableVertexAttribArrays();
dsShader->unbind();
用下面的着色器(剛:
diffuse = std::shared_ptr<bb::Texture>(new bb::Texture(GL_TEXTURE_2D)); // generates texture ID
diffuse->bind();
diffuse->texture2D(0, GL_RGB, width, height, 0, GL_RGB, GL_FLOAT, 0); // glTexture2D
diffuse->parameterf(GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
diffuse->parameterf(GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
diffuse->parameterf(GL_TEXTURE_MIN_FILTER, GL_LINEAR);
diffuse->parameterf(GL_TEXTURE_MAG_FILTER, GL_LINEAR);
diffuse->unbind();
texture2D(GL_COLOR_ATTACHMENT0+1, diffuse->getID(), 0);
然後這些在我的畫階段使用所需要的部分時,光源被硬編碼):
struct DirLight{
vec3 direction;
vec4 diffuse, specular;
};
uniform sampler2D diffuse;
uniform sampler2D position;
uniform sampler2D normal;
uniform vec3 camera;
DirLight light0 = DirLight(vec3(1, 1, 0), vec4(0.3), vec4(0.1));
in vec2 vertex;
void main(){
vec4 color = texture(diffuse, vertex)*0.5;
vec3 p = vec3(texture(position, vertex));
vec3 n = normalize(vec3(texture(normal, vertex)));
float ndotl = max(dot(n, normalize(light0.direction)), 0.0); // simple phong
if(ndotl > 0.0){
color += ndotl*light0.diffuse;
}
gl_FragColor = color;
}
的怪異部分,如果我的光源方向設置爲負值,可以說:
DirLight light0 = DirLight(vec3(-1, 0, 0), vec4(0.3), vec4(0.1));
最終的結果是不陰影。它看起來正確的價值(或多或少)。 下面是輸出的圖片:
而且有也可能是與法線的問題,標誌着紅色區域。
這聽起來像是你的法線問題。你有沒有嘗試渲染場景,沒有延期着色? – Gurgadurgen
是的,我試過了,沒問題。您可以在第一張圖片中看到所有樹紋理的輸出。我忘記提及的是我的z軸是上軸。 – Kugel
看起來你的法線在第一個中是相反的。我會建議嘗試解決這個問題,首先,然後再次回來並測試負值。 – Gurgadurgen