2

我有一个 char 数组中的普通图像数据(32 位 RGBA),size并想用它制作一个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编辑:我尝试在创建之后和之前设置纹理参数(GL_NEAREST)initWithData并且没有任何改变。数据和纹理的大小相同,因此无论如何都不应该调整大小……这是一张图片;矩形的角不尖锐:

    

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));
4

2 回答 2

3

根据您对问题的描述,我必须假设与Texture2D对象关联的 GL 纹理在您调用Texture2D::initWithData (...).

在 OpenGL 中,默认的纹理放大过滤器是GL_LINEAR. 在这种情况下,您不希望使用默认的 mag 过滤器,但初始化纹理之前您也无法更改过滤器。在创建纹理后设置一个GL_NEARESTmag 过滤器将在您放大纹理时消除平滑。

于 2014-05-19T22:20:10.443 回答
0

尝试这个 :

通常游戏需要保持像素图像的外观清晰/不模糊

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

于 2015-12-27T12:43:47.960 回答