查看: 1601|回复: 6

贴图时为什么很模糊?

[复制链接]

该用户从未签到

发表于 2010-8-5 14:49:39 | 显示全部楼层 |阅读模式
如果图片是256*256的,四边形是10000*36000的,那么贴图的重复次数是
10000/256 和 36000/256吗,四边形的大小是我在这里随便拟的。

不用重复,贴图效果会拉伸, 重复后,不知道这个重复的次数是怎么整的。
tc->push_back(osg::Vec2(0.f,0.f));
tc->push_back(osg::Vec2(10000/256 ,0.f));
tc->push_back(osg::Vec2(10000/256 ,36000/256));
tc->push_back(osg::Vec2(0.f,36000/256));
geo->setTexCoordArray( 0, tex.get() );

这样的效果很模糊。为什么?
四边形的尺寸和图片的尺寸对应要有什么要求,图片的尺寸最好是2的幂,这个我知道。

该用户从未签到

发表于 2010-8-5 17:14:01 | 显示全部楼层
其实重复多少次都是你自己控制的。
上面你的代码里面,10000/256,我约莫估计你是想到这个四边形有10000的宽度?然后想将这个图片重复10000/256=40次?若你已经打开了Repeat纹理方式,它肯定会重复40次的。不过我记得默认是没有开重复的,而是CLAMP方式,这样就效果可能不是模糊,而是两端拉伸的非常厉害。

该用户从未签到

 楼主| 发表于 2010-8-6 00:12:29 | 显示全部楼层
Repeat纹理方式 我已经开启了。
但是这样用我上面的代码也会模糊,我试了,将重复次数减少一点,虽然会有点拉伸,但是效果还是可以

既然这样,重复的次数该怎么计算,怎么就合理一点。


我还测试了将256*256的一幅图片贴到100*100的矩形上,纹理坐标为:
tc->push_back(osg::Vec2(0.f,0.f));
tc->push_back(osg::Vec2(1.0 ,0.f));
tc->push_back(osg::Vec2(1,1));
tc->push_back(osg::Vec2(0.f,1));
geo->setTexCoordArray( 0, tex.get() );
效果很好,贴在1000*1000上面,纹理坐标还是上面0~1,效果仍然很好,贴在100*10000就拉伸了,请问谁能解释这个问题,我也许在哪个地方理解错了。

该用户从未签到

发表于 2010-8-6 00:20:42 | 显示全部楼层
重复次数您不用自己算也可以的,,默认会计算的~~至于会拉伸,很容易理解,,这里是纹理映射,顶点对应,,所以您的纹理会拉伸来完成映射

该用户从未签到

 楼主| 发表于 2010-8-8 10:24:50 | 显示全部楼层
4# FlySky

您好:谢谢您耐心解答我下面的问题。

请问您三个基本问题:
(1)重复次数您说可以不用自己计算,默认会计算的,如果是这样,纹理坐标怎么给?
tc->push_back(osg::Vec2(0.f,0.f));
tc是纹理坐标数组。怎么赋值?
(2) 纹理贴图时,图片的像素宽度和我用OSG绘制的四边形相差很大,比如图片是256*256,四边形是100000*100000, 我贴图时,效果也很好,即没有出现我想象中的图片不够,拉伸的情况。
(3)我想绘制一个圆柱面,不包含上下两个圆,我是这样实现的,认为圆柱面由很多个四边形组成,四边形的个数由圆细分的个数决定,如将圆(圆柱的一个底)分为180份,那么圆柱面我就画180个矩形。您觉得这样是否合理。我的问题是这样一来我画一个圆柱很慢(细分为2880),程序运行时比较慢,大概要等1分钟才会画好。

该用户从未签到

发表于 2010-8-10 10:20:59 | 显示全部楼层
(1)纹理坐标设置为1.0以上,同时设置WRAP模式为REPEAT,即可自动重复
(2)这和滤波方式有关,可以设置setFliter来改变不同的纹理滤波方式
(3)您设计的圆柱是否过于精细了?其实只要让一条母线沿着中心轴旋转就可以了,如果段数为16的话,那么只需要16个四边形面,注意采取STRIP方式

该用户从未签到

 楼主| 发表于 2010-9-4 19:33:37 | 显示全部楼层
感谢大家的回答,我最近没网,一直没有及时回复……
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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