This is a course project for CGT581 geometry modeling class. The final goal for this project is to create a procedural generated planet.
I implemented this demo using C++/OpenGL/GLSL. Some of the important features about the demo include:
- Implemented the adaptive level of detail to base planet geometry. The adaptive level of detail algorithm consists two important components: one is the high-level geometry division, which is driven by subdividing or merging triangles based on the distance between planet and camera. This process is implemented with recursively in our virtual environment function call; the low-level is implemented with openGL tessellation feature, which can divide the base planet sphere into extremely small sub-triangles in order to provide the high resolution of the terrain.
- Implemented the procedural generated terrain. Apply the Perlin Noise and its modified version ridged multifractal noise to generate terrain. Since the Perlin Noise is implemented in the shader, so it provides the ability to modify the terrain on the fly.
- Implemented the multiple texture levels in order to distinguish different terrain. These terrain levels are created by summation of the different base textures. The terrain height value is used as a mask to display different texture levels.
By the end of the course, I just finished the general framework of a procedural generated planet. For the future work, I really want to polish the texture and terrain generation algorithm in order to create more diverse landscape. I also want to explore some techniques related to atmospheric scatter rendering. That will bring a more visual appealing virtual planet.
This project is far from completion, I will constantly update it when I have time…
Thanks for reading.