java - OpenGL图像绘制

标签 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 创建基于服务器的模拟器,所以下面我将在背景顶部留下一张显示“登录框”的图像。按钮是透明的,有黑色边缘,除了绘制黑色边框的位置之外,这还允许您看到其下面的登录框。

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

img

最佳答案

I already have my game loading up at the correct dimensions, displaying a background

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

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

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

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

More importantly, does OpenGL support the "Transparent" feature of PNG Images?

是的,这就是混合。

关于java - OpenGL图像绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14992798/

相关文章:

java - 当一对多关系的火合并时,Hibernate 抛出 EntityNotFoundException

java - 如何使用 Java 代码比较 VARCHAR 数据类型以确保数据库中的数据相同

java - 编译并运行别人的java代码

image - 将弹出图像添加到 Wordpress 中的平面图

java - 3D相交测试

c - 使用单一光源渲染 3D 立方体的最简单方法是什么?

java - 使用 XPath 获取 XML 子元素

image - 在软件开发过程中如何处理图像

android - 如何从相机裁剪图像

c++ - OpenGL实时渲染传输