10 个版本
0.5.3 | 2021 年 3 月 9 日 |
---|---|
0.5.2 | 2020 年 11 月 19 日 |
0.5.0 | 2020 年 4 月 12 日 |
0.4.3 | 2020 年 1 月 17 日 |
0.1.0 | 2019 年 2 月 9 日 |
在 图形 API 中排名 360
每月下载量 514
用于 blockish
71KB
522 行
示例
struct Example;
impl Pipeline for Example {
type Vertex = [f32; 2];
type VsOut = ();
type Pixel = [u8; 4];
// Vertex shader
fn vert(&self, pos: &Self::Vertex) -> ([f32; 3], Self::VsOut) {
([pos[0], pos[1], 0.0], ())
}
// Fragment shader
fn frag(&self, _: &Self::VsOut) -> Self::Pixel {
[255, 0, 0, 255] // Red
}
}
fn main() {
let mut color = Buffer2d::new([640, 480], [0; 4]);
let mut depth = Buffer2d::new([640, 480], 1.0);
Example.draw::<Triangles<_>, _>(
&[
[-1.0, -1.0],
[ 1.0, -1.0],
[ 0.0, 1.0],
],
&mut color,
&mut depth,
);
}
更多代码示例请参阅 examples/
。
什么是 euc
?
euc
是一个灵活、易于使用的库,允许在 CPU 上进行 3D 渲染。它具有便携、紧凑的设计,非常适合原型设计、单元测试或简单的实时应用程序。目前 euc
正在积极开发中。
为什么?
-
现代图形 API 复杂、冗长。在 CPU 上渲染意味着更少的复杂性、更少的样板代码和更少的冗长:非常适合测试想法。
-
现代 CPU 的速度足够快,可以使简单的 3D 程序以合理的速度运行(尽管当然无法与 GPU 相比)。仅使用 CPU 就可以编写出令人惊讶的复杂实时 3D 软件。
-
不需要 GPU 接口意味着
euc
非常便携。因此,如果您的编译器是 nightly 版本,那么euc
是no_std
。 -
euc
具有一致的跨平台行为,并且不需要 GPU 运行。这使得它非常适合用作单元测试工具。 -
在 CPU 上运行允许更动态的数据访问方式。对于性能不是主要关注点的应用程序,
euc
降低了低级 3D 开发的门槛,并允许实现更多新颖的图形渲染方法。
坐标系
在可能的情况下,euc
尝试使用类似于 OpenGL 的坐标系。如果您熟悉 OpenGL,您将能够轻松地与 euc
一起工作。
发布模式
默认情况下,Cargo会以调试模式编译Rust代码。在这种模式下,代码的优化非常少,因此软件渲染的性能往往会受到影响。为了以良好的性能体验此项目,请确保使用--release
标志进行编译。
no_std
euc
可以在没有标准库支持的平台上进行编译。这使得它非常适合在嵌入式设备上渲染3D图形。您可以通过在Cargo.toml
文件中禁用默认功能并启用libm
功能来启用no_std
支持,如下所示
[dependencies]
euc = { version = "x.y.z", default-features = false, features = ["libm"] }
目标
-
支持用Rust编写的可编程着色器
-
支持常见的管道功能,如纹理采样器、多个渲染过程、统一数据等。
-
简单、优雅的接口,可扩展性好
-
正确性
非目标
-
极致优化(尽管会采摘明显的低垂之果)
-
与现有API的兼容性/合规性(例如:OpenGL)
许可证
euc
的发行许可由用户自行决定
-
Apache License,版本2.0,(https://apache.ac.cn/licenses/LICENSE-2.0)
由用户决定。
依赖
~0.8–1MB
~17K SLoC