查看: 2054|回复: 8

多纹理的问题

[复制链接]

该用户从未签到

发表于 2009-8-18 17:59:21 | 显示全部楼层 |阅读模式
刚开始用osg,好多都不明白。

多纹理映射时是所有顶点都要在每一个纹理上有对应坐标吗?
比如我有三张纹理图
有的面要用其中某一张贴
有的要用某几张的加权平均
有的都贴不了要显示黑色
可以做到吗?
如果可以要怎么设定呢?
关键我不明白的是一个顶点对于不需要的纹理应该没有对应坐标,但是如果不写这个坐标,整体上其他顶点的坐标与纹理是不是就对应不起来了?我把没用的都写成0试了一下,结果所有面都变虚了……
另外我还想根据观察点的不同改变纹理加权的权重,这样可以不……

该用户从未签到

发表于 2009-8-18 20:58:06 | 显示全部楼层
“多纹理映射时是所有顶点都要在每一个纹理上有对应坐标吗”,通常是这样
或者您可以用着色语言来做更灵活的控制。
设置权重建议也使用着色语言,比传统的方法要简单得多

该用户从未签到

 楼主| 发表于 2009-8-19 11:06:20 | 显示全部楼层
感谢版主

但是着色语言我也不会……查了半天还是很晕……
能不能举个简单的例子
比如我就画一个面,有3张纹理,还有数组存放了纹理的权重比如是a={0.5,0,0.5}
面三个顶点,和对应的三组纹理坐标都已经存好了
我的着色器的程序要如何写?

该用户从未签到

发表于 2009-8-19 12:23:50 | 显示全部楼层
您需要一步一步来,先好好学习着色语言吧。
否则的话,即使提供给您形同
  1. gl_Color = 0.5 * texture2D(sampler1, texcoord1) + 0.0 * texture2D(sampler2, texcoord2) + 0.5 * texture2D(sampler3, texcoord3)
复制代码
的代码。您可能也不能立即理解其中的意思

该用户从未签到

 楼主| 发表于 2009-8-19 13:14:47 | 显示全部楼层
这种根据不同需要具体运算的代码我可以理解
关键我晕的是参数怎么传进去,
像权重应该是从外面传的,
而每个纹理对应的颜色是不是用该是内部传过去的,
我在网上只能找到glsl的教程,都是用opengl写的main函数存成文件,
查osg关于这方面的就是直接读文件,不说文件里写了什么,
对于封装好的osg编程时那些内部参数的名称还是用opengl的么……
说白了我就是不知道内部的参数都叫什么,还有外部的参数怎么传进去……
我觉得外部参数传进去是件很神奇的事……

唉我知道我很小白,现在在大三实习,以前从没接触计算机图形学,
现在从0学起,不过实习一共才5周,没时间系统的学呀~~~
真是给您添麻烦了……………………

该用户从未签到

发表于 2009-8-19 14:11:41 | 显示全部楼层
GLSL与用户程序的数据交换使用uniform变量,即,着色器中定义并使用uniform一致变量;而用户程序中将一致变量与外部变量相关联;但是如果外部变量需要更新,则必须再次更新关联的数据。osg中使用Uniform类完成这些工作,没什么神奇的,看osgshaders例子就全都明白了。

该用户从未签到

 楼主| 发表于 2009-8-20 16:16:05 | 显示全部楼层
谢谢版主 我基本搞定了
再问最后一个问题……
传纹理的时候我能不能一下把一组纹理一起传,就像传数组一样可以用xxx[i]这种形式访问?
我看的例子不同纹理都是不同的名字……这样没法做循环……

该用户从未签到

发表于 2009-8-20 16:54:13 | 显示全部楼层
不可以。最新的显卡驱动可能支持uniform数组,但是大多数似乎都还不支持

该用户从未签到

 楼主| 发表于 2009-8-21 15:03:57 | 显示全部楼层
本帖最后由 shika 于 2009-8-21 15:15 编辑

刚才犯傻了 改一下……

总之谢谢版主大人~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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