0

我正在使用球体和圆柱体渲染一棵树,并且我使用法线贴图在球体和圆柱体上映射树皮纹理。下面是我的顶点着色器:

// Normal mapping light shader
// Vertex Shader
#version 130

// Incoming per vertex... position and normal
in vec4 vVertex;
in vec3 vNormal;
in vec4 vTexture0;

uniform mat4   mvpMatrix;
uniform mat4   mvMatrix;
uniform mat3   normalMatrix;
uniform vec3   vLightPosition;

// Color to fragment program
vec3 vEyeNormal;
smooth out vec3 vVaryingLightDir;
smooth out vec2 vTexCoords;

vec3 vTangent = vec3(1.0, 0.0, 0.0);

void main(void) 
{ 
// Tangent Basis
vec3 b, t, v;

// Get surface normal in eye coordinates
vEyeNormal = normalMatrix * vNormal;

// Get vertex position in eye coordinates
vec4 vPosition4 = mvMatrix * vVertex;
vec3 vPosition3 = vPosition4.xyz / vPosition4.w;

// Get vector to light source
vVaryingLightDir = normalize(vLightPosition - vPosition3);

// Build Tangent Basis
t = normalize(normalMatrix * vTangent);
b = cross(vEyeNormal, t);
v.x = dot(vVaryingLightDir, t);
v.y = dot(vVaryingLightDir, b);
v.z = dot(vVaryingLightDir, vEyeNormal);

vVaryingLightDir = normalize(v);

// Pass along the texture coordinates
vTexCoords = vTexture0.st;

// Don't forget to transform the geometry!
gl_Position = mvpMatrix * vVertex;
}

这是片段着色器:

// Normal mapping light shader
// Fragment Shader
#version 130

uniform vec4      ambientColor;
uniform vec4      diffuseColor;   

uniform sampler2D colorMap;
uniform sampler2D normalMap;

smooth in vec3 vVaryingLightDir;
smooth in vec2 vTexCoords;

out vec4 vFragColor;

void main(void)
{ 
vec3 vTextureNormal = texture2D(normalMap, vTexCoords).xyz;
vTextureNormal = (vTextureNormal - 0.5) * 2.0;

// Dot product gives us diffuse intensity
float diff = max(0.0, dot(normalize(vTextureNormal), normalize(vVaryingLightDir)));

// Multiply intensity by diffuse color, force alpha to 1.0
vFragColor = diff * diffuseColor;

// Add in ambient light
vFragColor += ambientColor;
vFragColor.rgb = min(vec3(1.0,1.0,1.0), vFragColor.rgb);

// Modulate in the texture
vFragColor *= texture(colorMap, vTexCoords);
}

但我得到的是一个丑陋的效果: 在此处输入图像描述 谁能告诉我如何使凹凸贴图平滑?

4

0 回答 0