为了账号安全,请及时绑定邮箱和手机立即绑定

花了382小时学Rust,最后就出了个炫酷猴子模型

点击这里查看那只猴子。链接

我完全没有Rust的知识,在编写了382小时的Rust项目后,我编写了一个Rust游戏引擎,用来渲染这个PBR模型。

今年我开始学Rust了。这是一篇简短的文章,讲述了我学到了什么以及进展如何。

猴子?

下面展示的是一个快速搭建的Rust“游戏引擎”,它用PBR材质渲染了Blender中的猴子苏珊。

请参阅这里获取引擎的源代码。

由于这是一个学习项目,我尽可能多地自己动手做。我用到的唯一crate有png(用于加载图片)、windows-rs(用于Windows支持)以及web-sys、wasm-bindgen和js-sys(用于Web支持)。

这里有一些很酷的引擎特性,并没有什么太复杂的。

  • 引擎可以在Windows和Web上运行。
  • 在Windows上使用OpenGL进行渲染。
  • 在Web上使用WebGL进行渲染。
  • 所有的OpenGL绑定和加载过程都是我自己完成的。
  • 使用基于物理的渲染(PBR)着色器(主要参考LearnOpenGL.com)
  • 矩阵和向量的数学运算
  • 架构将平台与引擎、游戏代码与引擎代码、以及渲染后端与引擎分离。
  • 支持Windows开发中的DLL热重载。
过去10个月以来学习Rust的一些感想。

简单介绍一下背景。我目前的日常工作是 Unity 高级软件工程师一职,在这里工作了大约 8 年。我已经使用 Unity 超过 13 年时间。我编写了自己的 C++ 游戏引擎和 PBR 和 IBL 渲染器,但没有正式发布或投入专业使用。

这里有一些今年我参与的Rust项目,以及我为此花费的时间。

  • Gengar 是这个游戏引擎的名字。从头到尾,花了128个小时构建引擎的框架、渲染器以及支持Windows和Web。
  • 一个未完成且未发布的预算应用,使用Tauri + Leptos。
  • Advent of Code 是2023年Advent of Code的20天Rust解决方案。代码库在这里。
  • 基于Rust的8086处理器模拟器,遵循Casey Muratori的计算机增强课程。代码库在这里。
  • 通过阅读Rust官方书籍和跟随各种Rust教程来学习。
  • 研究基于Rust的区块链。
  • 最后,研究Graphite.rs编辑器项目,希望能尽快为该项目做出贡献。
基于 382 小时 Rust 编程后的想法

我主要写的是C#。那对我来说是主要的语言。

不像别人说的那样难用。也许是因为我以前用过C++,而且我一般不怎么用面向对象的编程。但所有权模型和借用检查器用起来感觉很自然。我从未和借用检查器“过不去”。借用检查器会指出很多问题,但通常它是对的。

Cargo真是棒,我可以写很多测试。我在Rust里写了好多测试,因为Cargo让写测试变得异常简单。自然而然地,我在开发新功能时就会写测试,这比手动测试简单多了。然后我就可以一直保留这些测试!这真是太棒了!

与 C# 相比,枚举和穷尽模式匹配感觉像拥有了超能力。这也使得错误处理变得简单。相比 C#,这种错误处理方式感觉非常好。特别是 Unity 项目中充满了关于什么可以或不可以为空的隐式假设。如果你不假设某些变量是否为空,那么你的代码将有 10% 的业务逻辑和 90% 的空值检查。同样的道理也适用于异常处理。记得要捕获异常,因为它们可能随时出现。

总体来说,Rust 感觉 使用起来更简单。我需要记住的东西更少才能处理一个Rust项目。通过特质和组合而非继承,我不需要在理解一个方法时记住一堆继承关系。代码明确地告诉我发生了什么。隐式性则要求我从记忆中调取信息。

这就结束了我的思考。

这里没什么特别新奇或深奥的内容。谢谢大家的阅读,接下来咱们就继续下一个项目吧!

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消