1.纹理控制。
看此代码:
CCSprite *pSprite = CCSprite::create("ship.png");
ccTexParams params = {GL_NEAREST,GL_NEAREST,GL_CLAMP_TO_EDGE, GL_CLAMP_TO_EDGE};
pSprite->getTexture()->setTexParameters(¶ms);
上面最重要的函数就是setTexParameters();他就是根据ccTexParameters来控制纹理图像的纹理如何对应到屏幕的像素。根据什么来实现纹理的缩放和纹理的重复(重复纹理)等效果。
typedef struct _ccTexParams {
GLuint minFilter;
GLuint magFilter;
GLuint wrapS;
GLuint wrapT;
} ccTexParams;
先看看ccTexParams这个结构体,他的前两个成员变量叫做基本过滤器。用来指定按照什么规则来控制纹理的缩放效果。
两个基本的纹理过滤规则:
(1)GL_LINEAR:“当显示纹理时,显示的大小大于或者小于原纹理的尺寸时,使用邻近像素点来插值补点”
特点:图像拉伸或者缩小后,看起来失真了,但是效果比GL_NEAREST好,看起来没有人工操作后的痕迹.
(2)GL_NEAREST:(最邻近过滤)最简单最快捷的过滤方式。
特点:当纹理拉伸到特别大的时候,会出现大片斑驳状像素。
ccTexParameters后面的两个成员变量叫做纹理环绕模式.是用来控制当绘制纹理边界范围之外的像素点的时候应该怎么去处理。openGL纹理的坐标范围是(0.0f, 1.0f).意思就是当纹理坐标大于1.0f或者纹理坐标小于0.0f的时候怎么去处理纹理。
两个常用的纹理环绕模式:
(1)GL_REPEAT:在纹理超过1.0f的方向上对纹理进行重复。如果你想显示纹理边界之外的像素点时,把它旁边的纹理像素点平铺过去 .
看代码:
pSprite = CCSprite::create("RepeatSprite.png");
pSprite->retain();
CCSize size = CCDirector::sharedDirector()->getWinSize();
pSprite->setPosition(CCPointMake(size.width/2, size.height/2));
addChild(pSprite);
ccTexParams tp ;
tp.minFilter = GL_LINEAR;
tp.magFilter = GL_LINEAR;
tp.wrapS =