2个版本

0.0.5 2022年2月9日
0.0.4 2022年2月5日

#633 in 游戏开发

MIT许可证

280KB
5.5K SLoC

FeO OOP引擎

Crates.io Docs Build Status

另请参阅: feo-oop-engine-proc-macrosfeo-math

描述

FeO OOP引擎是我创建的一个库,帮助我学习3D引擎。这是我个人的项目。

该项目由两部分组成。 feo-math,数学模板;以及 feo-oop-engine。该引擎基于 vulkano 框架。该程序旨在简化3D应用程序开发。请注意,该程序具有其独特的 工作流程。该引擎的功能包括 脚本、面向对象编程(或简称OOP)、纹理、材质、光照、游戏对象以及obj和mtl处理。

时间线

这个项目源于一个看似简单的问题:如何将3D对象投影到2D表面上。然后变成了如何使用透视投影将3D对象投影到2D表面上。然后又进化为如何高效地使用透视投影将3D对象投影到2D表面上。当我开始这个项目时,我对Rust非常陌生。目前我感觉我可以接受任何Rust挑战。项目时间线复杂的原因有很多。我基本上在丢失了两台电脑(我现在又重新使用了第一台)之后放弃了使用git(我早已修复了那个愚蠢的错误)。在这之后,我被迫求助于外部驱动器上的旧备份(这非常令人困惑)。

工作流程

这个库允许创建控制游戏对象行为的脚本。一旦调用run函数,它就会控制线程,直到窗口关闭。在此期间,仍然可以创建新的游戏对象和可以添加到场景中的脚本。

为什么是脚本?

简单的答案是,我尝试了,并且喜欢结果。考虑到Rust以OOP而闻名,而脚本也不常见,以及我对挑战自我的热爱,我决定尝试实现这两者。我打算发布这个项目的ECS版本,但我希望提供这个选项,因为就我个人而言,鉴于我的Java、C#和Unity背景,我认为这更直观,尽管速度较慢。

兼容性

操作系统 兼容
Windows
Linux
OSX

有关Windows的问题,请参阅#1

用法

使用引擎非常简单。

构建场景

首先创建一个新的场景。

let scene = Scene::new(None); // Worldspace is not yet a fully completed feature

所有游戏对象都直接或间接存在于这里。

使用场景初始化引擎

要创建一个引擎,请使用FeoEngine::init(scene, specify_hardware)。这将创建一个feo_engine对象。

let mut engine = FeoEngine::init(scene, Some(1)); /* Here I am using Some(1) to choose the first hardware that can support the engine. If you do not know what you want to use use None and you will be prompted with a list of the options. */

构建对象

要构建对象,请使用要构建的对象的构造函数::new()。您可能想要构建一个光源和一个相机,以便能够看到场景。

// Objs are one type of GameObject
let obj = Obj::from_obj(
   Some("cube"), 
   "assets/standard-assets/models/shapes/cube.obj",
   None,
   None,
   None,
   None,
   true,
   engine.globals.clone(),
   None // The scripts go here
);

将对象传递到场景中

使用add_child()函数将您创建的对象添加到引擎中的场景。

engine.scene.write().unwrap().add_child(obj.unwrap());

运行引擎

当所有游戏对象都已创建时,您可以使用feo_engine的run()函数启动引擎。

engine.run()

许可

MIT License

Copyright (c) 2021 Lucas Ballmer

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

依赖项

~24–35MB
~369K SLoC