GLSL - 基于噪声的凹凸贴图

时间:2013-04-19 18:24:31

标签: opengl glsl bump-mapping

我正在尝试在GLSL片段和顶点着色器中创建类似于下图的灰泥纹理。

enter image description here

我知道有多种方法可以实现这一目标。但是,我想根据从噪声函数接收的值,专注于扰乱片段着色器中的曲面法线。

我的思考过程如下......

  1. 发送噪音函数,我的当前位置由某个标量缩放。
  2. 一旦我有噪音,我就可以扰乱表面法线并将其与我的Phong着色模型一起使用。
  3. 但是,我不知道我从哪里去。

    这是我到目前为止所拥有的。

    顶点着色器 - 计算“切线”是一种辅助方法,用于根据对象范数构建切线向量。

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

    现在,我的实际问题。

    1. 我抵消了什么正常情况?我会将物体偏移正常吗?我一直在阅读凹凸贴图应该在对象空间中进行。

    2. 将偏移应用于正常情况的最佳方法是什么?

    3. 一些系统信息: Mac OSX - OpenGL 3.2 - Shader必须能够处理没有新3.2支持的旧Mac。

0 个答案:

没有答案