我在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));
答案 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