bump mapping(采用MultiPass和MultiTex实现)

原创 2007年09月11日 17:01:00

知道什么是凹凸贴图是怎么回事,也知道浮雕和点乘凹凸贴图的理论计算,也做过个简单的相关shader。可一直来不知道怎么通过MultiPass及MultiTex来实现。(其实一直不知道,稍微高级点的,NEHE中22课也有相关的,可惜看着很累,讲解不透彻,一些语句没法读通),今天有幸找到一个例子,而且那位作者很认真,不仅给出完整的实例,也给了相应的理论分析。于是也摘录点,与大家一起分享。

那位作者的链接:http://www.paulsprojects.net/tutorials/simplebump/simplebump.html

学习之余,我也贴上一点。

  //bump texture
  glActiveTextureARB(GL_TEXTURE0_ARB);
  glBindTexture(GL_TEXTURE_2D, texID[1]);//texID[1] for bump texture
  glEnable(GL_TEXTURE_2D);
  glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
  glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_TEXTURE);
  glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_REPLACE);
  

 //restore for tangent light vector (see paul's project)
  const float rate=1.0;
  GLfloat lightPos[4]={0.36*rate, 0.48*rate, 0.8*rate, 0.0};
  glActiveTextureARB(GL_TEXTURE1_ARB);
  glEnable(GL_TEXTURE_2D);
  glBindTexture(GL_TEXTURE_2D, texID[1]);//为什么一定要绑定纹理?
  glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
  glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_CONSTANT);
  glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB, GL_PREVIOUS);
  glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_DOT3_RGB);
  glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, lightPos);

  //base texture
   glActiveTextureARB(GL_TEXTURE2_ARB);
   glBindTexture(GL_TEXTURE_2D, texID[0]);//texID[0] for base texture
   glEnable(GL_TEXTURE_2D);
   glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
   glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_TEXTURE);
   glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB, GL_PREVIOUS);
   glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_MODULATE);

//draw  
  glBegin(GL_POLYGON);
   glMultiTexCoord2fARB(GL_TEXTURE0_ARB,0.0, 0.0);
   glMultiTexCoord2fARB(GL_TEXTURE1_ARB,0.0, 0.0);
   glMultiTexCoord2fARB(GL_TEXTURE2_ARB,0.0, 0.0);
   glVertex3f(-1.0, -1.0, 0.0);
   glMultiTexCoord2fARB(GL_TEXTURE0_ARB,1.0, 0.0);
   glMultiTexCoord2fARB(GL_TEXTURE1_ARB,1.0, 0.0);
   glMultiTexCoord2fARB(GL_TEXTURE2_ARB,1.0, 0.0);
   glVertex3f(1.0,-1,0.0);
   glMultiTexCoord2fARB(GL_TEXTURE0_ARB,1.0, 1.0);
   glMultiTexCoord2fARB(GL_TEXTURE1_ARB,1.0, 1.0);
   glMultiTexCoord2fARB(GL_TEXTURE2_ARB,1.0, 1.0);
   glVertex3f(1.0,1.0,0.0);
   glMultiTexCoord2fARB(GL_TEXTURE0_ARB,0.0, 1.0);
   glMultiTexCoord2fARB(GL_TEXTURE1_ARB,0.0, 1.0);
   glMultiTexCoord2fARB(GL_TEXTURE2_ARB,0.0, 1.0);
   glVertex3f(-1.0,1.0,0.0);
  glEnd();

  glActiveTextureARB(GL_TEXTURE2_ARB);
  glDisable(GL_TEXTURE_2D);
  glActiveTextureARB(GL_TEXTURE1_ARB);
  glDisable(GL_TEXTURE_2D);
  glActiveTextureARB(GL_TEXTURE0_ARB);
  glDisable(GL_TEXTURE_2D);

本来也学他作两个pass的,搞了半天也没弄明白为什么在vc6.0下,他第一个pass始终不和第二个pass混合。

混合方式:glBlendFunc(GL_DST_COLOR, GL_ZERO);  glEnable(GL_BLEND);

同时显示两个pass时,他只绘制了第一个。而在vc2005中,感觉和他的代码基本一样。

