5 releases
new 0.1.4 | Jan 24, 2025 |
---|---|
0.1.3 | Jan 24, 2025 |
0.1.2 | Jan 23, 2025 |
0.1.1 | Jan 23, 2025 |
0.1.0 | Jan 23, 2025 |
#107 in Graphics APIs
568 downloads per month
1MB
2K
SLoC
RustCraft
这个项目是 Rust 中 OpenGL 的集成框架,它包含了但不限于以下内容:
- 日志记录器
- 线性代数工具
- 矩阵及其运算
- 向量及其运算
- 支持与着色器uniform变量的交互
- 简易应用上下文
- 着色器管理器
- 纹理管理器
- 几何体(简单模型)管理器
- 基础相机系统
示例
use glfw::*;
use rustcraft::{debug, log::*, utils::Mat4, *};
use utils::{
look_at,
math::{rotate3, tranlate3},
perspective, radian, Vec3,
};
pub fn key_callback(window: &mut Window, key: Key, scancode: i32, action: Action, mods: Modifiers) {
match (key, action) {
(Key::Escape, Action::Press) => {
debug!("Events", "ESC 被按下,程序将退出");
window.set_should_close(true)
}
_ => {}
}
let _ = (window, key, scancode, action, mods);
}
fn render_init() {
debug!("render::init()", "正在载入着色器...");
SHADER_MANAGER.load_from("shader/");
debug!("render::init()", "正在载入纹理...");
TEXTURE_MANAGER.load_from("texture/");
MODEL_MANAGER.load_from_file("model/cube.json");
unsafe {
gl::Enable(gl::DEPTH_TEST);
}
}
fn render_loop() {
unsafe {
gl::ClearColor(0.3, 0.5, 0.4, 1.0);
gl::Clear(gl::COLOR_BUFFER_BIT | gl::DEPTH_BUFFER_BIT);
}
let view = look_at(
Vec3::from([0.0, 0.0, 3.0]),
Vec3::from([0.0, 0.0, 0.0]),
Vec3::from([0.0, 1.0, 0.0]),
);
let (w, h) = App::window_size();
let proj = perspective(radian(45.0), w as f32 / h as f32, 0.1, 100.0);
let shader = SHADER_MANAGER.get("cube").unwrap();
let model: Mat4<f32> = rotate3(radian(App::time() * 100.0), Vec3::from([1.0, 1.0, 0.0]));
let model = tranlate3(Vec3::from([0.0, 0.0, -1.0])) * model;
shader.use_program();
shader.set_uniform("model", model);
shader.set_uniform("view", view);
shader.set_uniform("projection", proj);
TEXTURE_MANAGER.bind("container2", 0);
shader.set_uniform("texture0", 0);
MODEL_MANAGER.draw_model("cube");
}
fn main() {
Log::set_level(Level::Debug);
let mut app = AppBuilder::new(1600, 900, "RustCraft")
.set_render_init_callback(render_init)
.set_render_loop_callback(render_loop)
.set_key_callback(key_callback)
.build();
app.exec();
}
工作过程
主线程 | 渲染线程 | 轮询线程 |
---|---|---|
初始化GLFW | ||
创建窗口 | ||
创建OpenGL上下文 | ||
初始化OpenGL环境 | ||
载入资源 | ||
显示窗口 | 渲染循环 | |
事件循环 | ... | 执行轮询 |
... | ... | ... |
... | ... | ... |
... | ... | ... |
... | 退出窗口 | ... |
退出事件循环 | 退出轮询 | |
退出应用程序 |
Dependencies
~5–13MB
~157K SLoC