diff --git a/OpenGL_Raytracer/.vs/OpenGL_Raytracer/v16/.suo b/OpenGL_Raytracer/.vs/OpenGL_Raytracer/v16/.suo index ad71fe233c799022e005fb5f194d58e31373dfe8..8dbf3cdf6fdc8424d7accfc7f1f4ac28a2f05e19 100644 Binary files a/OpenGL_Raytracer/.vs/OpenGL_Raytracer/v16/.suo and b/OpenGL_Raytracer/.vs/OpenGL_Raytracer/v16/.suo differ diff --git a/OpenGL_Raytracer/.vs/OpenGL_Raytracer/v16/Browse.VC.db b/OpenGL_Raytracer/.vs/OpenGL_Raytracer/v16/Browse.VC.db index e83a5b1ac11d7db8a42ef610fdb3f84b436b26e1..e7770da95e252c3925386df3d2038ab0e69af16e 100644 Binary files a/OpenGL_Raytracer/.vs/OpenGL_Raytracer/v16/Browse.VC.db and b/OpenGL_Raytracer/.vs/OpenGL_Raytracer/v16/Browse.VC.db differ diff --git a/OpenGL_Raytracer/.vs/OpenGL_Raytracer/v16/ipch/AutoPCH/7f07d9326a32b408/GLCALLS.ipch b/OpenGL_Raytracer/.vs/OpenGL_Raytracer/v16/ipch/AutoPCH/7f07d9326a32b408/GLCALLS.ipch index cd2a48d436184ce1f0a16ba8166f68a500d7df76..bd47dae0c203fe0e31a02ad63948ee6c118421b6 100644 Binary files a/OpenGL_Raytracer/.vs/OpenGL_Raytracer/v16/ipch/AutoPCH/7f07d9326a32b408/GLCALLS.ipch and b/OpenGL_Raytracer/.vs/OpenGL_Raytracer/v16/ipch/AutoPCH/7f07d9326a32b408/GLCALLS.ipch differ diff --git a/OpenGL_Raytracer/.vs/OpenGL_Raytracer/v16/ipch/AutoPCH/aac77f471637a56b/OPENGL_RAYTRACER.ipch b/OpenGL_Raytracer/.vs/OpenGL_Raytracer/v16/ipch/AutoPCH/aac77f471637a56b/OPENGL_RAYTRACER.ipch index e8e65dcbfd1a59a96bb55af93577cc171058e338..c40224960c9b644685de9d0f36b36a1622788b66 100644 Binary files a/OpenGL_Raytracer/.vs/OpenGL_Raytracer/v16/ipch/AutoPCH/aac77f471637a56b/OPENGL_RAYTRACER.ipch and b/OpenGL_Raytracer/.vs/OpenGL_Raytracer/v16/ipch/AutoPCH/aac77f471637a56b/OPENGL_RAYTRACER.ipch differ diff --git a/OpenGL_Raytracer/OpenGL_Raytracer/OpenGL_Raytracer.cpp b/OpenGL_Raytracer/OpenGL_Raytracer/OpenGL_Raytracer.cpp index 3987775a189f04e5e411586373b0b117a213b412..f35bc706e3383de15ecc29a2475738ac8c946934 100644 --- a/OpenGL_Raytracer/OpenGL_Raytracer/OpenGL_Raytracer.cpp +++ b/OpenGL_Raytracer/OpenGL_Raytracer/OpenGL_Raytracer.cpp @@ -6,8 +6,8 @@ int main(int argc, char const* argv[]) { - int width = 640; - int height = 480; + int width = 1024; + int height = 768; //set width and height according to input parameters if (argc == 3) @@ -20,7 +20,7 @@ int main(int argc, char const* argv[]) if (int inHeight = atoi(argv[1]) < 10000) { - if (inHeight < 0) + if (inHeight < 0 && inHeight > -10000) width = -inHeight; } } diff --git a/OpenGL_Raytracer/OpenGL_Raytracer/Shader/compute.glsl b/OpenGL_Raytracer/OpenGL_Raytracer/Shader/compute.glsl index 5217c5fadbc59d58dbfb0ab28d9acaeafbbd5202..6b1a51b7fa8f401ca8503e5a27161a38cfa5c939 100644 --- a/OpenGL_Raytracer/OpenGL_Raytracer/Shader/compute.glsl +++ b/OpenGL_Raytracer/OpenGL_Raytracer/Shader/compute.glsl @@ -1,4 +1,4 @@ -#version 430 +/*#version 430 layout (local_size_x = 1, local_size_y = 1) in; layout (rgba32f, binding = 0) uniform image2D img_output; @@ -54,4 +54,44 @@ void main () { } // TODO: gl_GlobalInvocationID.xy gives (0,0), but we want it to hold the current Pixel's Position! -// After that, you should check on the Hit-Calculation if it does not give the Sphere Shape. \ No newline at end of file +// After that, you should check on the Hit-Calculation if it does not give the Sphere Shape. +*/ + +#version 430 +//size of local work group +layout(local_size_x = 1, local_size_y = 1) in; +//internal image format +layout(rgba32f, binding = 0) uniform image2D img_output; + +vec3 ray_d = vec3(0.0, 0.0, -1.0); // ortho +vec3 sphere_c = vec3(0.0, 0.0, -10.0); +float sphere_r = 7.07; + +void main() { + // base pixel colour for image + vec4 pixel = vec4(1.0, 0.0, 0.0, 1.0); + // get index in global work group i.e x,y position + ivec2 pixel_coords = ivec2(gl_GlobalInvocationID.xy); + + // + // Raytracing stuff + // + + float max_x = 5.0; + float max_y = 5.0; + ivec2 dims = imageSize(img_output); // fetch image dimensions + float x = (float(pixel_coords.x * 2 - dims.x) / dims.x); + float y = (float(pixel_coords.y * 2 - dims.y) / dims.y); + vec3 ray_o = vec3(x * max_x, y * max_y, 0.0); + vec3 omc = ray_o - sphere_c; + float b = dot(ray_d, omc); + float c = dot(omc, omc) - sphere_r * sphere_r; + float bsqmc = b * b - c; + // hit one or both sides + if (bsqmc >= 0.0) { + pixel = vec4(0.4, 0.4, 1.0, 1.0); + } + + // output to a specific pixel in the image + imageStore(img_output, pixel_coords, pixel); +} diff --git a/OpenGL_Raytracer/OpenGL_Raytracer/glCalls.cpp b/OpenGL_Raytracer/OpenGL_Raytracer/glCalls.cpp index a9b47105af7da68d61cdaaf2010119538badc89f..3912edd5d005f462719306e2e4521b3a0acaee6d 100644 --- a/OpenGL_Raytracer/OpenGL_Raytracer/glCalls.cpp +++ b/OpenGL_Raytracer/OpenGL_Raytracer/glCalls.cpp @@ -90,16 +90,16 @@ bool rt::rt_window::init(int sizeX, int sizeY, std::string name) //set vertex data of texture quad rt_texture_quad = new VertexData[4]; - rt_texture_quad[0].position[0] = 1.0; + rt_texture_quad[0].position[0] = -1.0; rt_texture_quad[0].position[1] = 1.0; rt_texture_quad[0].position[2] = 0.0; rt_texture_quad[1].position[0] = -1.0; - rt_texture_quad[1].position[1] = 1.0; + rt_texture_quad[1].position[1] = -1.0; rt_texture_quad[1].position[2] = 0.0; - rt_texture_quad[2].position[0] = -1.0; - rt_texture_quad[2].position[1] = -1.0; + rt_texture_quad[2].position[0] = 1.0; + rt_texture_quad[2].position[1] = 1.0; rt_texture_quad[2].position[2] = 0.0; rt_texture_quad[3].position[0] = 1.0; @@ -108,13 +108,13 @@ bool rt::rt_window::init(int sizeX, int sizeY, std::string name) //-------------------------------init UserData---------------------------------------------------------------- //allocate memory for user data - userData = new UserData; + //userData = new UserData; //Not necessary //glfwSetWindowUserPointer(window, (void*)userData); //set vertex data count - userData->vertexDataCount = 4; + vertexDataCount = 4; //-------------------------------init Non-Compute Shaders + Program-------------------------------------------------------- //Create the vertex shader: @@ -167,28 +167,28 @@ bool rt::rt_window::init(int sizeX, int sizeY, std::string name) checkError("glUseProgram"); // store program object in context - userData->programObjectNonCompute = programObject; + programObjectNonCompute = programObject; //initialize the modell - userData->time = glfwGetTime(); + time = glfwGetTime(); //-------------------------------init VertexArray + Buffers---------------------------------------------------------------- // create and bind dummy vao... it is needed in desktop OpenGL - glGenVertexArrays(1, &(userData->vertexArrayObject)); + glGenVertexArrays(1, &(vertexArrayObject)); checkError("glGenVertexArray"); - glBindVertexArray(userData->vertexArrayObject); + glBindVertexArray(vertexArrayObject); checkError("glBindVertexArray"); // generate a VBO - glGenBuffers(1, &(userData->vertexBufferObject)); + glGenBuffers(1, &(vertexBufferObject)); checkError("glGenBuffers"); - glBindBuffer(GL_ARRAY_BUFFER, userData->vertexBufferObject); + glBindBuffer(GL_ARRAY_BUFFER, vertexBufferObject); checkError("glBindBuffer"); //set buffer data - glBufferData(GL_ARRAY_BUFFER, sizeof(VertexData) * userData->vertexDataCount, (const GLvoid*)rt_texture_quad, GL_STATIC_DRAW); + glBufferData(GL_ARRAY_BUFFER, sizeof(VertexData) * vertexDataCount, (const GLvoid*)rt_texture_quad, GL_STATIC_DRAW); checkError("glBufferData"); //attribute index, component count, normalize, stride, pointer @@ -229,13 +229,11 @@ bool rt::rt_window::init(int sizeX, int sizeY, std::string name) void rt::rt_window::teardown() { - glDeleteBuffers(1, &(userData->vertexBufferObject)); + glDeleteBuffers(1, &(vertexBufferObject)); checkError("glDeleteBuffers"); - glDeleteVertexArrays(1, &(userData->vertexArrayObject)); + glDeleteVertexArrays(1, &(vertexArrayObject)); checkError("glDeleteVertexArrays"); - - delete(userData); } void rt::rt_window::error_callback(int error, const char* description) @@ -316,16 +314,16 @@ void rt::rt_window::initComputeShader() glLinkProgram(computeProgram); checkError("linking program"); - userData->programObjectCompute = computeProgram; + programObjectCompute = computeProgram; } void rt::rt_window::update() { //using compute shader to do the raytracing bit - glUseProgram(userData->programObjectCompute); + glUseProgram(programObjectCompute); glDispatchCompute((GLuint)windowWidth, (GLuint)windowHeight, 1); - //image needs to be written before it is read + //image needs to be written before it is used glMemoryBarrier(GL_SHADER_IMAGE_ACCESS_BARRIER_BIT); /* @@ -340,19 +338,7 @@ void rt::rt_window::update() //Fmod = float modulo, [0.0, 2pi] userData->angleY = fmod(userData->angleY + (Y_ROT_SPEED * timeDelta), 2 * M_PI); */ - - // get the window size and update quad and texture size if necessary - int tmpWidth = windowWidth; - int tmpHeight = windowHeight; - glfwGetFramebufferSize(window, &windowWidth, &windowHeight); - if (tmpWidth != windowWidth || tmpHeight != windowHeight) - { - throw std::exception("TODO: change quad texture size"); - } - - // set viewport - glViewport(0, 0, windowWidth, windowHeight); - checkError("glViewport"); + } void rt::rt_window::draw() @@ -361,10 +347,10 @@ void rt::rt_window::draw() glClear(GL_COLOR_BUFFER_BIT); // use program - glUseProgram(userData->programObjectNonCompute); + glUseProgram(programObjectNonCompute); checkError("glUseProgram"); - glBindVertexArray(userData->vertexArrayObject); + glBindVertexArray(vertexArrayObject); //set finished texture glActiveTexture(GL_TEXTURE0); @@ -372,7 +358,8 @@ void rt::rt_window::draw() // draw stuff // primitive type, start index in array, number of elements to render - glDrawArrays(GL_TRIANGLE_FAN, 0, userData->vertexDataCount); + //glDrawArrays(GL_TRIANGLE_FAN, 0, vertexDataCount); + glDrawArrays(GL_TRIANGLE_STRIP, 0, vertexDataCount); checkError("glDrawArrays"); } diff --git a/OpenGL_Raytracer/OpenGL_Raytracer/glCalls.h b/OpenGL_Raytracer/OpenGL_Raytracer/glCalls.h index be963bedec0202ffa1a0f5b9f2b0c970b9862716..8438941789ae8351253e9c0a44459d7d065f22c0 100644 --- a/OpenGL_Raytracer/OpenGL_Raytracer/glCalls.h +++ b/OpenGL_Raytracer/OpenGL_Raytracer/glCalls.h @@ -35,19 +35,16 @@ namespace rt GLfloat texCoords[3]; }; - struct UserData - { - GLuint programObjectNonCompute; - GLuint programObjectCompute; - GLuint vertexBufferObject; - GLuint vertexDataCount; - GLuint vertexArrayObject; - double time; - }; + //UserData + GLuint programObjectNonCompute; + GLuint programObjectCompute; + GLuint vertexBufferObject; + GLuint vertexDataCount; + GLuint vertexArrayObject; + double time; //Variables GLFWwindow* window; - struct UserData* userData; int windowWidth, windowHeight; GLuint texture; //for raytracing struct VertexData* rt_texture_quad; //quad, which the texture is presented on diff --git a/OpenGL_Raytracer/OpenGL_Raytracer/x64/Debug/OpenGL_Raytracer.log b/OpenGL_Raytracer/OpenGL_Raytracer/x64/Debug/OpenGL_Raytracer.log index 04f845fec7dd889b03a73cb545f263027caf28a7..706e59191377fe2c59e08d5f51a01f11a6f4dff2 100644 --- a/OpenGL_Raytracer/OpenGL_Raytracer/x64/Debug/OpenGL_Raytracer.log +++ b/OpenGL_Raytracer/OpenGL_Raytracer/x64/Debug/OpenGL_Raytracer.log @@ -1,3 +1,2 @@  glCalls.cpp - LINK : D:\Freiberg\Multimeida\Raytracing\mm_raytracer\OpenGL_Raytracer\x64\Debug\OpenGL_Raytracer.exe wurde nicht gefunden oder beim letzten inkrementellen Linkvorgang nicht erstellt; vollständiger Link wird durchgeführt. OpenGL_Raytracer.vcxproj -> D:\Freiberg\Multimeida\Raytracing\mm_raytracer\OpenGL_Raytracer\x64\Debug\OpenGL_Raytracer.exe diff --git a/OpenGL_Raytracer/OpenGL_Raytracer/x64/Debug/OpenGL_Raytracer.obj b/OpenGL_Raytracer/OpenGL_Raytracer/x64/Debug/OpenGL_Raytracer.obj index 52460f8cd8190cd7cc9eaf10919e96bec35731ba..32a2c074740db419cf4698a94b2b7163ccda8abf 100644 Binary files a/OpenGL_Raytracer/OpenGL_Raytracer/x64/Debug/OpenGL_Raytracer.obj and b/OpenGL_Raytracer/OpenGL_Raytracer/x64/Debug/OpenGL_Raytracer.obj differ diff --git a/OpenGL_Raytracer/OpenGL_Raytracer/x64/Debug/OpenGL_Raytracer.tlog/CL.write.1.tlog b/OpenGL_Raytracer/OpenGL_Raytracer/x64/Debug/OpenGL_Raytracer.tlog/CL.write.1.tlog index b925d546f372a32cfefef946b8378ba779886e7a..6e2868c0770af296fb2d5901bdc5a5d738f778f0 100644 Binary files a/OpenGL_Raytracer/OpenGL_Raytracer/x64/Debug/OpenGL_Raytracer.tlog/CL.write.1.tlog and b/OpenGL_Raytracer/OpenGL_Raytracer/x64/Debug/OpenGL_Raytracer.tlog/CL.write.1.tlog differ diff --git a/OpenGL_Raytracer/OpenGL_Raytracer/x64/Debug/OpenGL_Raytracer.tlog/link.read.1.tlog b/OpenGL_Raytracer/OpenGL_Raytracer/x64/Debug/OpenGL_Raytracer.tlog/link.read.1.tlog index a4e5ec16183aa5e40ab2ecfdd0454c346ea57f86..9cb509feb60c38e784ee38754959cfe1c1d499e8 100644 Binary files a/OpenGL_Raytracer/OpenGL_Raytracer/x64/Debug/OpenGL_Raytracer.tlog/link.read.1.tlog and b/OpenGL_Raytracer/OpenGL_Raytracer/x64/Debug/OpenGL_Raytracer.tlog/link.read.1.tlog differ diff --git a/OpenGL_Raytracer/OpenGL_Raytracer/x64/Debug/OpenGL_Raytracer.tlog/link.write.1.tlog b/OpenGL_Raytracer/OpenGL_Raytracer/x64/Debug/OpenGL_Raytracer.tlog/link.write.1.tlog index 02e18295eb3e67ea8cfb688a9c1a745ca7d4a227..a4aac7de216f462fc6019ef0f5b7236699c6f111 100644 Binary files a/OpenGL_Raytracer/OpenGL_Raytracer/x64/Debug/OpenGL_Raytracer.tlog/link.write.1.tlog and b/OpenGL_Raytracer/OpenGL_Raytracer/x64/Debug/OpenGL_Raytracer.tlog/link.write.1.tlog differ diff --git a/OpenGL_Raytracer/OpenGL_Raytracer/x64/Debug/glCalls.obj b/OpenGL_Raytracer/OpenGL_Raytracer/x64/Debug/glCalls.obj index 4e2503635877e0d93fac4766556487087a55e87a..2cfc04da249f552250b1d6866b4391f6ec5b448f 100644 Binary files a/OpenGL_Raytracer/OpenGL_Raytracer/x64/Debug/glCalls.obj and b/OpenGL_Raytracer/OpenGL_Raytracer/x64/Debug/glCalls.obj differ diff --git a/OpenGL_Raytracer/OpenGL_Raytracer/x64/Debug/vc142.idb b/OpenGL_Raytracer/OpenGL_Raytracer/x64/Debug/vc142.idb index c7b0a666b26eac9298405b03fbdf0aabd7f0c1c1..6899b4a84256f93bd13088604df9fc03b43e8619 100644 Binary files a/OpenGL_Raytracer/OpenGL_Raytracer/x64/Debug/vc142.idb and b/OpenGL_Raytracer/OpenGL_Raytracer/x64/Debug/vc142.idb differ diff --git a/OpenGL_Raytracer/OpenGL_Raytracer/x64/Debug/vc142.pdb b/OpenGL_Raytracer/OpenGL_Raytracer/x64/Debug/vc142.pdb index 3c97e99accf298ee2ada4c3f9ee1a20ab6705499..ca2d08f0779eebcadadc23874755cadc8f468cc0 100644 Binary files a/OpenGL_Raytracer/OpenGL_Raytracer/x64/Debug/vc142.pdb and b/OpenGL_Raytracer/OpenGL_Raytracer/x64/Debug/vc142.pdb differ diff --git a/OpenGL_Raytracer/x64/Debug/OpenGL_Raytracer.exe b/OpenGL_Raytracer/x64/Debug/OpenGL_Raytracer.exe index 10144f0e26f18b91e999f6f5c19859e17d064f97..542d37332a5a3205f41471445e7e43c28ce07e1b 100644 Binary files a/OpenGL_Raytracer/x64/Debug/OpenGL_Raytracer.exe and b/OpenGL_Raytracer/x64/Debug/OpenGL_Raytracer.exe differ diff --git a/OpenGL_Raytracer/x64/Debug/OpenGL_Raytracer.ilk b/OpenGL_Raytracer/x64/Debug/OpenGL_Raytracer.ilk index 3c4485f82a5dc472cff64da85091aca7e1250ba4..fa6a33234feafbf1b814e77908a62af84c413c7a 100644 Binary files a/OpenGL_Raytracer/x64/Debug/OpenGL_Raytracer.ilk and b/OpenGL_Raytracer/x64/Debug/OpenGL_Raytracer.ilk differ diff --git a/OpenGL_Raytracer/x64/Debug/OpenGL_Raytracer.pdb b/OpenGL_Raytracer/x64/Debug/OpenGL_Raytracer.pdb index 78db971d12166bf25ced57b573b6ade05f866f5d..4f116c5eeae07bc9f0b0d9c6bd57724420f04a0c 100644 Binary files a/OpenGL_Raytracer/x64/Debug/OpenGL_Raytracer.pdb and b/OpenGL_Raytracer/x64/Debug/OpenGL_Raytracer.pdb differ