OpenGLでpng表示
OpenGLでは画像ファイルを簡単に扱うことができない(´・ω・`)
なんかpngはライブラリがあるっぽい…。
ちなみ私の環境はLinux Mint 13 maya(LTS)、
OpenGL関連のライブラリはインストール済です。
glpngライブラリは次のところからダウンロードできるようです。
./graphics/glpng [load PNG graphics files and bind them to an OpenGL texture]
適当なディレクトリに解凍できたらsrcディレクトリに移動し、
Makefile.LINUXをMakefileにリネーム、もしくはコピー。
そしてMakeを実行する。
するとlibディレクトリ内に静的ライブラリlibglpng.aが生成されている。
そしてinclude/GLディレクトリにはglpng.hファイルがあります。
これらを以下の手順でコピーします。
sudo cp glpng.h /usr/include/GL/
sudo cp libglpng.a /usr/lib/
そして256x256のpngファイルを用意して以下のソースコードをコンパイルし実行します。
"main.c"----------------------------------------------------
#include
#include
#include
#include
#define WIDTH 256
#define HEIGHT 256
pngInfo info;
GLuint texture;
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glOrtho(0.0, WIDTH, HEIGHT, 0.0, -1.0, 1.0);
glEnable(GL_TEXTURE_2D);
glEnable(GL_ALPHA_TEST);
glBegin(GL_POLYGON);
{
glTexCoord2f(0.0f, 1.0f); glVertex2d( 0, 255 );
glTexCoord2f(0.0f, 0.0f); glVertex2d( 0, 0 );
glTexCoord2f(1.0f, 0.0f); glVertex2d( 255, 0 );
glTexCoord2f(1.0f, 1.0f); glVertex2d( 255, 255 );
}
glEnd();
glDisable(GL_ALPHA_TEST);
glDisable(GL_TEXTURE_2D);
glutSwapBuffers();
}
void idle(void)
{
glutPostRedisplay();
}
void Init(){
glClearColor(0.0, 0.0, 0.0, 1.0);
glOrtho(0, WIDTH, HEIGHT, 0, -1, 1);
texture = pngBind ("penguin.png", PNG_NOMIPMAP, PNG_ALPHA, &info, GL_CLAMP, GL_NEAREST, GL_NEAREST);
}
int main(int argc, char *argv[])
{
glutInitWindowPosition(100, 100);
glutInitWindowSize(WIDTH, HEIGHT);
glutInit(&argc, argv);
glutCreateWindow("Display Image");
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);
glutDisplayFunc(display);
glutIdleFunc(idle);
Init();
glutMainLoop();
return 0;
}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
次にMakefileの中身です。
"Makefile"--------------------------------------------------
CC = gcc
CFLAGS =
PROGRAM = main
LIBRARY = -lglpng -lm -lglut -lGLU
all : ${PROGRAM}
${PROGRAM} : ${PROGRAM}.o
${CC} ${PROGRAM}.o ${CFLAGS} ${LIBRARY} -o ${PROGRAM}
${PROGRAM}.o : ${PROGRAM}.c
${CC} ${PROGRAM}.c -c
clean :
rm -f *.o *~
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
数学ライブラリでありlibm.aをリンクする-lmオプションを
libglpng.aをリンクする-lglpngオプションの前に持ってくると次のようなエラーが出ます。
"エラー内容"-------------------------------------------------
gcc main.o -lm -lglut -lGLU -lglpng -o main
/usr/bin/ld: /usr/lib/gcc/i686-linux-gnu/4.6/../../../../lib/libglpng.a(pngrtran.o): undefined reference to symbol 'pow@@GLIBC_2.0'
/usr/bin/ld: note: 'pow@@GLIBC_2.0' is defined in DSO /usr/lib/gcc/i686-linux-gnu/4.6/../../../i386-linux-gnu/libm.so so try adding it to the linker command line
/usr/lib/gcc/i686-linux-gnu/4.6/../../../i386-linux-gnu/libm.so: could not read symbols: Invalid operation
collect2: ld はステータス 1 で終了しました
make: *** [main] エラー 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
こんなことで引っかかるみたいです。
本日の参考サイト
OpenGLプログラミングメモ - PNG画像を表示する(glpng)
UNIXの部屋 コマンド検索: gcc
コンパイラ(gccコマンド)の使い方
OpenGL de プログラミング
森北出版株式会社刊 「Springs of C」サポートwebページ