lua:
local bg = cc.Sprite:create("test.png");
bg:getTexture():setTexParameters(GL_LINEAR, GL_LINEAR, GL_REPEAT, GL_REPEAT);
bg:setTextureRect(cc.rect(0, 0, 1136, 1024));
bg:setScaleY(640/1024);
bg:setPosition(cc.p(self._size.width/2, self._size.height/2));
self:addChild(bg);
c++:
Texture2D* texture = Director::getInstance()->getTextureCache()->addImage("test.png");
Texture2D::TexParams tp = {GL_LINEAR, GL_LINEAR, GL_REPEAT, GL_REPEAT};
texture->setTexParameters(tp);
auto bg = Sprite::createWithTexture(texture, Rect(0 , 0, 1136, 1024));
bg->setScaleY(640/1024);
bg->setPosition(Vec2(1136/2, 1024/2));
this->addChild(bg, 0);
上面两个例子中的setScaleY是因为平铺的图片size的宽和高只能2的n次方(n为任意整数,至于为什么一定要是2的n次方,看c++源代码)。所以如果你要的平铺后的效果是1036*640,美术做出来的图片是16*640的图片,这个图片是不能用的,只能做一个16*1024的图片,平铺之后,再用setScaleY缩放。
两个基本的纹理过滤规则:
(1)GL_LINEAR:“当显示纹理时,显示的大小大于或者小于原纹理的尺寸时,使用邻近像素点来插值补点”
特点:图像拉伸或者缩小后,看起来失真了,但是效果比GL_NEAREST好,看起来没有人工操作后的痕迹.
(2)GL_NEAREST:(最邻近过滤)最简单最快捷的过滤方式。
特点:当纹理拉伸到特别大的时候,会出现大片斑驳状像素。
TexParameters后面的两个成员变量叫做纹理环绕模式.是用来控制当绘制纹理边界范围之外的像素点的时候应该怎么去处理。openGL纹理的坐标范围是(0.0f, 1.0f).意思就是当纹理坐标大于1.0f或者纹理坐标小于0.0f的时候怎么去处理纹理。
两个常用的纹理环绕模式:
(1)GL_REPEAT:在纹理超过1.0f的方向上对纹理进行重复。如果你想显示纹理边界之外的像素点时,把它旁边的纹理像素点平铺过去。
注意:精灵的位置不会发生变化.这就用GL_REPEAT来实现了重复纹理的效果.
还需要注意的是纹理的宽和高必须是2的N次方大小。否则的话当你用GL_REPEAT来作为环绕模式的时候会出现警告提示:GL_REPEAT mode must be POT.意思就是用GL_REPEAT模式图片大小必须是2的指数幂(POT).警告提示完了之后就是崩溃.
(2)GL_CLAMP:作用就是纹理的绘制坐标大于1.0则就设置成1.0, 小于0.0则设置成0.0;
文章参考:http://blog.csdn.net/majianfei1023/article/details/51088137