#doom #wad #renderer #viewer #retro #file #opengl

app cristicbz/rs_doom

使用Rust编写的Doom渲染器/关卡查看器

3个版本

0.0.9 2018年8月5日
0.0.8 2017年8月25日
0.0.7 2015年3月26日

#396 in 图形API

2,288 stars & 48 watchers

1.5MB
10K SLoC

Build Status

Rust Doom

一个用Rust编写的Doom 1 & 2渲染器。大部分是在大约6年前学习这门语言时编写的,所以可能不是Rust代码的最佳示例!欢迎提交PR。

代码主要基于非常有用的Doom Wiki非官方Doom规范。它不是将原始Doom C源代码移植到Rust;我一直努力使代码尽可能符合Rust的风格,并且很长时间没有看过原始代码。

注意:您需要WAD文件才能尝试此程序。如果您没有游戏,请获取共享软件版本

截图

Zig-zag Screenshot Doom 2 Screenshot

构建说明

Rust Doom应该在Rust最新稳定版本上构建(但也已在beta和nightly版本上进行了测试),您可以使用Rust网站上描述的任何方法进行安装。

要构建,请在项目的根目录中运行cargo(其中包含Cargo.toml)

cargo build --release

请注意,您需要一个WAD文件(包含游戏的关卡和艺术资产)。如果您拥有该游戏(或者愿意花一些钱购买),您可以在游戏文件夹中找到WAD文件。如果没有,您可以使用互联网上漂浮的共享软件版本(如doom1.wad)。或者,虽然我不知道这些事情,您可能能够在互联网的某些不太美好的地方免费获得原始版本。

将WAD文件复制到repo根目录(Cargo.toml所在的位置)。然后,要运行

target/release/rs_doom --iwad your_wad_file.wad

如果没有任何标志,它将尝试加载'doom1.wad'的第一个关卡。您可以使用标志指定要加载的关卡、FOV和分辨率偏好。运行'-h'以获取选项列表。

目标

(可能更改)

  • 现代OpenGL 3+渲染器。没有立即模式的把戏:全是VBO和着色器。与一些GL端口不同,地板实际上是使用BSP计算出的凸多边形进行渲染。这种方法的缺点(或者优点取决于您的看法)是某些视觉错误(如粘液轨迹)不会显示出来。
  • 正确的256色调色板。使用原始调色板和colormaps来复制原始的照明效果(您会注意到事物会以可见的步骤变暗,并且随着变暗也会变灰)。在片段着色器中执行256色调色板查找是一种美妙的历史性做法。
  • 自由飞行摄像机。鼠标和键盘控制,实现6个自由度的完整控制。
  • 100%安全的代码。任何地方都没有令人烦恼的unsafe块。

待办事项

  • BSP -> 凸子区域转换。
  • 平面(地板和天花板)纹理映射。
  • 墙纹理映射。
  • 墙纹理对齐。
  • 滚动墙壁。
  • 动画平面。
  • 动画墙壁。
  • 照明效果(闪烁、闪烁、发光等)
  • 天空渲染。
  • 精灵渲染。
  • 正确的玩家移动(坠落等)
  • 玩家-平面碰撞。
  • 玩家-墙壁碰撞。
  • 精灵-玩家和精灵-精灵碰撞。
  • 精灵动画。
  • BSP视锥剔除。

依赖项

~5–14MB
~163K SLoC