3D技術研究所Wiki > DDSReader > DDS画像をOpenGLアプリケーションで利用する

DDSReaderでDDS画像をOpenGLアプリケーションで利用する方法についてまとめています。

目次


DDSReaderでテクスチャを作成する

DDSReaderを利用してOpenGLテクスチャを作成します。

DDSOpenGLTexture.png

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

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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
public int createDDSTexture() {
    int texture = 0;
    
    try {
        FileInputStream fis = new FileInputStream(path);
        byte [] buffer = new byte[fis.available()];
        fis.read(buffer);
        fis.close();

        int [] pixels = DDSReader.read(buffer, DDSReader.ABGR, 0);
        int width = DDSReader.getWidth(buffer);
        int height = DDSReader.getHeight(buffer);
        int mipmap = DDSReader.getMipmap(buffer);

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

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

        if(mipmap > 0) {
            // mipmap
            for(int i=0; (width > 0) || (height > 0); i++) {
                if(width <= 0) width = 1;
                if(height <= 0) height = 1;
                int [] pixels = DDSReader.read(buffer, DDSReader.ABGR, i);
                
                IntBuffer texBuffer = IntBuffer.wrap(pixels);
                gl.glTexImage2D(GL_TEXTURE_2D, i, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, texBuffer);
                
                width /= 2;
                height /= 2;
            }
            
            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_MIPMAP_NEAREST);
        }
        else {
            // no mipmap
            int [] pixels = DDSReader.read(buffer, DDSReader.ABGR, 0);
                
            IntBuffer texBuffer = IntBuffer.wrap(pixels);
            gl.glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, texBuffer);

            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);
        }
        
        texture = textures[0];
    }
    catch(Exception e) {
        e.printStackTrace();
    }
    
    return texture;
}


関連ページ


スポンサードリンク


添付ファイル: fileDDSOpenGLTexture.png 314件 [詳細]
トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS