我正在尝试在GLSL片段和顶点着色器中创建类似于下图的灰泥纹理。
我知道有多种方法可以实现这一目标。但是,我想根据从噪声函数接收的值,专注于扰乱片段着色器中的曲面法线。
我的思考过程如下......
但是,我不知道我从哪里去。
这是我到目前为止所拥有的。
顶点着色器 - 计算“切线”是一种辅助方法,用于根据对象范数构建切线向量。
#version 120
varying vec3 LightDir;
varying vec3 EyeDir;
varying vec3 MCPoint;
main(){
MCPoint = gl_Vertex.xyz;
EyeDir = vec3(gl_ModelViewMatrix * gl_Vertex);
vec3 LightPosition = gl_LightSource[0].position.xyz;
vec3 tangent = calculateTangent(gl_Normal);
// Building the Tangent matrix
vec3 n = normalize(gl_NormalMatrix * gl_Normal);
vec3 t = normalize(gl_NormalMatrix * tangent);
vec3 b = cross(n, t);
vec3 v;
v.x = dot(LightPosition, t);
v.y = dot(LightPosition, b);
v.z = dot(LightPosition, n);
LightDir = normalize(v);
v.x = dot(gl_vertex.xyz, t);
v.y = dot(gl_Vertex.xyz, b);
v.z = dot(gl_Vertex.xyz, n);
EyeDir = normalize(v);
gl_Position = ftransform();
}
片段着色器 - 到目前为止......
#version 120
varying vec3 LightDir;
varying vec3 EyeDir;
varying vec3 MCPoint;
main(){
vec2 _noisexy = noise2(MCPoint.xy * 1.65);
// offset normal
// Calculate phong shading based on LightDir, EyeDir, & Newly distorted Normal
gl_FragColor= intensity * vec4(my_surface_color, 1.0);
}
现在,我的实际问题。
我抵消了什么正常情况?我会将物体偏移正常吗?我一直在阅读凹凸贴图应该在对象空间中进行。
将偏移应用于正常情况的最佳方法是什么?
一些系统信息: Mac OSX - OpenGL 3.2 - Shader必须能够处理没有新3.2支持的旧Mac。