7个版本
0.2.3 | 2024年2月19日 |
---|---|
0.2.2 | 2024年2月19日 |
0.1.2 | 2024年1月14日 |
#413 in 图形API
137 每月下载量
用于 forte_cubes
180KB
3K SLoC
Forte Engine
一个基本的WGPU渲染引擎,设计时考虑了尽量减少开销。在未来,这将成为其他Forte Engine相关模块的基础。
模块
数学
对cgmath
的扩展,以简化我们的工作。例如,Quaternion::euler_deg_x(angle: f32)
允许我们快速创建绕x轴旋转的欧拉角四元数。
渲染
基本的渲染引擎。它处理从创建应用程序和窗口,到处理输入,再到渲染网格的所有操作。下面是示例。
灯光
此模块处理灯光所需的基本信息。下面是示例。
着色器信息
基本
组0:相机信息
包含相机的信息。
结构体参数
- view_pos:相机在3D空间中的位置。第四个W值可以设置为着色器所需的任何值。
- view_proj:用于渲染的组合视图和投影矩阵。
struct CameraUniform {
view_pos: vec4<f32>,
view_proj: mat4x4<f32>,
};
@group(0) @binding(0)
var<uniform> camera: CameraUniform;
组1:纹理
用于渲染的纹理。
绑定0:纹理本身。绑定1:将用于根据WGPU规范“采样”纹理的采样器。
@group(1) @binding(0)
var t_diffuse: texture_2d<f32>;
@group(1) @binding(1)
var s_diffuse: sampler;
选项:灯光
组2:灯光
这是场景中灯光所需的基本信息。您可能希望根据灯光与玩家的距离调整传递给着色器的灯光。
结构体参数
- position:灯光在3D空间中的位置。
- range:灯光的单位范围。
- color:灯光的颜色。
- exponent:用于“软化”灯光边缘的指数。
- direction:灯光指向的方向,如果设置了截止值,则需要设置此值。
- 截止值:光线“截止”的点积,这对于聚光灯很有用,因为聚光灯不会在360度内发光。
struct Light {
position: vec3<f32>,
range: f32,
color: vec3<f32>,
exponent: f32,
direction: vec3<f32>,
cutoff: f32
}
@group(2) @binding(0)
var<storage, read_write> lights: array<Light>;
@group(2) @binding(1)
var<uniform> num_lights: u32;
@group(2) @binding(2)
var<uniform> ambient_light: vec3<f32>;
依赖项
~43–81MB
~1M SLoC