diff --git a/examples.c b/examples.c index 6f5509c..f591db2 100644 --- a/examples.c +++ b/examples.c @@ -72,13 +72,13 @@ void exampleCornell( int width, int height, int channels, unsigned char **image) cam1.direction.z = 1; cam1.resolutionX = width; cam1.resolutionY = height; - cam1.screenDistance = 1; - cam1.width = 1.920; + cam1.screenDistance = 0.6; + cam1.width = 1.080; cam1.height = 1.080; - int objectCount = 7; + int objectCount = 13; object objectList[objectCount]; - cube makroObj1 = createCuboid((vec3){0.5,-0.5,5}, (vec3){1,0,0}, (vec3){0,1,0}, (vec3){0,0,1},(RGBA){1,0,0.5,1}); + cube makroObj1 = createCuboid((vec3){-1,-2,3}, (vec3){1.5,0,0}, (vec3){0,1.5,0}, (vec3){0,0,1.5},(RGBA){1,1,0.5,1}); objectList[0] = (object){1, &(makroObj1.quad1), 0}; objectList[1] = (object){1, &(makroObj1.quad2), 0}; objectList[2] = (object){1, &(makroObj1.quad3), 0}; @@ -86,9 +86,24 @@ void exampleCornell( int width, int height, int channels, unsigned char **image) objectList[4] = (object){1, &(makroObj1.quad5), 0}; objectList[5] = (object){1, &(makroObj1.quad6), 0}; - quad light1 = (quad){(vec3){0,1,5}, (vec3){0,0,1}, (vec3){0,1,0}, (vec3){0,-1,0}, (RGBA){1,1,1,1}}; + quad light1 = (quad){(vec3){-0.5,1.9,2.5}, (vec3){0,0,1}, (vec3){1,0,0}, (vec3){0,-1,0}, (RGBA){1,1,1,1}}; objectList[6] = (object){1, &(light1), 1}; + cube makroObj2 = createCuboid((vec3){-2,-2,-0.1}, (vec3){4,0,0}, (vec3){0,4,0}, (vec3){0,0,4},(RGBA){1,1,1,1}); + makroObj2.quad1.normal = vec3Scale(makroObj2.quad1.normal, -1); + makroObj2.quad2.normal = vec3Scale(makroObj2.quad2.normal, -1); + makroObj2.quad3.normal = vec3Scale(makroObj2.quad3.normal, -1); + makroObj2.quad4.normal = vec3Scale(makroObj2.quad4.normal, -1); + makroObj2.quad5.normal = vec3Scale(makroObj2.quad5.normal, -1); + makroObj2.quad6.normal = vec3Scale(makroObj2.quad6.normal, -1); + + objectList[7] = (object){1, &(makroObj2.quad1), 0}; + objectList[8] = (object){1, &(makroObj2.quad2), 0}; + objectList[9] = (object){1, &(makroObj2.quad3), 0}; + objectList[10] = (object){1, &(makroObj2.quad4), 0}; + objectList[11] = (object){1, &(makroObj2.quad5), 0}; + objectList[12] = (object){1, &(makroObj2.quad6), 0}; + displaySzene(objectList, objectCount, cam1, width, height, channels, image); diff --git a/helper.c b/helper.c index 90edc4f..2e29f3f 100644 --- a/helper.c +++ b/helper.c @@ -38,37 +38,37 @@ cube createCuboid(vec3 origin, vec3 right, vec3 up, vec3 forward, RGBA color) { object.quad1.origin = origin; object.quad1.v1 = right; object.quad1.v2 = up; - object.quad1.normal = vec3Normalize(vec3Cross(object.quad1.v1, object.quad1.v2)); + object.quad1.normal = vec3Normalize(vec3Cross(object.quad1.v2, object.quad1.v1)); object.quad1.color = color; object.quad2.origin = vec3Add(origin, forward); object.quad2.v1 = vec3Scale(forward, -1); object.quad2.v2 = up; - object.quad2.normal = vec3Normalize(vec3Cross(object.quad2.v1, object.quad2.v2)); + object.quad2.normal = vec3Normalize(vec3Cross(object.quad2.v2, object.quad2.v1)); object.quad2.color = color; object.quad3.origin = vec3Add(object.quad2.origin, right); object.quad3.v1 = vec3Scale(right, -1); object.quad3.v2 = up; - object.quad3.normal = vec3Normalize(vec3Cross(object.quad3.v1, object.quad3.v2)); + object.quad3.normal = vec3Normalize(vec3Cross(object.quad3.v2, object.quad3.v1)); object.quad3.color = color; object.quad4.origin = vec3Add(origin, right); object.quad4.v1 = forward; object.quad4.v2 = up; - object.quad4.normal = vec3Normalize(vec3Cross(object.quad4.v1, object.quad4.v2)); + object.quad4.normal = vec3Normalize(vec3Cross(object.quad4.v2, object.quad4.v1)); object.quad4.color = color; object.quad5.origin = origin; object.quad5.v1 = forward; object.quad5.v2 = right; - object.quad5.normal = vec3Normalize(vec3Cross(object.quad5.v1, object.quad5.v2)); + object.quad5.normal = vec3Normalize(vec3Cross(object.quad5.v2, object.quad5.v1)); object.quad5.color = color; object.quad6.origin = vec3Add(origin, up); object.quad6.v1 = right; object.quad6.v2 = forward; - object.quad6.normal = vec3Normalize(vec3Cross(object.quad6.v1, object.quad6.v2)); + object.quad6.normal = vec3Normalize(vec3Cross(object.quad6.v2, object.quad6.v1)); object.quad6.color = color; return object; diff --git a/main.c b/main.c index f7fbe4c..506348f 100644 --- a/main.c +++ b/main.c @@ -13,7 +13,7 @@ #include "collision.h" #include "raytrace.h" int main() { - int width = 1920; + int width = 1080; int height = 1080; int channels = 4; unsigned char *image = (unsigned char*)malloc(width * height * channels ); diff --git a/raytrace.c b/raytrace.c index c2bc91c..2a4d7cd 100644 --- a/raytrace.c +++ b/raytrace.c @@ -7,7 +7,7 @@ #include "helper.h" #include #define epsilon 1e-8 -#define RAYSPERPIXEL 3 +#define RAYSPERPIXEL 10 #define lightBounces 3 enum objectType { SPHERETYPE, diff --git a/test.png b/test.png index ec1cf53..6095d1b 100644 Binary files a/test.png and b/test.png differ