查看: 5272|回复: 7

osgTexture2D ,纹理贴图

[复制链接]

该用户从未签到

发表于 2011-3-10 10:47:33 | 显示全部楼层 |阅读模式
我有一个非常大的四边形,用来描述一个海面,我想在这个巨大的四边形上贴上 海面效果的纹理。如果直接贴上去,纹理很明显是不对的, 如何来设置纹理的UV,用哪个函数来设置呢?
我尝试着改了
osg::Vec2Array* texcoords =
new osg::Vec2Array(4);
(*texcoords)[0].set(0.0f, 0.0f);
(*texcoords)[1].set(1.0f, 0.0f);
(*texcoords)[2].set(1.0f, 1.0f);
(*texcoords)[3].set(0.0f, 1.0f);
geom->setTexCoordArray(0,texcoords);
上面这段代码中的坐标,没有找到预想中的效果。需要做什么样的设置呢?

该用户从未签到

发表于 2011-3-10 11:59:02 | 显示全部楼层
请您给出更详细的信息,,另外,建议您先了解一下OPENGL纹理映射的机制~~~~~~~

该用户从未签到

发表于 2011-3-10 12:02:35 | 显示全部楼层
你需要的是重复纹理是么?那需要texture2d 的setWrap(...) function

该用户从未签到

 楼主| 发表于 2011-3-10 13:11:08 | 显示全部楼层
对,重复纹理的效果。相同的一张纹理,贴在一个很大的面上。
如果用setWrap可以重复贴在面上的话,uv怎么设置呢?

该用户从未签到

 楼主| 发表于 2011-3-10 14:02:46 | 显示全部楼层
我这么理解不知道对不对:
osg的纹理贴图,是按一个面的点的个数去一一对应一个texcood, 一个六边形,那么就需要设置六个texcood的坐标。
我的问题是: 如果我用个 四边形,这个四边形对应有四个顶点,我要把一张贴图贴到这个四边形上去,如果只贴一次很显然,最后纹理效果会有一个巨大的拉升。那么我就需要重复贴这张纹理,每次贴设置的uv坐标都确保不失真。 这样的话,我就需要在这个很大的四边形上来计算uv, 每个uv保证每次贴图都不失真。 那么这个uv的坐标用哪个函数来实现,如何设置。

该用户从未签到

发表于 2011-3-10 14:06:20 | 显示全部楼层
您只要设置大于1的UV坐标就可以了,同时设置了Wrap为REPEAT之后,就可以让贴图重复指定的次数

该用户从未签到

 楼主| 发表于 2011-3-10 14:21:21 | 显示全部楼层
谢谢 array,aya_daxiang ,解决了重复纹理的问题。

该用户从未签到

发表于 2020-12-4 09:23:34 | 显示全部楼层
hjsxixi 发表于 2011-3-10 14:21
谢谢 array,aya_daxiang ,解决了重复纹理的问题。

楼主,重复纹理贴图需要增加顶点个数嘛?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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