hjsxixi 发表于 2011-3-10 10:47:33

osgTexture2D ,纹理贴图

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

FlySky 发表于 2011-3-10 11:59:02

请您给出更详细的信息,,另外,建议您先了解一下OPENGL纹理映射的机制~~~~~~~

aya_daxiang 发表于 2011-3-10 12:02:35

你需要的是重复纹理是么?那需要texture2d 的setWrap(...) function

hjsxixi 发表于 2011-3-10 13:11:08

对,重复纹理的效果。相同的一张纹理,贴在一个很大的面上。
如果用setWrap可以重复贴在面上的话,uv怎么设置呢?

hjsxixi 发表于 2011-3-10 14:02:46

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

array 发表于 2011-3-10 14:06:20

您只要设置大于1的UV坐标就可以了,同时设置了Wrap为REPEAT之后,就可以让贴图重复指定的次数

hjsxixi 发表于 2011-3-10 14:21:21

谢谢 array,aya_daxiang ,解决了重复纹理的问题。

wuvalue 发表于 2020-12-4 09:23:34

hjsxixi 发表于 2011-3-10 14:21
谢谢 array,aya_daxiang ,解决了重复纹理的问题。

楼主,重复纹理贴图需要增加顶点个数嘛?
页: [1]
查看完整版本: osgTexture2D ,纹理贴图