向树添加纹理(由球体和圆柱体表示)

时间:2013-05-27 07:35:12

标签: opengl opengl-3

我正在使用球体和圆柱渲染树,我使用法线贴图来绘制树皮纹理 在球体和圆柱体上。下面是我的顶点着色器:

// 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);
}

但我得到的是一个丑陋的效果: enter image description here 任何人都可以告诉我如何使凹凸贴图平滑吗?

0 个答案:

没有答案