PNG画像を表示する(glpng)

「PNG画像を表示する(glpng)」の編集履歴(バックアップ)一覧はこちら

PNG画像を表示する(glpng)」(2015/01/02 (金) 23:35:56) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

<p><strong>先の『画像を表示する(GDI+)』では GDI+ を使いましたが、 GdiPlus.h を見ると<br /> struct IDirectDrawSurface7; なる表記があります。<br /> 内部で DirectX7 を使用しているようです。<br /> OpenGLなのにDirectXは使いたくない!!とか、<br /> WindowsじゃないOSで画像を読み込みたい!!という方のために glpng を<br /> 使った方法も記載しておきます。</strong></p> <p> <img alt="" src="http://cdn21.atwikiimg.com/opengl?cmd=upload&amp;act=open&amp;pageid=26&amp;file=bmp.png" /></p> <table border="1" cellpadding="1" cellspacing="1" width="600"><tbody><tr><td> <p>#pragma comment(linker, "/SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup")<br /> #include &lt;GL/freeglut/freeglut.h&gt;<br /> #include &lt;stdio.h&gt;<br /> #include &lt;gl/glpng.h&gt;</p> <p>#define WIDTH 320<br /> #define HEIGHT 240</p> <p>pngInfo info;<br /> GLuint texture;</p> <p>void display(void)<br /> {<br />  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);<br />  glMatrixMode(GL_MODELVIEW);<br />     glLoadIdentity();<br />  glOrtho(0.0, WIDTH, HEIGHT, 0.0, -1.0, 1.0);</p> <p> glEnable(GL_TEXTURE_2D);//テクスチャ有効<br />     glEnable(GL_ALPHA_TEST);//アルファテスト開始<br />     glBegin(GL_POLYGON);<br />  glTexCoord2f(0.0f, 1.0f); glVertex2d(10 , 230);//左下<br />  glTexCoord2f(0.0f, 0.0f); glVertex2d(10 ,  10);//左上<br />  glTexCoord2f(1.0f, 0.0f); glVertex2d( 310 ,  10);//右上<br />  glTexCoord2f(1.0f, 1.0f); glVertex2d( 310 , 230);//右下<br />     glEnd();<br />     glDisable(GL_ALPHA_TEST);//アルファテスト終了<br />     glDisable(GL_TEXTURE_2D);//テクスチャ無効</p> <p> glutSwapBuffers();<br /> }<br /> void idle(void)<br /> {<br />  glutPostRedisplay();<br /> }<br /> void Init(){<br />  glClearColor(0.0, 0.0, 0.0, 1.0);<br />  glOrtho(0, WIDTH, HEIGHT, 0, -1, 1);<br />  texture = pngBind ("sample.png", PNG_NOMIPMAP, PNG_ALPHA, &amp;info, GL_CLAMP, GL_NEAREST, GL_NEAREST);<br /> }<br /> int main(int argc, char *argv[])<br /> {<br />  glutInitWindowPosition(100, 100);<br />  glutInitWindowSize(WIDTH, HEIGHT);<br />  glutInit(&amp;argc, argv);<br />  glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);<br />  glutCreateWindow("画像を読み込んで表示");<br />  glutDisplayFunc(display);<br />  glutIdleFunc(idle);<br />  Init();<br />  glutMainLoop();<br />  return 0;<br /> }</p> </td> </tr></tbody></table><p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p>
<p><strong>先の『画像を表示する(GDI+)』では GDI+ を使いましたが、 GdiPlus.h を見ると<br /> struct IDirectDrawSurface7; なる表記があります。<br /> 内部で DirectX7 を使用しているようです。<br /> OpenGLなのにDirectXは使いたくない!!とか、<br /> WindowsじゃないOSで画像を読み込みたい!!という方のために glpng を<br /> 使った方法も記載しておきます。</strong></p> <p> <img alt="" src="http://www21.atwiki.jp/opengl?cmd=upload&amp;act=open&amp;pageid=57&amp;file=glpng.png" /></p> <table border="1" cellpadding="1" cellspacing="1" style="width:100px;"><tbody><tr><td>ファイル</td> </tr><tr><td><a href="http://www21.atwiki.jp/opengl?cmd=upload&amp;act=open&amp;pageid=57&amp;file=main.cpp"> main.cpp</a></td> </tr><tr><td> <p><a href="http://www21.atwiki.jp/opengl?cmd=upload&amp;act=open&amp;pageid=57&amp;file=sample.png"> sample.png</a></p> <p><img alt="" src="http://www21.atwiki.jp/opengl?cmd=upload&amp;act=open&amp;pageid=57&amp;file=sample.png" /></p> </td> </tr></tbody></table><p>main.cpp</p> <table border="1" cellpadding="1" cellspacing="1" width="600"><tbody><tr><td> <p>#pragma comment(linker, "/SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup")<br /> #include &lt;GL/freeglut/freeglut.h&gt;<br /> #include &lt;stdio.h&gt;<br /> #include &lt;gl/glpng.h&gt;</p> <p>#define WIDTH 320<br /> #define HEIGHT 240</p> <p>pngInfo info;<br /> GLuint texture;</p> <p>void display(void)<br /> {<br />  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);<br />  glMatrixMode(GL_MODELVIEW);<br />     glLoadIdentity();<br />  glOrtho(0.0, WIDTH, HEIGHT, 0.0, -1.0, 1.0);</p> <p> glEnable(GL_TEXTURE_2D);//テクスチャ有効<br />     glEnable(GL_ALPHA_TEST);//アルファテスト開始<br />     glBegin(GL_POLYGON);<br />  glTexCoord2f(0.0f, 1.0f); glVertex2d(10 , 230);//左下<br />  glTexCoord2f(0.0f, 0.0f); glVertex2d(10 ,  10);//左上<br />  glTexCoord2f(1.0f, 0.0f); glVertex2d( 310 ,  10);//右上<br />  glTexCoord2f(1.0f, 1.0f); glVertex2d( 310 , 230);//右下<br />     glEnd();<br />     glDisable(GL_ALPHA_TEST);//アルファテスト終了<br />     glDisable(GL_TEXTURE_2D);//テクスチャ無効</p> <p> glutSwapBuffers();<br /> }<br /> void idle(void)<br /> {<br />  glutPostRedisplay();<br /> }<br /> void Init(){<br />  glClearColor(0.0, 0.0, 0.0, 1.0);<br />  glOrtho(0, WIDTH, HEIGHT, 0, -1, 1);<br />  texture = pngBind ("sample.png", PNG_NOMIPMAP, PNG_ALPHA, &amp;info, GL_CLAMP, GL_NEAREST, GL_NEAREST);<br /> }<br /> int main(int argc, char *argv[])<br /> {<br />  glutInitWindowPosition(100, 100);<br />  glutInitWindowSize(WIDTH, HEIGHT);<br />  glutInit(&amp;argc, argv);<br />  glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);<br />  glutCreateWindow("画像を読み込んで表示");<br />  glutDisplayFunc(display);<br />  glutIdleFunc(idle);<br />  Init();<br />  glutMainLoop();<br />  return 0;<br /> }</p> </td> </tr></tbody></table><p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p>

表示オプション

横に並べて表示:
変化行の前後のみ表示: