No team participation is really encouraged in the case of the homeworks or the labs. If you need to use code you found online, you need to (1) check with us whether this is ok, (2) clearly mark it and (3) mention it in the readme file of your submission. If you fail to do one of these, it will be treated as academic misconduct. See here for more info.
In this lab you are writing a ray-tracer. After some basic features you will extend it to include some interesting effects. You should not use any OpenGL/WebGL nor any libraries (other than for XML parsing and reading/writing PNG images) in this assignment. You can use any programming language you want, as long as your programm compiles and runs on almighty without installing additional environments (This should work at least with Java and C++).
Hint: We all love JavaScript, but writing a ray tracer with it is not the best decision. Unless you have a lot of time...
We will use almighty server as a build environment. This means that your solutions of the Labs 3a and 3b must compile and run at least on almighty, which we will use in case we can't run or compile your solutions on our local machines during grading. You can transfer files from and to almighty using the scp command (or your OS equivalent) or alternatively clone your gitlab repo to almighty and compile your solution by ssh'ing to almighty and running cmake (c++) or gradle (java) (javac 11.0.7/g++ 7.5/cmake 3.10.2 are installed - make sure your java or c++ version of choice is compatible). Most of you are probably already familiar with working on almighty from other courses, but if you have any issues, feel free to ask - we are there to help you.
Alternatively, you can now also use Rust for this project.
For C++ and Java, your project must build and run on almighty. Regardless of the programming language you choose, you must not submit prebuilt binaries. Your project should compile and run (on almighty for C++/Java) without errors and without requiring extra configuration (if you use Rust, just use cargo for building - no need to make it work on almighty). Make sure to submit all the required files and to test it in time.
Be sure to submit any comments or remarks in a 'readme' file, especially how your submission can be built and executed.
Scene files
Your raytracer has to be able to read in any file in the format specified here. You can implement this by allowing your program to
accept a file path as an input parameter or by implementing a file picker or by letting the user
type in a file path during the runtime of your program, BUT having file paths hard coded in
your program and letting the user choose one or more scenes within a predefined set of scene
files is NOT an option!
(80%) Required Tasks
(20%) Effects
Pick up to 20% from the following effects:
(10%) Bonus
We will assign bonus marks up to 10% for either:
Please state in the readme of your submission, which tasks, effects or bonus points you have completed!
You should feel free to design your program as you see fit, however, the following progression will make life easier for you:
In general, some useful hints to observe:
Your raytracer should be able to read our xml based input file format:
Input file specification
The following input scenes will be used to grade your submission, so make sure that they are
displayed correctly.
Download example scenes
In order to get a full mark, you need to do all of the assigned tasks AND adhere to to lab procedures while creating readable and efficient code. I.e. if you accomplish only 70% of the tasks correctly, but you do not adhere to lab procedures, your final mark will be 70*(1-0.05) = 66.5%.