游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1286|回复: 0

glsl shader 范围

[复制链接]

17

主题

34

帖子

34

积分

注册会员

Rank: 2

积分
34
发表于 2007-5-28 11:04:00 | 显示全部楼层 |阅读模式
Hi:
首先,我把代码贴上来哈

  1. glPushAttrib(GL_ALL_ATTRIB_BITS);
  2. DrawCubeBox();
  3. glPopAttrib();
  4. glEnable(GL_LIGHTING);
  5. glPushAttrib(GL_ALL_ATTRIB_BITS);

  6. glActiveTexture(GL_TEXTURE0);
  7. glBindTexture(GL_TEXTURE_2D, decal);
  8. glActiveTexture(GL_TEXTURE1);
  9. glBindTexture(GL_TEXTURE_2D, base);
  10. glBegin(GL_QUADS);
  11. glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f);
  12. glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f);
  13. glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f);
  14. glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f);
  15. glEnd();
复制代码

我写的shader只希望对四边形有影响;但是最后结果确对DrawCubeBox也有影响啊。怎么将shader范围控制在四边形的范围内呢?后来,我在渲染完四边形后,还贴加了

  1. glDeleteObjectARB(v);
  2. glDeleteObjectARB(p);
  3. glDetachObjectARB(p, v);
  4. glDetachObjectARB(p, f);
复制代码

也没有效果。于是,我就将连接的代码放在前面,结果确是不符合shader效果。片元shader为:
uniform sampler2D TextureUnit0;
uniform sampler2D TextureUnit1;
void main()
{
vec4 value1 = texture2D(TextureUnit0, gl_TexCoord[0]);
vec4 value2 = texture2D(TextureUnit1, gl_TexCoord[1]);
if(tex1.x >= 0.2 && tex1.y >= 0.2 &&
tex1.x <= 0.8 && tex1.y <= 0.8)
gl_FragColor = value2;
else
gl_FragColor = value1;
}

3Q
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-26 08:07

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表