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) 节选自RTR 6.7

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

Bump / Normal / Displacement / Parallax Mapping

bump mapping : 计算点p的光强时不是直接使用p点的原始法向Np,而是在Np上加上一个小的扰动得到Np’,能够产生凹凸不平的表面效果。如何增加扰动也是用一张图像存储,即bump map。和...

Bump Mapping

Bump mapping is very much like Texture Mapping. However, where Texture Mapping added colour to a pol...

Material - Bump Mapping

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

OpenGL学习笔记:bump mapping

bump mapping是为了制作浮雕效果。(In 1978, James Blinn presented a method of performing what is called bump map...

Bump Mapping概述

1. 概述    无论是程序员还是美工人员,几乎每个游戏开发者都知道一些3D图形学的知识,因此每个人都或多或少了解一点bump mapping。Bump mapping是在像素级别扰动物体表面法向量的...
  • cnjet
  • cnjet
  • 2011年01月18日 16:58
  • 467

ZFXEngine开发笔记之Bump Mapping(1)

详细讲解Bump Mapping中关于将高度图转化为法线贴图的过程。

Emboss bump mapping (浮雕效果)

/* This Code Was Created by Jens Schneider (WizardSoft) 2000 * Lesson22 to the series of OpenGL...

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

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

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

我翻译这篇教程的目的是为了帮助那些对图形渲染技术有兴趣却又苦于找不到免费中文学习资料的人。在我的身边没有任何一位从事计算机专业的前辈,从刚学会 WINDOWS的基本操作到现在,我的计算机技术完全都是一...
  • weiqubo
  • weiqubo
  • 2011年11月28日 11:27
  • 1260
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:bump mapping(采用MultiPass和MultiTex实现)
举报原因:
原因补充:

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