3D技術研究所Wiki > OpenGL > テクスチャ > BufferedImageでOpenGLテクスチャを作成する

BufferedImageでOpenGLテクスチャを作成する方法をまとめています。

情報

java.awt.image.BufferedImageを利用してテクスチャを作成します。
BufferedImage.getRGBメソッドはARGBの順で色成分を格納するので、
ABGRの順(GL_RGBA)に変換してからOpenGLへ渡します。
32bitカラーにしているのでUNPACK_ALIGNMENTは4に設定します。
最後のテクスチャフィルタの設定などは、実際にテクスチャを使用するときに設定すれば良いですが、
設定を忘れると描画できないなどのトラブルになるのでテクスチャ読み込み時に設定しておくと安心です。

目次


BufferedImageでOpenGLテクスチャを作成するソースコード

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import java.awt.image.BufferedImage;
import java.nio.IntBuffer;

import javax.media.opengl.GL;
import static javax.media.opengl.GL.*;

/* BufferedImageからテクスチャを作成します */
int createTexture(BufferedImage image) {

    int [] textures = new int[1];
    gl.glGenTextures(1, textures, 0);

    gl.glEnable(GL_TEXTURE_2D);
    gl.glActiveTexture(GL_TEXTURE0);
    gl.glBindTexture(GL_TEXTURE_2D, textures[0]);
    gl.glPixelStorei(GL_UNPACK_ALIGNMENT, 4);

    int width = image.getWidth();
    int height = image.getHeight();
    int [] argb = image.getRGB(0, 0, width, height, null, 0, width);
    for(int i=0; i<argb.length; i++) {
        int color = argb[i];
        int a = (color>>24)&0xff;
        int r = (color>>16)&0xff;
        int g = (color>>8)&0xff;
        int b = color&0xff;
        argb[i] = (a<<24)|(b<<16)|(g<<8)|r;
    }
    IntBuffer buffer = IntBuffer.wrap(argb);
    gl.glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, buffer);

    gl.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
    gl.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
    gl.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    gl.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

    return textures[0];
}


関連ページ


スポンサードリンク

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS