如何在cocos2d-x中制作清晰的纹理

时间:2014-05-19 18:09:07

标签: c++ opengl textures cocos2d-x cocos2d-x-3.0

我在char数组中有一个size的普通图像数据(32位RGBA),并希望从中创建一个 cocos2d-x Texture2D,如下所示:

Texture2D * tex = new Texture2D();
tex->initWithData(data, 4*size.width*size.height, Texture2D::PixelFormat::RGBA8888,size.width, size.height, size);
tex->drawAtPoint(Point(offset));

但结果图像模糊(如压缩的jpeg图像).. 输入和纹理(如上所示)的大小都为size,我没有进行任何转换。我只是将代码放在HelloWorld::draw(Renderer *, const kmMat4&, bool)中的新创建的项目中。如何获得清晰的图像(数据的确切表示)?任何其他建议(如直接的框架缓冲区之类的东西......等等,如果有的话)也是受欢迎的。

我在mac os 10.8.x中使用v3.0

编辑:我尝试在Texture2D创建之后和initWithData之前设置纹理参数(GL_NEAREST)并且没有任何更改。数据和纹理大小相同,所以它不应该调整大小...这是一张图片;矩形的角不尖锐:

Edit2:在 initWithData工作后设置纹理参数(GL_NEAREST)

...

Texture2D::TexParams tp = {GL_NEAREST, GL_NEAREST, GL_CLAMP_TO_EDGE, GL_CLAMP_TO_EDGE};
tex->setTexParameters(tp);
tex->drawAtPoint(Point(offset));

2 个答案:

答案 0 :(得分:2)

根据您对问题的描述,我必须假设在您调用Texture2D之前,实际上并未创建与Texture2D::initWithData (...)对象关联的GL纹理。

在OpenGL中,默认纹理放大滤镜是GL_LINEAR。在这种情况下,你想要默认的mag过滤器,但是在 之后 初始化纹理时,你也无法更改过滤器。在创建纹理后设置GL_NEAREST mag滤镜将在您放大纹理时消除平滑。

答案 1 :(得分:0)

试试这个:

  

通常游戏需要保持像素图像的外观锐利/   没有模糊

http://www.gamedevcraft.com/2015/10/disable-texture-anti-aliasing.html