游戏开发论坛

 找回密码
 立即注册
搜索
查看: 10213|回复: 5

GLSL中sampler2D有数量限制吗?

[复制链接]

29

主题

157

帖子

163

积分

注册会员

Rank: 2

积分
163
发表于 2008-5-10 21:59:00 | 显示全部楼层 |阅读模式
做地形渲染, 里面有2个以上sampler2D时渲染结果就不对了。

以下是fs代码


  1. uniform sampler2D detailMap1;   /*细节纹理*/
  2. uniform sampler2D lightMap;     /*光照贴图*/  
  3. uniform sampler2D detailInfo;   /*细节纹理分布图*/

  4. uniform float fTexScale;

  5. void main(void)
  6. {

  7.     vec3 vInfo = vec3(texture2D(detailInfo, gl_TexCoord[0].xy)); /*获取细节纹理的分布信息*/

  8.      /*根据分布信息中的权重,调整细节纹理的颜色*/
  9.     vec3 vColor = vInfo.x * vec3(texture2D(detailMap1, gl_TexCoord[0].xy));

  10.      /*获取光照贴图的数据*/
  11.     vec3 vLight = vec3(texture2D(lightMap, gl_TexCoord[0].xy));

  12.      /*合并为最终颜色*/
  13.     gl_FragColor = vec4(vColor * vLight.x, 1.0);
  14. }

复制代码


以上代码渲染后的结果竟然是把detailInfo给渲染上去了, 而我试验了一下,如果去掉detailInfo,在只有两个或1个sampler2D的情况下,合并颜色都是正确的。

我的显卡是 ATI MOBILITY RADEON X300 , 莫非只支持两个sampler2D ?
还是有什么设置没打开?
注:我没有使用glActiveTexture等多纹理函数

29

主题

157

帖子

163

积分

注册会员

Rank: 2

积分
163
 楼主| 发表于 2008-5-10 22:12:00 | 显示全部楼层

Re: GLSL中sampler2D有数量限制吗?


又测试了一下,这次更直接,渲染结果是把detailInfo给渲染出来,汗,好像是只要sampler2D大于两个,后面的sampler2D会把前面的全给覆盖掉。



  1. uniform sampler2D detailMap1;
  2. uniform sampler2D lightMap;
  3. uniform sampler2D detailInfo;

  4. uniform float fTexScale;

  5. void main(void)
  6. {

  7.     vec3 vInfo = vec3(texture2D(detailInfo, gl_TexCoord[0].xy));

  8.     vec3 vColor = vec3(texture2D(detailMap1, gl_TexCoord[0].xy));

  9.     vec3 vLight = vec3(texture2D(lightMap, gl_TexCoord[0].xy));

  10.     gl_FragColor = vec4(vColor, 1.0);
  11. }

复制代码

29

主题

157

帖子

163

积分

注册会员

Rank: 2

积分
163
 楼主| 发表于 2008-5-10 22:17:00 | 显示全部楼层

Re:GLSL中sampler2D有数量限制吗?

由于急着用,决定把光照图合并到细节纹理分布图的alpha通道里,把细节纹理打包到一个大纹理上去,这样就只有两个纹理了。

不过希望哪位高人能就上面的问题给个答案,我想知道是自己使用方法的问题,还是GLSL的问题,或者是显卡问题。省的下回再郁闷。

29

主题

157

帖子

163

积分

注册会员

Rank: 2

积分
163
 楼主| 发表于 2008-5-13 15:32:00 | 显示全部楼层

Re:GLSL中sampler2D有数量限制吗?

这个已经搞定了,还是要谢谢楼上的。
出错的原因是没有用ActiveTexture,应该是每个纹理单元绑一个纹理的。我给全绑定到TEXTURE0了。

但我记得以前用cg的时候好像就不用ActiveTexture,直接把纹理绑到sampler就行了,烦~

1

主题

2

帖子

6

积分

新手上路

Rank: 1

积分
6
发表于 2009-11-24 21:03:00 | 显示全部楼层

Re:GLSL中sampler2D有数量限制吗?

cO_olWinD  texture2D没有问题吗??

请问怎么设置的???

227

主题

1793

帖子

1866

积分

金牌会员

Rank: 6Rank: 6

积分
1866
发表于 2009-11-30 09:00:00 | 显示全部楼层

Re:GLSL中sampler2D有数量限制吗?

搜索关键字 glsl 多重纹理,或者你去买一本橙宝书
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-17 21:58

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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