【问题标题】:OpenGL Bump Mapping not workingOpenGL凹凸贴图不起作用
【发布时间】:2012-10-02 16:04:25
【问题描述】:

我正在尝试将凹凸贴图应用到 2D 纹理,来自我在本教程中看到的代码:http://www.paulsprojects.net/tutorials/simplebump/simplebump.html

我已更改代码以使用我的设置(不使用客户端状态,使用 glVertex 而不是 glDrawElements 绘制顶点等...)但是当我运行程序时,我得到以下输出:

http://www.tiikoni.com/tis/view/?id=cf02ea7

这是代码:(x,y,z,w,h,st 都是有效值)

//Bind normal map to texture unit 0
glBindTexture(GL_TEXTURE_2D, bump->texnum);
glEnable(GL_TEXTURE_2D);

//Bind normalisation cube map to texture unit 1
glActiveTextureARB(GL_TEXTURE1_ARB);
glBindTexture(GL_TEXTURE_CUBE_MAP_ARB, draw_ncm);
glEnable(GL_TEXTURE_CUBE_MAP_ARB);
glActiveTextureARB(GL_TEXTURE0_ARB);

//Set up texture environment to do (tex0 dot tex1)*color
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE);
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE);

glActiveTextureARB(GL_TEXTURE1_ARB);

glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE);
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_DOT3_RGB_ARB);
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PREVIOUS_ARB);

glActiveTextureARB(GL_TEXTURE0_ARB);

glBegin( GL_QUADS );
glTexCoord2f( st[0], st[1] );
glVertex3f( x, y, z );
glTexCoord2f( st[0], st[3] );
glVertex3f( x, y+h, z );
glTexCoord2f( st[2], st[3] );
glVertex3f( x+w, y+h, z );
glTexCoord2f( st[2], st[1] );
glVertex3f( x+w, y, z );
glEnd();

// texture pass
glBindTexture (GL_TEXTURE_2D, pic->texnum);
glBegin( GL_QUADS );
glTexCoord2f( st[0], st[1] );
glVertex3f( x, y, z );
glTexCoord2f( st[0], st[3] );
glVertex3f( x, y+h, z );
glTexCoord2f( st[2], st[3] );
glVertex3f( x+w, y+h, z );
glTexCoord2f( st[2], st[1] );
glVertex3f( x+w, y, z );
glEnd();

【问题讨论】:

  • 你为什么要打扰 glTexEnv?只需使用着色器就可以了!

标签: c visual-studio-2010 opengl windows-7


【解决方案1】:

您是否为正在使用的着色器提供切线向量?您需要为着色器提供对切线矢量属性的访问权限,才能使其正常工作。您还需要为法线贴图定义一个uniform。当我回到家时,我可以完整地回答这个问题,但它比你在这里发布的内容更复杂。另外,您希望遵守什么 OpenGL 核心? 1.x? 2.x? 3.x/4.x?

【讨论】:

  • 我想遵守我的机器上我认为是 4.3 的任何内容
  • 您正在使用折旧的功能(glBegin() 和 glEnd())。尝试浏览swiftless.com 教程。它很好地概述了 4.x 兼容性编程。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-09
  • 2014-01-25
相关资源
最近更新 更多