代码之家  ›  专栏  ›  技术社区  ›  Daan van Yperen

在Java2D中动态着色精灵?

  •  2
  • Daan van Yperen  · 技术社区  · 16 年前

    通过Graphics2D.drawImage渲染BuffereImage,可以渲染地形。我想在不太影响性能的情况下,动态更改每个绘制图像的色调。我怎样才能做到这一点?

    3 回复  |  直到 16 年前
        1
  •  2
  •   Community paulsm4    7 年前

    不久前我问了一个类似的问题,得到了一个很好的答案 here ,虽然我提前做了所有的着色。在任何情况下,您都可能需要查看BuffereImage。此外, JH Labs site 有大量关于用java进行图像处理的有用信息。

        2
  •  1
  •   Tom Hawtin - tackline    16 年前

    为了获得高性能,您可能需要使用JOGL。它使您能够很好地访问硬件加速,即使您不需要使用3D功能。

        3
  •  0
  •   Daan van Yperen    16 年前

    根据Tom Hawtin的回答,我决定切换到一个允许更多控制的框架。JOGL和LWJGL似乎都提供了一个着色技工。我选择了LWJGL,因为它与我的其他需求有更多的重叠。

    我找到了这个 Space Invaders Tutorial 有用,因为它是Java2D和JOGL之间的一块漂亮的罗塞塔石头,LWJGL。

    下面是我为LWJGL Sprite类创建的方法。

    public void drawTinted(int x, int y, float red, float green, float blue) 
    {
        GL11.glPushMatrix();
    
        texture.bind();
    
        GL11.glTranslatef(x, y, 0);     
        GL11.glColor3f(red,green,blue);
    
        GL11.glBegin(GL11.GL_QUADS);
        {
          GL11.glTexCoord2f(0, 0);
          GL11.glVertex2f(0, 0);
          GL11.glTexCoord2f(0, texture.getHeight());
          GL11.glVertex2f(0, height);
          GL11.glTexCoord2f(texture.getWidth(), texture.getHeight());
          GL11.glVertex2f(width,height);
          GL11.glTexCoord2f(texture.getWidth(), 0);
          GL11.glVertex2f(width,0);
        }
        GL11.glEnd();
    
        GL11.glPopMatrix();
    }