В настоящее время я пытаюсь реализовать Bump Mapping для моего OpenGL Project. Проблема в том, что те же части моего куба черные. Как показано на картинке: Bump Отображение черных фрагментов
Я почти уверен, что я просто не понимаю, как работают шейдеры, поэтому я использовал шейдер из OpenGL Superbible. Вот мой код: Vertex Shader
#version 330
layout(location = 0) in vec4 position;
layout(location = 1) in vec3 normal;
layout(location = 2) in vec2 texCoord;
layout(location = 3) in vec3 tangent;
layout(location = 4) in vec3 bitangent;
uniform mat4 matModel;
uniform mat4 matNormal;
uniform mat4 matMVP;
uniform mat4 matMV;
uniform vec3 light_pos = vec3(0.0,0.0,100.0);
out VS_OUT{
vec3 eyeDir;
vec3 lightDir;
vec2 fragTexCoord;
} vs_out;
void main()
{
vec4 P = matMV*position;
vec3 V = P.xyz;
vec3 L = normalize(light_pos - P.xyz);
vec3 N = normalize(mat3(matNormal)*normal);
vec3 T = normalize(mat3(matNormal)*tangent);
vec3 B = cross(N,T);
vs_out.lightDir = normalize(vec3(dot(L,T),
dot(L,B),
dot(L,N)));
V = -P.xyz;
vs_out.eyeDir = normalize(vec3(dot(V,T),
dot(V,B),
dot(V,N)));
vs_out.fragTexCoord = texCoord;
gl_Position = matMVP * position;
}
И пиксельный шейдер:
#version 330
uniform sampler2D diffuseTex;
uniform sampler2D heightTex;
uniform vec3 heightColor;
in vec3 fragNormal;
in vec2 fragTexCoord;
in vec3 tangent_out_normalized;
in vec3 bitangent_out;
in vec3 normal_out_normalized;
in VS_OUT{
vec3 eyeDir;
vec3 lightDir;
vec2 fragTexCoord;
}fs_in;
out vec4 outputColor;
void main()
{
vec3 V = normalize(fs_in.eyeDir);
vec3 L = normalize(fs_in.lightDir);
vec3 N = normalize(texture(heightTex,fs_in.fragTexCoord).rgb*2-vec3(1.0));
vec3 R = reflect(-L,N);
vec3 diffuse_albedo = texture(diffuseTex,fs_in.fragTexCoord).rgb;
vec3 diffuse =max(dot(N,L),0)*diffuse_albedo;
vec3 specular_albedo = vec3(1.0);
vec3 specular = max(pow(dot(R,V),25.0),0.0)*specular_albedo;
outputColor = vec4(diffuse+specular,1);
}
Что мне не хватает?
«* Я почти уверен, что я просто не понимаю, как работают шейдеры, поэтому я использовал шейдер из OpenGL Superbible. *« Итак. Вы ничего не понимаете, поэтому вы просто копируете и вставляете его, и когда это не сработает, вы говорите нам, чтобы понять это для вас? –
Хорошая цитата. Я просто попросил о помощи, чтобы выяснить, что я пропал. Если я не копировал и не вставлял, потому что у меня было несколько реализаций и были получены те же результаты, этот пример должен просто упростить код. – greedsin
Из моего опыта черный - очень плохой фон для отладки. Вы не знаете, прозрачен ли ваш объект или просто черный. –