2023/12/30(土) [n年前の日記]
#3 [prog] libpngを使ってOpenGLのテクスチャを用意できるか試した
Windows10 x64 22H2 + MinGW (gcc 6.3.0) 上で、OpenGL を使ってテクスチャを表示したい。OpenGL には画像を読み込む機能が無いので、libpng を使ってpng画像を読み込んで、OpenGL のテクスチャにできるのか試してみた。
以下のページがとても参考になった。ありがたや。
_PNGファイルをOpenGLで扱う話
紹介されてるサンプルプログラムをほとんどそのままコピペさせてもらって、MinGW (gcc 6.3.0) 上でもビルドして動かせるか試してみた。
以下のページがとても参考になった。ありがたや。
_PNGファイルをOpenGLで扱う話
紹介されてるサンプルプログラムをほとんどそのままコピペさせてもらって、MinGW (gcc 6.3.0) 上でもビルドして動かせるか試してみた。
◎ 必要なライブラリ :
今回試すプログラムのビルドには、freeglut、zlib、libpng が必要。
MinGW に freeglut を導入する手順は、以前メモしてあった。
_mieki256's diary - MinGWでfreeglutを使ってみた
zlib と libpng の導入手順は以下。
_mieki256's diary - MinGW上でzlibやlibpngをビルドしてみた
MinGW に freeglut を導入する手順は、以前メモしてあった。
_mieki256's diary - MinGWでfreeglutを使ってみた
zlib と libpng の導入手順は以下。
_mieki256's diary - MinGW上でzlibやlibpngをビルドしてみた
◎ ソース :
ソースと利用画像は以下。前述の参考ページで紹介されてるサンプルとほとんど同じだけど…。
_01_loadpng_draw.c
_texture.png
Makefile の内容は以下。
_Makefile
実行結果は以下。
ポリゴン(GL_QUADS)にテクスチャ画像を貼り付けることができている。
たしかに、libpng を使って、png画像を読み込んで OpenGL用のテクスチャに変換することができると分かった。
_01_loadpng_draw.c
_texture.png
Makefile の内容は以下。
_Makefile
01_loadpng_draw.exe: 01_loadpng_draw.c Makefile gcc 01_loadpng_draw.c -o 01_loadpng_draw.exe -D FREEGLUT_STATIC -lfreeglut_static -lopengl32 -lwinmm -lgdi32 -lpng -lz .PHONY: clean clean: rm -f *.exe rm -f *.o
- 01_loadpng_draw.c から 01_loadpng_draw.exe を作る。
- -D FREEGLUT_STATIC -lfreeglut_static と指定して、freeglut を静的リンクする。
- -lopengl32 -lwinmm -lgdi32 を指定して、opengl32、winmm、gdi32 をリンク。
- -lpng -lz を指定して、libpng を利用。
実行結果は以下。
ポリゴン(GL_QUADS)にテクスチャ画像を貼り付けることができている。
たしかに、libpng を使って、png画像を読み込んで OpenGL用のテクスチャに変換することができると分かった。
◎ 課題 :
ストレージ上に存在するpng画像ファイルを読み込んで、OpenGL でテクスチャ画像として利用することはできる、と分かったけれど。exeファイルにpng画像をバイナリとして含めておいて、それを OpenGL のテクスチャとして利用する、その方法が分からない…。
リソースファイルなるものにpng画像を含めるように記述しておいて、exeファイル中のリソース(png画像)のポインタ(メモリアドレス?)とバイナリサイズを得ることはできそうなのだけど…。libpng は、メモリ上に置いてあるpng画像のバイナリを読み込むことができるのだろうか…?
リソースファイルなるものにpng画像を含めるように記述しておいて、exeファイル中のリソース(png画像)のポインタ(メモリアドレス?)とバイナリサイズを得ることはできそうなのだけど…。libpng は、メモリ上に置いてあるpng画像のバイナリを読み込むことができるのだろうか…?
[ ツッコむ ]
以上です。