「色の反転」の編集履歴(バックアップ)一覧はこちら
「色の反転」(2015/02/01 (日) 21:24:53) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
<p>色を反転させます。</p>
<p><img alt="" src="http://cdn21.atwikiimg.com/opengl?cmd=upload&act=open&pageid=321&file=inv.png" style="width:320px;height:253px;" /></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&act=open&pageid=321&file=main.cpp">
main.cpp</a></td>
</tr><tr><td><a href="http://www21.atwiki.jp/opengl?cmd=upload&act=open&pageid=321&file=lodepng.cpp">
lodepng.cpp</a></td>
</tr><tr><td><a href="http://www21.atwiki.jp/opengl?cmd=upload&act=open&pageid=321&file=lodepng.h">
lodepng.h</a></td>
</tr><tr><td><a href="http://www21.atwiki.jp/opengl?cmd=upload&act=open&pageid=321&file=PNG.h">
PNG.h</a></td>
</tr><tr><td><a href="http://www21.atwiki.jp/opengl?cmd=upload&act=open&pageid=321&file=GLSL.h">
GLSL.h</a></td>
</tr><tr><td>
<p><a href="http://www21.atwiki.jp/opengl?cmd=upload&act=open&pageid=321&file=sample.png">
sample.png</a></p>
<p><img alt="" src="http://www21.atwiki.jp/opengl?cmd=upload&act=open&pageid=321&file=sample.png" /></p>
</td>
</tr></tbody></table><p> </p>
<p>色を反転させます。</p>
<p><img alt="" src="http://cdn21.atwikiimg.com/opengl?cmd=upload&act=open&pageid=321&file=inv.png" style="width:320px;height:253px;" /></p>
<table border="1" cellpadding="1" cellspacing="1" style="width:100px;"><tbody><tr><td>ファイル</td>
</tr><tr><td><a href="http://cdn21.atwikiimg.com/opengl?cmd=upload&act=open&pageid=321&file=main.cpp">
main.cpp</a></td>
</tr><tr><td><a href="http://cdn21.atwikiimg.com/opengl?cmd=upload&act=open&pageid=321&file=lodepng.cpp">
lodepng.cpp</a></td>
</tr><tr><td><a href="http://cdn21.atwikiimg.com/opengl?cmd=upload&act=open&pageid=321&file=lodepng.h">
lodepng.h</a></td>
</tr><tr><td><a href="http://cdn21.atwikiimg.com/opengl?cmd=upload&act=open&pageid=321&file=PNG.h">
PNG.h</a></td>
</tr><tr><td><a href="http://cdn21.atwikiimg.com/opengl?cmd=upload&act=open&pageid=321&file=GLSL.h">
GLSL.h</a></td>
</tr><tr><td><a href="http://www21.atwiki.jp/opengl?cmd=upload&act=open&pageid=321&file=vertex.shader">
vertex.shader</a></td>
</tr><tr><td><a href="http://www21.atwiki.jp/opengl?cmd=upload&act=open&pageid=321&file=flagment.shader">
flagment.shader</a></td>
</tr><tr><td>
<p><a href="http://cdn21.atwikiimg.com/opengl?cmd=upload&act=open&pageid=321&file=sample.png">
sample.png</a></p>
<p><img alt="" src="http://cdn21.atwikiimg.com/opengl?cmd=upload&act=open&pageid=321&file=sample.png" /></p>
</td>
</tr></tbody></table><p>vertex.shader</p>
<table border="1" cellpadding="1" cellspacing="1" style="width:600px;"><tbody><tr><td>
<p>varying vec2 pos;</p>
<p>void main(void)<br />
{<br />
pos = gl_Vertex.xy;<br />
gl_Position = ftransform();<br />
}</p>
</td>
</tr></tbody></table><p>flagment.shader</p>
<table border="1" cellpadding="1" cellspacing="1" style="width:600px;"><tbody><tr><td>
<p>uniform sampler2D image;<br />
uniform int img_Width, img_Height;<br />
varying vec2 pos;</p>
<p>void main(void)<br />
{<br />
vec2 texCoord = vec2(pos.x / float(img_Width), pos.y /
float(img_Height));<br />
vec4 col = texture2D(image, texCoord);<br />
gl_FragColor.rgb = vec3(1.0) - col.rgb;<br />
}</p>
</td>
</tr></tbody></table><p>main.cpp</p>
<table border="1" cellpadding="1" cellspacing="1" style="width:600px;"><tbody><tr><td>
<p>#pragma comment(linker, "/SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup")<br />
#pragma comment(lib, "glew32.lib")<br />
<br />
#include <GL/glew.h><br />
#include <GL/freeglut/freeglut.h><br />
#include "GLSL.h"<br />
#include "PNG.h"</p>
<p>#define WIDTH 640<br />
#define HEIGHT 480</p>
<p>GLSL glsl;</p>
<p>GLuint texName[2];<br />
TEXTURE *texture[2];</p>
<p>void texDraw(int NO,int x,int y,int width,int height){<br />
glBindTexture(GL_TEXTURE_2D, texName[NO]);<br />
glEnable(GL_TEXTURE_2D);//テクスチャ有効<br />
glEnable(GL_ALPHA_TEST);//アルファテスト開始<br />
glBegin(GL_POLYGON);<br />
glTexCoord2f(0.0f, 1.0f); glVertex2d(x , y+height);//左下<br />
glTexCoord2f(0.0f, 0.0f); glVertex2d(x , y);//左上<br />
glTexCoord2f(1.0f, 0.0f); glVertex2d( x+width , y);//右上<br />
glTexCoord2f(1.0f, 1.0f); glVertex2d( x+width , y+height);//右下<br />
glEnd();<br />
glDisable(GL_ALPHA_TEST);//アルファテスト終了<br />
glDisable(GL_TEXTURE_2D);//テクスチャ無効<br />
}</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><br />
texDraw(1,0,0,320,240);<br />
glsl.ON();<br />
GLint imageLoc = glGetUniformLocation(glsl.ShaderProg, "image");<br />
glUniform1i(imageLoc, 0);<br />
GLint imgWidthLoc = glGetUniformLocation(glsl.ShaderProg, "img_Width");<br />
glUniform1i(imgWidthLoc, texture[2]->Width);<br />
GLint imgHeightLoc = glGetUniformLocation(glsl.ShaderProg, "img_Height");<br />
glUniform1i(imgHeightLoc, texture[2]->Height);</p>
<p> texDraw(2,320,0,320,240);<br />
glsl.OFF();</p>
<p> glutSwapBuffers();<br />
}<br />
void idle(void)<br />
{<br />
glutPostRedisplay();<br />
}<br />
void TexCreate(int NO,char* FileName){<br />
glGenTextures(1, &texName[NO]);<br />
texture[NO] = new TEXTURE(FileName);<br />
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);<br />
//テクスチャオブジェクトの作成<br />
glBindTexture(GL_TEXTURE_2D, texName[NO]);<br />
//テクスチャの指定<br />
glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,texture[NO]->Width,texture[NO]->Height,0,GL_RGBA,GL_UNSIGNED_BYTE,texture[NO]->image);<br />
//テクスチャの繰り返し方法の指定<br />
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);//GL_CLAMP);<br />
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);//GL_CLAMP);<br />
//テクスチャを拡大・縮小する方法の指定<br />
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);//NEAREST);<br />
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);//NEAREST);<br />
glBindTexture(GL_TEXTURE_2D, 0);<br />
}<br />
void Init(){<br />
glClearColor(0.0, 0.0, 0.0, 1.0);<br />
glOrtho(0, WIDTH, HEIGHT, 0, -1, 1);<br />
glsl.InitGLSL("vertex.shader","flagment.shader");<br />
TexCreate(1,"sample.png");<br />
TexCreate(2,"sample.png");<br />
}<br />
int main(int argc, char *argv[])<br />
{<br />
glutInitWindowPosition(100, 100);<br />
glutInitWindowSize(WIDTH, HEIGHT);<br />
glutInit(&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>