1

私は JOGL に非常に慣れていません。JOGL について 2 つの主な質問があります。1 つ目はスプライトとアニメーションに関するもので、次はテクスチャに関するものです。

(私は 3D を行っていません。これはすべて 2D のコンテキストにあります)

1.) JOGL で四角形、多角形などを作成できましたが、非常に興味があります。操作できる画像の種類を取得する唯一の方法はありますか? たとえば、男性のスプライトを JOGL に表示する場合、スプライトを移動すると、スプライトは作成した方向に移動するだけでなく、アニメーションも表示されます。JOGL でこれを効率的に行う方法はありますか、または一度に 1 つの頂点でポリゴンからシェイプをスカルピングし、その上にテクスチャをペイントする必要がありますか? または、スプライトをロードしてすぐに表示し、もちろんユーザー入力に応じて画像を変更する、より簡単な方法があります。スプライトの隅々に頂点を作成せずにそれを行う方法があれば、コードまたはチュートリアルを表示して、あなたが何をしているのかを理解できるようにしてください.

2.) JOGL でテクスチャを表示する方法を探していますが、その方法についてはまだ混乱しています。最初に、テクスチャをシェイプにロードして表示する方法を見つけました。まず、7 つの変数を作成します。

Texture image;
private String textureFileName = "images/crate.png";
private String textureFileType = ".png";
private float textureTop, textureBottom, textureLeft, textureRight;

次に init() メソッドで、次のようにしてイメージをロードします。

GL2 gl = drawable.getGL().getGL2(); 
gl.glShadeModel(GL_SMOOTH);
image = TextureIO.newTexture(getClass().getClassLoader().getResource(textureFileName),false, textureFileType);
// Use linear filter for texture if image is larger than the original texture
gl.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
// Use linear filter for texture if image is smaller than the original texture
gl.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
TextureCoords textureCoords = image.getImageTexCoords();
textureTop = textureCoords.top();
textureBottom = textureCoords.bottom();
textureLeft = textureCoords.left();
textureRight = textureCoords.right();

次に、表示方法で次のことを行います

GL2 gl = drawable.getGL().getGL2();
gl.glClear(gl.GL_COLOR_BUFFER_BIT | gl.GL_DEPTH_BUFFER_BIT);
image.enable(gl);
image.bind(gl);
gl.glBegin(gl.GL_QUADS);
gl.glTexCoord2f(textureLeft,textureTop);
gl.glVertex2d(c,a); // vertex 1
gl.glTexCoord2f(textureLeft, textureBottom);
gl.glVertex2d(c,b); // vertex 2
gl.glTexCoord2f(textureRight, textureBottom);
gl.glVertex2d(d,b); // vertex 3
gl.glTexCoord2f(textureRight, textureTop);
gl.glVertex2d(d,a); // vertex 4
gl.glEnd();
//Variables a,b,c,d are just doubles with certain values for each point

複数のテクスチャを使用する場合に、これが画像を読み込んで表示する効果的な方法であるかどうかを知りたいだけです。このように見て、この方法を使用してそれを行う方法について計画を立てましたが、これが最善の方法であるかどうかを知りたいです。人々がbmp ローダーについて話しているのを見たことがありますが、彼らが何をしているのかを聞くと、画像が持つすべての単一の整数値をマッピングするのは非常に複雑に思えます。それを行う簡単な方法はありませんか?しかし、誰かがテクスチャをロードしてそれらのテクスチャを表示するための最も正確で効率的な方法を教えてくれたり、指示してくれなかったら.

最後に、次の行を入れます。

        gl.glClear(gl.GL_COLOR_BUFFER_BIT | gl.GL_DEPTH_BUFFER_BIT);

これは基本的に、バッファ内のピクセルなどの整数をクリアするだけではありませんか? しかし、|は何をしますか? とにかくする?ビットをシフトしますか?

また、これら 2 行のコードは何をするのでしょうか? コメントに混乱しています。次の 2 行は、テクスチャをロードするための init() メソッドに表示されます。

// Use linear filter for texture if image is larger than the original texture
gl.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
// Use linear filter for texture if image is smaller than the original texture
gl.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

このメッセージを読んで返信していただき、ありがとうございます。

-ダン

4

0 に答える 0