查看: 2977|回复: 10

GLSL 纹理问题

[复制链接]

该用户从未签到

发表于 2009-12-24 11:26:18 | 显示全部楼层 |阅读模式
如果 在一个地形 模型中 有 很多的 纹理,如 树木 房子等等

在GLSL中 如何判断当前顶点 的纹理坐标是树木的 还是房子的?

该用户从未签到

发表于 2009-12-24 12:17:47 | 显示全部楼层
GLSL中无从判断顶点是属于哪个对象的,除非您自己用uniform变量去标识它;不过对于房子和树木,我们完全可以应用不同的着色器

该用户从未签到

 楼主| 发表于 2009-12-25 15:38:27 | 显示全部楼层
对于 一个模型 有 多片纹理
在GLSL中 纹理坐标(1,1)会不会有多个? GLSL 怎么判断 是第n片纹理的(1,1)?

该用户从未签到

发表于 2009-12-25 16:02:24 | 显示全部楼层
这个取决于您使用的纹理单元坐标,使用gl_MultiTexCoord0就是单元0的,gl_MultiTexCoord1就是单元1,以此类推

该用户从未签到

 楼主| 发表于 2009-12-26 11:30:27 | 显示全部楼层
如果 一个模型分为上下两部分 使用两个不同的 纹理,

gl_MultiTexCoord0指的是哪个纹理呢?

该用户从未签到

发表于 2009-12-26 15:25:20 | 显示全部楼层
这取决于您的模型构建。请牢记一个顶点在一个纹理单元中永远只存在一个纹理坐标,不存在您所说的那种问题

该用户从未签到

 楼主| 发表于 2009-12-27 10:20:46 | 显示全部楼层
我说的详细一些 老大给出一个可以操作的方法:

海军教程中所用的那个坦克(T72-tank.flt) 有上下两部分,  这两部分的的纹理分别为 单元0和单元1
炮管在地上的阴影和坦克在地上的阴影为 单元4和单元5

我想给每一个纹理的象素点 乘以 一个因子 此因子角度,距离等因素有关, 即每一象素点的因子都是不同的, 这个因子存在于外部文件中, 我希望每个一个纹理对应一个构造的Texture2D,  里面包含对应的因子, 这样在GLSL的顶点着色器中查找 因子,  在片元着色器中 乘以这个因子,  但是怎么知道是当前顶点对应哪个纹理单元呢?


另外 我试验过 在程序中设置
osg::Uniform * baseTexture = new osg::Uniform("baseTexture",0);
但是没有指定 0 对应的texture  在GLSL中就会对 所有纹理进行操作

然而
osg::Uniform * baseTexture = new osg::Uniform("baseTexture",1);
模型就消失了 但是模型中存在 纹理单元1 啊

该用户从未签到

发表于 2009-12-27 12:12:38 | 显示全部楼层
这个是你理解的问题,其实整个模型而言不存在多重纹理,所以一个顶点只对应一个纹理,也就是只对纹理单元0的操作有效。

该用户从未签到

 楼主| 发表于 2009-12-27 12:23:16 | 显示全部楼层
tianxiao888  大侠 能知道你的QQ 号吗? 想跟你请教

该用户从未签到

发表于 2009-12-28 09:29:27 | 显示全部楼层
楼主您似乎并没有完全理解GLSL的基本设计方法,请先好好阅读一下《OpenGL着色语言》(橘皮书)。纹理是通过sampler变量来定义的

该用户从未签到

发表于 2009-12-28 10:45:51 | 显示全部楼层
tianxiao888  大侠 能知道你的QQ 号吗? 想跟你请教
cooloboy 发表于 2009-12-27 12:23


我也是菜鸟一个,qq:9276404,可以交流~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表