上次更新:2023/07/26
分形是很美丽也很有趣的东西,我打算通过C++代码生成三维分形模型,然后导出到obj格式,用3d软件读取并渲染,所以我设计了这个程序,帮助我构建和保存模型,还能通过OpenGL预览模型。一些导出的模型用Arnold渲染的图放在了rendered
文件夹里。
编译器需要支持C++ 17和OpenMP
在Windows和Linux下需要配置好OpenGL的GLFW、glad、glm。OpenGL版本在3.3以上即可。
我自己尝试在Windows 11下用Visual Studio 2022编译运行成功,在Fedora 38上用g++编译运行成功。g++命令如下:
g++ -std=c++17 -o out ./AbstractModelMaker.cpp ./glad.c ./camera.h ./ABMath.h ./Generator.cpp ./Generator.h -lglfw3 -lGL -lm -lXrandr -lXi -lX11 -lpthread -ldl -lXinerama -lXcursor -fopenmp
如果只需要生成模型而不需要OpenGL显示,可以只使用ABMath.h文件,配置好glm和OpenMP即可。
可以沿曲线挤出平面图形,曲线可以通过参数方程或导函数提供。
可以把平面图形三角化,仅保证正确渲染。采用的是简单的隔点连线的方法。未采用Delaunay方法。
使用Marching Cubes 方法,用OpenMP并行地把体积转换成三角网格。
Marching Cubes 源码来自 Matt's Webcorner
Generator.cpp的Generator::init()函数中,包含了一些示例函数,名称为demoX(),可以注释掉并保留其中一个,运行之即可看到该函数的效果。
滚轮调整相机距离。鼠标左键拖动旋转相机。鼠标右键拖动移动相机。
键盘按键 | 功能 |
---|---|
2 | 使用面法线显示 |
3 | 使用点法线平滑显示 |
4 | 线框显示 |
5 | 着色显示 |
i | 输出模型的点和三角面数 |
s | 保存到obj文件 |
Esc | 退出 |
The MIT License (MIT)