일반 매핑 구현에서 다음과 같은 몇 가지 중요한 측면을 간과했을 수 있습니다.
색상 혼합:
주변 및 반사광:
함수:
#version 430 uniform sampler2D diffuseMap; uniform sampler2D normalMap; uniform mat4 ModelMatrix; uniform vec3 CameraPosition; uniform struct Light { float ambient; vec3 position; } light; uniform float shininess; in vec2 fsCoords; in vec3 fsVertex; in mat3 TBNMatrix; out vec4 color; void main() { // Base color vec3 brownColor = vec3(153.0 / 255.0, 102.0 / 255.0, 51.0 / 255.0); vec3 baseColor = brownColor + 0.25; // Add a fixed base color // Normal vec3 normal = texture(normalMap, fsCoords).rgb * 2.0 - 1.0; // Surface position and lighting vec3 surfacePos = vec3(ModelMatrix * vec4(fsVertex, 1.0)); vec3 surfaceToLight = normalize(TBNMatrix * (light.position - surfacePos)); // Unit vector vec3 eyePos = TBNMatrix * CameraPosition; // Diffuse float diffuse = max(0.0, dot(normal, surfaceToLight)); // Specular float specular; vec3 incidentVector = -surfaceToLight; // Unit vec3 reflectionVector = reflect(incidentVector, normal); // Unit vector vec3 surfaceToCamera = normalize(eyePos - surfacePos); // Unit vector float cosAngle = max(0.0, dot(surfaceToCamera, reflectionVector)); if (diffuse > 0.0) specular = pow(cosAngle, shininess); // Lighting vec3 finalColor = baseColor * light.ambient; finalColor += (diffuse + specular) * light.position; // Output color color = vec4(finalColor, 1.0); }
위 내용은 내 노멀 매핑이 잘못 렌더링되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!