开发者 Daniel Hooper 在一周内使用 C 语言和 raylib 库完成了一个 3D 建模器项目 ShapeUp,代码行数:
- 2024 行 C 代码
- 250 行 GLSL 代码
-
总数 2274 行
Daniel Hooper 发布了一篇关于他在一周内使用 C 语言创建 3D 模型器 ShapeUp 的文章。ShapeUp 使用了 signed distance fields (SDFs) 和 ray marching 技术来快速实现 3D 渲染,这使得在短时间内从头开始创建 3D 项目成为可能。
Daniel 选择 C 语言是因为它的编译速度快,语法简洁明了,且易于理解和记忆,同时可以轻松编译成原生代码和 WebAssembly。他的 “日常工作项目” 使用了大量的 C 和 Objective-C 代码,而 ShapeUp 项目相比之下非常简单,只有一个小的 C 文件。
在 ShapeUp 中,模型由 Shapes 结构体组成,这些结构体存储在一个静态分配的数组中,这样可以避免内存分配失败和内存泄漏的问题。尽管 raylib 库在快速启动项目方面表现良好,但它的设计选择和缺乏文档等问题给开发带来了不便。Daniel 还提到了 raylib 的一些问题,如使用 int
而非枚举类型、缺乏参数验证、依赖管理问题以及 raygui UI 库的局限性。
ShapeUp 的开发分为四个主要部分:
- 用户界面
- GLSL 着色器生成器光线追踪渲染器
- 基于 GPU 的鼠标选择
- 用于导出的 marching cubes 算法
Daniel 强调了正确的优先级设定和避免分心的重要性,以及通过简单有效的解决方案来应对复杂问题的方法。他的开发策略是确保在任何时刻都有一个可工作的 3D 模型器,并随着时间的推移不断改进它。最终,他在一周内完成了一个能够创建有意义 3D 模型并导出为 .obj 文件的程序,该程序也能在多个平台上运行。
The project is 2024 lines of C and 250 lines GLSL. Kind of surprising that a somewhat useful 3D modeler can be expressed in ~2300 lines.
这个项目包含 2024 行 C 代码和 250 行 GLSL 代码。令人惊讶的是,一个相对实用的 3D 建模工具竟然可以在大约 2300 行中实现。
最后还给作者他装起来了:
Other jam participants seemed impressed by ShapeUp but I don’t feel like I achieved much. It’s a relatively simple project. If there is anything special about what I did, it is that I had the taste to choose what to make, the knowledge to make it, and the discipline to do it in a week.
其他参与者似乎对 ShapeUp 印象深刻,但我觉得自己并没有取得太多成就。这是一个相对简单的项目。如果说我做的有什么特别之处,那就是我有品味去选择制作什么,有知识去实现它,还有在一周内完成它的自律。