1

私はすでにゲームを正しいサイズでロードし、背景を表示し、いくつかの背景音楽を再生しています。これはログイン画面であるはずです。これまでグラフィックをいじったことはありませんが、ほとんどの書き込み方法は知っています。サーバー/クライアント通信なので、問題はありません。

複数の画像を描画するにはどうすればよいですか。また、必要な場所に画像を配置するにはどうすればよいですか。

さらに重要なことに、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

4

1 に答える 1

1

私はすでにゲームを正しいサイズでロードし、背景を表示しています

インターネットに散らばっている多くの悪いチュートリアルの1つに従った場合、おそらくそれは間違っています。OpenGLはステートマシンです。つまり、必要なときに必要なものを変更できます。

ほとんどのチュートリアルでは、glViewportとプロジェクションマトリックスの設定をウィンドウサイズ変更ハンドラーに配置しています。これは、それ以上の要素なしでシーンだけを表示する場合に機能します。しかし、あなたのような場合、この設定はかなり不便です。

簡単なことを行うだけです。必要なときに、ビューポートと投影をニーズに最も適したものに変更できます。画面中央に画像を描きたいですか?必要に応じてビューポートとプロジェクションを設定するだけです。

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

さらに重要なことに、OpenGLはPNG画像の「透明」機能をサポートしていますか?

はい、それはブレンディングと呼ばれています。

于 2013-02-21T23:36:37.310 に答える