BumpTexture

1. 新建一个OpenGL 空effect;

2. 添加相关变量

右击Effect节点选择Add Variable->float->float / float3 添加镜面光强度、灯光位置和相机位置参数:

float fSpecularPower = 25.0;

float3 vec3LightPosition = {-100.0,100.0,100.0};

float3 vec3EyePosition = {0,0,100.0};

右击Effect节点选择AddTexture->Add 2DTexture 添加base和bump两张纹理图片:

Fieldstone.tga   ---->  base

FieldstoneBumpDOT3.tga  -----> bump

右击Effect节点选择Add Variable->Color 添加 环境光、散射光、镜面光颜色

fvAmbient  = {0.3,0.3, 0.3};

fvDiffuse = {0.86,0.86,0.86};

fvSpecular = {0.57,0.56,0.58};

3. 修改Stream Mapping 中 添加NORMAL、TexCoord 、 BINORMAL、TANGENT

4. 在pass0中添加纹理对象 AddTextureObject 将base和bump图片添加进去,重新命名为baseMap和bumpMap

5. 修改vertex shader :

uniform vec3 vec3LightPosition;
uniform vec3 vec3EyePosition;

varying vec2 texcoord;
varying vec3 viewDirection;
varying vec3 lightDirection;

attribute vec3 rm_BiNormal;
attribute vec3 rm_Tangent;

void main(void)
{
   gl_Position = ftransform();
   
   texcoord = gl_MultiTexCoord0.xy;
   vec4 fvObjectPosition = gl_ModelViewMatrix * gl_Vertex;
   
   vec3 fviewDirection = normalize(vec3EyePosition - fvObjectPosition.xyz);
   vec3 flightDirection = normalize(vec3LightPosition - fvObjectPosition.xyz);
   
   vec3 fvNormal = gl_NormalMatrix * gl_Normal;
   vec3 fvBiNormal = gl_NormalMatrix * rm_BiNormal;
   vec3 fvTangent = gl_NormalMatrix * rm_Tangent;
   
   viewDirection.x = dot(fvTangent, fviewDirection);
   viewDirection.y = dot(fvBiNormal, fviewDirection);
   viewDirection.z = dot(fvNormal, fviewDirection);
   
   lightDirection.x = dot(fvTangent, flightDirection);
   lightDirection.y = dot(fvBiNormal, flightDirection);
   lightDirection.z = dot(fvNormal, flightDirection);   
}

6.修改pixel shader:

uniform vec4 fvAmbient;
uniform vec4 fvSpecular;
uniform vec4 fvDiffuse;
uniform float fSpecularPower;

uniform sampler2D baseMap;
uniform sampler2D bumpMap;

varying vec2 Texcoord;
varying vec3 ViewDirection;
varying vec3 LightDirection;

void main( void )
{
   vec3  fvLightDirection = normalize( LightDirection );
   vec3  fvNormal         = normalize( ( texture2D( bumpMap, Texcoord ).xyz * 2.0 ) - 1.0 );
   float fNDotL           = dot( fvNormal, fvLightDirection );
   
   vec3  fvReflection     = normalize( ( ( 2.0 * fvNormal ) * fNDotL ) - fvLightDirection );
   vec3  fvViewDirection  = normalize( ViewDirection );
   float fRDotV           = max( 0.0, dot( fvReflection, fvViewDirection ) );
   
   vec4  fvBaseColor      = texture2D( baseMap, Texcoord );
   
   vec4  fvTotalAmbient   = fvAmbient * fvBaseColor;
   vec4  fvTotalDiffuse   = fvDiffuse * fNDotL * fvBaseColor;
   vec4  fvTotalSpecular  = fvSpecular * ( pow( fRDotV, fSpecularPower ) );
 
   gl_FragColor = ( fvTotalAmbient + fvTotalDiffuse + fvTotalSpecular );      
}

7. 效果图

最新文章

  1. jQuery判断一个字符串中是否包含一个字符串(一)
  2. 基于XMPP的IOS聊天客户端程序
  3. Extjs 使用图标字体来美化按钮)
  4. shell 内网主机存活探测器
  5. [转]Delphi执行CMD命令
  6. Apache CXF多个远程拒绝服务漏洞(CVE-2013-2160)
  7. 动态规划:NOI2013 快餐店
  8. Android各种屏幕分辨率(VGA、HVGA、QVGA、WQVGA、WVGA、FWVGA) 具体解释
  9. 在ASP.NET应用中执行后台任务
  10. windows 7 & protobuf 3.0 & python 3.5
  11. SignalR的一点点东西
  12. window7使用svn(svn系列 客户端 知识二总结)
  13. 读书笔记 effective c++ Item 51 实现new和delete的时候要遵守约定
  14. HTML5入门(一)—— 基本标签&表格
  15. elasticsearch 基础语句
  16. 5大UX设计谬论,如何去补救?
  17. 【WebApi系列】浅谈HTTP
  18. CF 741D. Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths [dsu on tree 类似点分治]
  19. hdu5493 树状数组+二分
  20. OnSen UI结合AngularJs打造”美团"APP"订单”页面 --Hybrid App

热门文章

  1. f'lask源码
  2. hdu 1003(最大子段和)
  3. 遇见Python.h: No such file or directory的解决方法
  4. python语言的模块化
  5. virtualbox测试k8s要注意的情况
  6. jQuery源码浅析
  7. docker容器中文件的上传与下载
  8. Flask实战第41天:发送短信验证码
  9. Kali Linux WPScan更新到2.9.3
  10. 【POJ 2409】 Let it Bead(置换、burnside引理)