OpenGL图像绘图

时间:2013-02-21 00:53:24

标签: java image opengl lwjgl

我已经将游戏加载到正确的尺寸,显示背景并播放一些背景音乐,这应该是一个登录屏幕,我以前从未搞过图形,虽然我知道怎么写大多数服务器/客户端通信都不会有问题。

如何绘制多个图像,如何将它们放在我想要的位置?

更重要的是,OpenGL是否支持PNG图像的“透明”功能?因为这是我通过半透明登录框,半透明按钮等开发我的开始屏幕的方式。

我知道如何加载图像,虽然绘制它们是一个不同的故事..

public void drawStartScreen() {
        Color.white.bind();
        c.getAssets().backgroundImage.bind(); // or GL11.glBind(c.getAssets().backgroundImage.getTextureID());
        GL11.glBegin(GL11.GL_QUADS);
        GL11.glTexCoord2f(0, 0);
        GL11.glVertex2f(0, 0);
        GL11.glTexCoord2f(1, 0);
        GL11.glVertex2f(c.getAssets().backgroundImage.getTextureWidth(), 0);
        GL11.glTexCoord2f(1, 1);
        GL11.glVertex2f(c.getAssets().backgroundImage.getTextureWidth(),
                c.getAssets().backgroundImage.getTextureHeight());
        GL11.glTexCoord2f(0, 1);
        GL11.glVertex2f(0, c.getAssets().backgroundImage.getTextureHeight());
        GL11.glEnd();

        if(playMusic == true) {
            c.getAssets().backgroundMusic.playAsMusic(1.0f, 1.0f, true);
            playMusic=false;
        }
    }

我无法弄清楚如何使用上面的代码移动图像,所以我不能编写自己的方法用“参数”“填写”上面的代码。

我正在尝试将我的次要图像绘制到客户端中间,我知道人们可能会看不起我,尽管这只是我所谈论的一个小例子以及我的一些经验编程来自为Runescape创建基于服务器的模拟器多年,所以下面我将留下一个图像显示背景上的“LoginBox”..按钮是透明的黑色边缘,这使您可以看到登录框在它下面,除了绘制黑色边框的地方。

这就是我所说的“透明”支持:

img

1 个答案:

答案 0 :(得分:1)

  

我已经将游戏加载到正确的尺寸,显示背景

如果您遵循分散在互联网上的许多不良教程之一,那么你可能做错了。 OpenGL是一个状态机,这意味着您可以在需要时随意更改任何内容。

大多数教程都将glViewport和投影矩阵设置放在窗口大小调整处理程序中。如果您只显示没有其他元素的场景,则此方法有效。但在像你这样的情况下,这种设置相当不方便。

做一件简单的事情:您可以在需要时将视口和投影更改为最适合您需求的内容。您想在屏幕上绘制图像吗?只需根据需要设置视口和投影:

glViewport(0, 0, win_width, win_height);
aspect = win_width/win_height;
projection_ortho(-aspect, aspect, -1, 1);
  

更重要的是,OpenGL是否支持PNG图像的“透明”功能?

是的,这叫做混合。