如何使缩放图像在 Java/OpenGL 中看起来更好?

Posted

技术标签:

【中文标题】如何使缩放图像在 Java/OpenGL 中看起来更好?【英文标题】:How do I make scaled images look better in Java/OpenGL? 【发布时间】:2016-06-24 19:36:22 【问题描述】:

这是同一张图片的两张图片:

这是预览时的样子...

这就是它在我的游戏中的样子...

显然角色在我的游戏中被缩小了,但是,当我在预览或pixelmator 中缩小精灵时,它仍然是平滑的。即使图像是 1:1 的比例,它仍然有锯齿状的边缘。

这是我的渲染方法

public void render(Camera camera, List<Entity> entities) 
    shader.loadViewMatrix(Main.createViewMatrix(camera));

    //per textured model
    GL30.glBindVertexArray(((RenderComponent) entities.get(0).getComponent(EntityComponentType.RENDER)).texturedModel.getRawModel().getVaoID());
    GL20.glEnableVertexAttribArray(0);
    GL20.glEnableVertexAttribArray(1);

    for(Entity e : entities) 
        RenderComponent render = (RenderComponent) e.getComponent(EntityComponentType.RENDER);

        //load transformation matrix per entity
        shader.loadTransformationMatrix(Main.createTransformationMatrix(render.position, render.rx, render.ry, render.getScaleX(), render.getScaleY()));
        shader.loadSprite((AnimationComponentContainer) e.getComponent(EntityComponentType.ANIMATION));

        //activate texture for each entity
        GL13.glActiveTexture(GL13.GL_TEXTURE0);
        GL11.glBindTexture(GL11.GL_TEXTURE_2D, render.getTexturedModel().getTexture().getTextureID());

        //render entity
        GL11.glDrawElements(GL11.GL_TRIANGLES, render.getTexturedModel().getRawModel().getVertexCount(), GL11.GL_UNSIGNED_INT, 0);
    

    //per textured model
    GL20.glDisableVertexAttribArray(0);
    GL20.glDisableVertexAttribArray(1);
    GL30.glBindVertexArray(0);

在我的片段着色器中,我对图像进行采样

vec4 color = texture(sampler, pass_TextureCoords);

并移除透明度

if(color.a < 0.5) discard;
out_Color = vec4(totalDiffuse, 1) * color;

我的问题是,如何防止出现锯齿状边缘(它们在他的裤子周围最为突出)?或者我如何平滑它们?图像本身如果 512x1024

【问题讨论】:

发布一些您用来显示图形的代码 @Confiqure 有帮助吗? 您认为问题具体是什么?因为“看起来更好”似乎不是很具体。 @NicolBolas 你可以在整个角色精灵中看到它,但它在他的裤子上最为突出。我说的是锯齿状边缘。谢谢。 @user3053027:我问这个的原因是因为我看到了很多可能被认为是“错误”的东西。引擎内颜色与原始图像颜色不匹配的事实。等等。因此,您应该编辑您的问题,以便我们知道它专门针对边缘而不是其他问题。 【参考方案1】:

确保游戏的内部渲染分辨率足够大以显示完整图像,并确保游戏没有将任何光线投射到精灵本身,因为看起来角色正在与绿光交互在那里,它会导致裤子上出现一些渐变问题。

【讨论】:

不是灯,我去掉了所有的灯,还是一样的问题。什么是内部渲染分辨率?如果你的意思是窗口大小,那么它应该是好的,它是 1280 x 720。还有其他可能的吗?

以上是关于如何使缩放图像在 Java/OpenGL 中看起来更好?的主要内容,如果未能解决你的问题,请参考以下文章

为啥透明图像在 Flutter 中看起来质量很差?

CSS旋转变换使图像模糊

如何使字体在浏览器中看起来很旧且过时

如何防止大字体在Chrome(OSX)中看起来锯齿状?

背景图像在模拟器中看起来不合适

如何使我的图像完全适合 UIView