编写了之后,还是算有点小小的明白了吧。希望对你也有帮助^_^

凹凸映射 Bump mapping(unityshader入门精要学习笔记)

凹凸映射 Bump mapping 使用一张法线纹理(normal map)来直接存储表面法线,又被称为法线映射。 由于法线纹理中存储的法线是切线空间下的方向,因此有2 种选择: 1.在切线空间下进行...
  • u013354943
  • u013354943
  • 2016年10月10日 17:41
  • 1719

凹凸贴图(Bump Map)实现原理以及与法线贴图(Normal Map)的区别

凹凸贴图(Bump Map)实现原理 以及与法线贴图(Normal Map)的区别 1 前言 翻译这篇教程的目的是为了帮助那些对图形渲染技术有兴趣却又苦于找不到免费中文学习资料的...
  • meegomeego
  • meegomeego
  • 2013年02月23日 14:40
  • 21117

凹凸材质:从Bump Map 到 Relief Map

参考 1、Bump Mapping综述 2、Unity3D ShaderLab开发实战详解 写在前面         其实搞清了切线空间的问题之后,凹凸贴图这个论题就没有什么特别的难点...
  • ronintao
  • ronintao
  • 2016年08月22日 01:26
  • 1128

凹凸映射Bump Mapping

凹凸映射和纹理映射非常相似。然而,纹理映射是把颜色加到多边形上,而凹凸映射是把粗糙信息加到多边形上。这在多边形的视觉上会产生很吸引人的效果。我们只需要添加一点信息到本来需要使用大量多边形的物体上。需要...
  • thenile
  • thenile
  • 2013年04月27日 12:29
  • 861

凹凸贴图(bump mapping)综述

What`s Bump Mapping? Bump Mapping通过改变几何体表面各点的法线,使本来是平的东西看起来有凹凸的效果,是一种欺骗眼睛的技术:)。 我们知道,如果几何体表面有高低不平的凹凸...
  • u011988946
  • u011988946
  • 2013年10月04日 19:58
  • 1541

[翻译] 凹凸贴图(bump mapping) 节选自RTR 6.7

这一节特别有趣,而且目测比较难懂,决定发动翻译大法 6.7 综述这一节描述了一系列的小尺寸细节表达技术,统称为凹凸贴图 bump mapping。所有这些技术都通过每像素着色的程序来完成的。它们可以给...
  • YgritteSnow
  • YgritteSnow
  • 2016年08月10日 20:00
  • 698

(Shadow Mapping) 阴影映射原理与实现

阴影贴图(Shadow mapping)是在三维计算机图形中加入阴影的过程。阴影贴图的概念最初是由 Lance Williams 于 1978年在“在曲面上投射阴影”这篇论文中提出的。从那时开始,这...
  • xiaoge132
  • xiaoge132
  • 2016年05月20日 07:51
  • 2867

凹凸映射(Bump Map)实现原理

James EBlinn在1978年提出了凹凸纹理映射技术的思想基础。这种方法并不是真正改变了物体表面的几何外观,而是在通过扰动物体表面的法向量来实现具有凹凸感的假象。 我翻译这篇教程的目的是为了帮...
  • whucv
  • whucv
  • 2013年06月18日 22:06
  • 1265

Cache 功能、映射方法

cache是一种高速缓冲寄存器,是为解决CPU和主存之间速度不匹配而采用的一项重要技术。 主存与cache的地址映射方式有全相联方式、直接方式和组相联方式三种。...
  • jxq0816
  • jxq0816
  • 2014年01月04日 21:05
  • 1913

晶圆级封装(WLCSP) & 倒片封装(Flip-Chip)

上一篇文章《封装/package》把封装的分类和大概的框架基本上讲完了,这里在专门讲一下现在比较流行的CSP封装和Flip-Chip封装吧。 受电子产品的小、轻、薄的驱动,封装领域也是不断开发出新的...
  • pengwangguo
  • pengwangguo
  • 2016年09月19日 16:43
  • 6542
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:bump mapping(采用MultiPass和MultiTex实现)
举报原因:
原因补充:

(最多只允许输入30个字)