diff --git a/img/tests/test.bmp b/img/tests/test.bmp index 84977fa..7f88582 100644 Binary files a/img/tests/test.bmp and b/img/tests/test.bmp differ diff --git a/img/tests/test.gif b/img/tests/test.gif index 701a519..064fe11 100644 Binary files a/img/tests/test.gif and b/img/tests/test.gif differ diff --git a/img/tests/test.png b/img/tests/test.png index 6e99f41..d459084 100644 Binary files a/img/tests/test.png and b/img/tests/test.png differ diff --git a/opengl-test-two/bin/Debug/opengl-test-two.exe b/opengl-test-two/bin/Debug/opengl-test-two.exe index 2f1a650..8c77a22 100644 Binary files a/opengl-test-two/bin/Debug/opengl-test-two.exe and b/opengl-test-two/bin/Debug/opengl-test-two.exe differ diff --git a/opengl-test-two/main.cpp b/opengl-test-two/main.cpp index b3a8463..8716c01 100644 --- a/opengl-test-two/main.cpp +++ b/opengl-test-two/main.cpp @@ -44,8 +44,8 @@ GLuint LoadTexture(char *filename,int *textw,int *texth) { // this reads from the sdl surface and puts it into an opengl texture glTexImage2D(GL_TEXTURE_2D, 0, mode, surface->w, surface->h, 0, mode, GL_UNSIGNED_BYTE, surface->pixels); // these affect how this texture is drawn later on...glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP_TO_EDGE); + glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); // clean up @@ -223,13 +223,13 @@ int main(int argc, char* args[]) { -1.0f, 1.0f, 0.0f, // (top - left ) }; // One color for each vertex. They were generated randomly. - static const GLfloat g_color_buffer_data[] = { - 0.583f, 0.771f, 0.014f, - 0.609f, 0.115f, 0.436f, - 0.327f, 0.483f, 0.844f, - 0.822f, 0.569f, 0.201f, - 0.435f, 0.602f, 0.223f, - 0.310f, 0.747f, 0.185f, + static const GLfloat g_uv_buffer_data[] = { + 0.0f, 1.0f-0.0f, // (bottom - left ) TRIANGLE 1 + 1.0f, 1.0f-0.0f, // (bottom - right) + 0.0f, 1.0f-1.0f, // (top - left ) + 1.0f, 1.0f-1.0f, // (top - right) TRIANGLE 2 + 1.0f, 1.0f-0.0f, // (bottom - right) + 0.0f, 1.0f-1.0f, // (top - left ) }; @@ -243,7 +243,7 @@ int main(int argc, char* args[]) { GLuint colorbuffer; glGenBuffers(1, &colorbuffer); glBindBuffer(GL_ARRAY_BUFFER, colorbuffer); - glBufferData(GL_ARRAY_BUFFER, sizeof(g_color_buffer_data), g_color_buffer_data, GL_STATIC_DRAW); + glBufferData(GL_ARRAY_BUFFER, sizeof(g_uv_buffer_data), g_uv_buffer_data, GL_STATIC_DRAW); @@ -251,12 +251,12 @@ int main(int argc, char* args[]) { - tex_jpe=LoadTexture("../img/tests/test.jpeg",&textw,&texth); + tex_jpe=LoadTexture("../img/tests/test.bmp",&textw,&texth); GLuint programID = LoadShaders("trimap.vertexshader", "trimap.fragmentshader"); printf("%d", programID); - //GLint textureLocation = glGetUniformLocationARB(programID, "myTextureSampler"); - //glUniform1iARB(textureLocation, tex_jpe); + GLint textureLocation = glGetUniformLocationARB(programID, "myTextureSampler"); + glUniform1i(textureLocation, tex_jpe); @@ -287,7 +287,7 @@ int main(int argc, char* args[]) { glBindBuffer(GL_ARRAY_BUFFER, colorbuffer); glVertexAttribPointer( 1, // attribute. No particular reason for 1, but must match the layout in the shader. - 3, // size + 2, // size GL_FLOAT, // type GL_FALSE, // normalized? 0, // stride diff --git a/opengl-test-two/opengl-test-two.depend b/opengl-test-two/opengl-test-two.depend index 072d654..a86399f 100644 --- a/opengl-test-two/opengl-test-two.depend +++ b/opengl-test-two/opengl-test-two.depend @@ -2,7 +2,7 @@ 1385320478 source:d:\owncloud\documents\programmierung\cpp\opengl-test-two\main.cpp -1473093222 source:d:\owncloud\documents\programmierung\cpp\imanox-chroma-matting\opengl-test-two\main.cpp +1473097371 source:d:\owncloud\documents\programmierung\cpp\imanox-chroma-matting\opengl-test-two\main.cpp diff --git a/opengl-test-two/trimap.fragmentshader b/opengl-test-two/trimap.fragmentshader index 29ff21b..bdd956c 100644 --- a/opengl-test-two/trimap.fragmentshader +++ b/opengl-test-two/trimap.fragmentshader @@ -1,8 +1,17 @@ #version 330 core -in vec3 fragmentColor; +// Interpolated values from the vertex shaders +in vec2 UV; + +// Ouput data out vec3 color; +// Values that stay constant for the whole mesh. +uniform sampler2D myTextureSampler; + void main(){ - color = fragmentColor; + + // Output color = color of the texture at the specified UV + color = texture( myTextureSampler, UV ).rgb; } + diff --git a/opengl-test-two/trimap.vertexshader b/opengl-test-two/trimap.vertexshader index 7d1aaec..59305f6 100644 --- a/opengl-test-two/trimap.vertexshader +++ b/opengl-test-two/trimap.vertexshader @@ -1,11 +1,17 @@ #version 330 core +// Input vertex data, different for all executions of this shader. layout(location = 0) in vec3 vertexPosition_modelspace; -layout(location = 1) in vec3 vertexColor; -out vec3 fragmentColor; +layout(location = 1) in vec2 vertexUV; + +// Output data ; will be interpolated for each fragment. +out vec2 UV; void main(){ - gl_Position.xyz = vertexPosition_modelspace; - gl_Position.w = 1.0; - fragmentColor = vertexColor; + // Output position of the vertex, in clip space : MVP * position + gl_Position = vec4(vertexPosition_modelspace,1); + + // UV of the vertex. No special space for this one. + UV = vertexUV; } +