CS184 2020 Project Overhaul/Improvement Plan
Problems with current code
Reliance on non-portable APIs / Components
- UNIX file operations (APIs)
- CMake files are not portable
Flaws in CGL vector library
- Some operators are not correct, for example vector addition
- Not utilizing SIMD apperantly (one of the main performance problems)
- Seperated vector types and color types.
Bad user interface
- Kind of hard to remember all the keyboard controls
- No GUI libraries available in CGL
- In project 5, Qt5 is used as a GUI library but it's a bit heavy.
Non-standard file formats
- Non-standard
*.SVG
format - Non-standard
*.DAE
format
Probable solutions to the problems
Reliance on non-portable APIs / Components:
- Switch to C++17 with more complement standard libraries. Replace
dirent
withstd::filesystem
. - Rewrite the CMake files / modify the Windows part.
Flaws in CGL vector library
- Use open-source, well established libraries like
glm
- Modifying the CGL vector library may work, but it's not standard and not likely to work better than
glm
- Color types should be just written as normal vector types.
Bad user interface
- Use
ImGUI
to create graphics user interfaces for the projects. - Design a new interface
Non-standard file formats
- The non-standard
*.SVG
format is needed fortextri
as texture mapping is an very important course material. - The
*.DAE
format does not natively support definition of light sources, etc. The loader currently is also not very robust that the output from Blender may not be loaded correctly. Maybe switch toGLTF
or support the Blender tags for light source and materials.
Plan for overhauling
Overhauling all the projects is not a trivial task and is not likely to be complete reliably before the projects are released. This could be a multi-semester effort, but still very important and needed work. As the libraries and APIs get deprecated, we will need newer skeleton code.
As these projects are educational, we want them to be consistent between each other and also useful for students. This effort could be carried out in stages. The vector libraries and Unix file libraries can be replaced first for this semester, and a new build system could be brought out for this semester. The majority of the code will not be modified and this is a stepping stone for further, deeper changes in the skeleton code.
Overhauled / rewritten project code can be developed at the same time or after the existing code is ported to new libraries. These code can be thoughrouly tested and can be used in the next iteration of this course. (Spring 2021 maybe?)