From 7de250ec797f889cc1d288dcda20e50d76c67c4c Mon Sep 17 00:00:00 2001 From: ternaryop8479 Date: Sun, 15 Feb 2026 22:14:03 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E6=B7=BB=E5=8A=A0README.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 141 ++++++++++++++++++++++++++++++++++++++++++++++++++ README_zh.md | 143 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 284 insertions(+) create mode 100644 README.md create mode 100644 README_zh.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..599393d --- /dev/null +++ b/README.md @@ -0,0 +1,141 @@ +
+ + Aurora Logo + + +

Aurora Rendering Engine

+ +

+ A.R.E. - A High-Performance Path Tracing Library in C++ +
+
+ English | 中文 +

+ +

+ + License + + + Version + + + Issues + +

+
+--- +## 📖 Overview +**Aurora Rendering Engine (A.R.E.)** is a high-performance path tracing library developed in C++ by **NanoEra Studio**. Leveraging OpenGL 4.3 compute shaders for GPU-accelerated path tracing, A.R.E. provides a clean and intuitive API suitable for learning and researching ray tracing techniques. +## ✨ Features +- 🚀 **GPU-Accelerated Path Tracing** - Powered by OpenGL 4.3 Compute Shaders +- 🎨 **PBR Material System** - Diffuse, Metal, Dielectric materials +- 💡 **Multiple Light Types** - Point lights, Area lights, Environmental lighting +- 📦 **Static Library** - Easy integration into existing projects +- 🔧 **CMake Build System** - Cross-platform support +## 🛠️ Dependencies +A.R.E. depends on the following external libraries: +- **OpenGL 4.3** - Graphics API +- **GLFW** - Window and input management +- **GLAD** - OpenGL loader +- **GLM** - Mathematics library +- **stb-image** - Image loading +- **spdlog** - Logging system +## 📦 Quick Start +### Clone Repository +```bash +git clone https://github.com/NanoEraStudio/AuroraRenderingEngine.git +cd AuroraRenderingEngine +``` +### Build Project +```bash +mkdir build && cd build +cmake .. +cmake --build . +``` +## 🎮 Minimal Example: Cornell Box +The following code demonstrates how to render a classic Cornell Box scene using A.R.E.: +```cpp +#include +#include +#include +#include +#include +#include +#include +using namespace are; +int main() { + // 1. Initialize window + glfwInit(); + GLFWwindow* window = glfwCreateWindow(800, 800, "Aurora - Cornell Box", nullptr, nullptr); + glfwMakeContextCurrent(window); + gladLoadGLLoader((GLADloadproc)glfwGetProcAddress); + + // 2. Configure renderer + RendererConfig config; + config.width_ = 800; + config.height_ = 800; + config.samples_per_pixel_ = 1; + config.max_ray_depth_ = 4; + + auto renderer = std::make_unique(config); + renderer->initialize(); + + // 3. Create scene + auto scene = std::make_unique(); + + // Create materials + auto white_mat = std::make_shared(); + white_mat->set_albedo(Vec3(0.73f, 0.73f, 0.73f)); + white_mat->set_type(MaterialType::DIFFUSE); + uint white_id = scene->add_material(white_mat); + + auto red_mat = std::make_shared(); + red_mat->set_albedo(Vec3(0.65f, 0.05f, 0.05f)); + red_mat->set_type(MaterialType::DIFFUSE); + uint red_id = scene->add_material(red_mat); + + // Create floor mesh (example: a simple quad) + auto floor = std::make_shared(); + std::vector vertices = { + {{-2.0f, -2.0f, -2.0f}, {0.0f, 1.0f, 0.0f}, {0.0f, 0.0f}, {1.0f, 0.0f, 0.0f}}, + {{ 2.0f, -2.0f, -2.0f}, {0.0f, 1.0f, 0.0f}, {1.0f, 0.0f}, {1.0f, 0.0f, 0.0f}}, + {{ 2.0f, -2.0f, 2.0f}, {0.0f, 1.0f, 0.0f}, {1.0f, 1.0f}, {1.0f, 0.0f, 0.0f}}, + {{-2.0f, -2.0f, 2.0f}, {0.0f, 1.0f, 0.0f}, {0.0f, 1.0f}, {1.0f, 0.0f, 0.0f}} + }; + std::vector indices = {0, 1, 2, 0, 2, 3}; + floor->set_vertices(vertices); + floor->set_indices(indices); + floor->set_material(white_id); + floor->upload_to_gpu(); + scene->add_mesh(floor); + + // Setup camera + auto camera = std::make_shared(); + camera->set_position(Vec3(0.0f, 0.0f, 4.5f)); + camera->set_target(Vec3(0.0f, 0.0f, 0.0f)); + camera->set_perspective(45.0f, 1.0f, 0.1f, 100.0f); + scene->set_camera(camera); + + // 4. Render loop + while (!glfwWindowShouldClose(window)) { + renderer->render(*scene); + glfwSwapBuffers(window); + glfwPollEvents(); + } + + return 0; +} +``` +## 📚 Documentation +For detailed documentation, visit: [A.R.E. Documentation](https://are.nanoera.top/docs) +## 🤝 Contributing +We welcome all forms of contributions! Please check [CONTRIBUTING.md](CONTRIBUTING.md) for details. +## 📄 License +This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details. +## 🙏 Acknowledgments +Thanks to all the developers and contributors of the dependency libraries. +--- +
+ Built with ❤️ by NanoEra Studio +
diff --git a/README_zh.md b/README_zh.md new file mode 100644 index 0000000..ade461d --- /dev/null +++ b/README_zh.md @@ -0,0 +1,143 @@ +
+ + Aurora Logo + + +

曙光渲染引擎

+ +

+ Aurora Rendering Engine (A.R.E.)
+ 一个基于 C++ 的高性能路径追踪渲染库 +
+
+ English | 中文 +

+ +

+ + License + + + Version + + + Issues + +

+
+--- +## 📖 简介 +曙光渲染引擎(Aurora Rendering Engine,简称 A.R.E.)是一个基于 C++ 开发的路径追踪渲染库,由 **NanoEra Studio** 开发和维护。A.R.E. 利用 OpenGL 4.3 计算着色器实现高效的 GPU 路径追踪,提供了简洁易用的 API,适合学习和研究光线追踪技术。 +## ✨ 特性 +- 🚀 **GPU 加速路径追踪** - 基于 OpenGL 4.3 Compute Shader +- 🎨 **PBR 材质系统** - 支持漫反射、金属、电介质等材质 +- 💡 **多种光源支持** - 点光源、面光源、环境光 +- 📦 **静态链接库** - 轻松集成到现有项目 +- 🔧 **CMake 构建** - 跨平台支持 +## 🛠️ 依赖项 +A.R.E. 依赖以下外部库: +- **OpenGL 4.3** - 图形 API +- **GLFW** - 窗口和输入管理 +- **GLAD** - OpenGL 加载器 +- **GLM** - 数学库 +- **stb-image** - 图像加载 +- **spdlog** - 日志系统 +## 📦 快速开始 +### 克隆仓库 +```bash +git clone https://github.com/NanoEraStudio/AuroraRenderingEngine.git +cd AuroraRenderingEngine +``` +### 编译项目 +```bash +mkdir build && cd build +cmake .. +cmake --build . +``` +## 🎮 极简示例:康奈尔盒子 +以下代码展示了如何使用 A.R.E. 渲染一个经典的康奈尔盒子场景: +```cpp +#include +#include +#include +#include +#include +#include +#include +using namespace are; +int main() { + // 1. 初始化窗口 + glfwInit(); + GLFWwindow* window = glfwCreateWindow(800, 800, "Aurora - Cornell Box", nullptr, nullptr); + glfwMakeContextCurrent(window); + gladLoadGLLoader((GLADloadproc)glfwGetProcAddress); + + // 2. 配置渲染器 + RendererConfig config; + config.width_ = 800; + config.height_ = 800; + config.samples_per_pixel_ = 1; + config.max_ray_depth_ = 4; + + auto renderer = std::make_unique(config); + renderer->initialize(); + + // 3. 创建场景 + auto scene = std::make_unique(); + + // 创建材质 + auto white_mat = std::make_shared(); + white_mat->set_albedo(Vec3(0.73f, 0.73f, 0.73f)); + white_mat->set_type(MaterialType::DIFFUSE); + uint white_id = scene->add_material(white_mat); + + auto red_mat = std::make_shared(); + red_mat->set_albedo(Vec3(0.65f, 0.05f, 0.05f)); + red_mat->set_type(MaterialType::DIFFUSE); + uint red_id = scene->add_material(red_mat); + + // 创建地板 (示例:一个简单的四边形) + auto floor = std::make_shared(); + std::vector vertices = { + {{-2.0f, -2.0f, -2.0f}, {0.0f, 1.0f, 0.0f}, {0.0f, 0.0f}, {1.0f, 0.0f, 0.0f}}, + {{ 2.0f, -2.0f, -2.0f}, {0.0f, 1.0f, 0.0f}, {1.0f, 0.0f}, {1.0f, 0.0f, 0.0f}}, + {{ 2.0f, -2.0f, 2.0f}, {0.0f, 1.0f, 0.0f}, {1.0f, 1.0f}, {1.0f, 0.0f, 0.0f}}, + {{-2.0f, -2.0f, 2.0f}, {0.0f, 1.0f, 0.0f}, {0.0f, 1.0f}, {1.0f, 0.0f, 0.0f}} + }; + std::vector indices = {0, 1, 2, 0, 2, 3}; + floor->set_vertices(vertices); + floor->set_indices(indices); + floor->set_material(white_id); + floor->upload_to_gpu(); + scene->add_mesh(floor); + + // 设置相机 + auto camera = std::make_shared(); + camera->set_position(Vec3(0.0f, 0.0f, 4.5f)); + camera->set_target(Vec3(0.0f, 0.0f, 0.0f)); + camera->set_perspective(45.0f, 1.0f, 0.1f, 100.0f); + scene->set_camera(camera); + + // 4. 渲染循环 + while (!glfwWindowShouldClose(window)) { + renderer->render(*scene); + glfwSwapBuffers(window); + glfwPollEvents(); + } + + return 0; +} +``` +## 📚 文档 +详细文档请访问:[A.R.E. Documentation](https://are.nanoera.top/docs) +## 🤝 贡献指南 +我们欢迎所有形式的贡献!请查看 [CONTRIBUTING.md](CONTRIBUTING.md) 了解详情。 +## 📄 许可证 +本项目基于 MIT 许可证开源,详见 [LICENSE](LICENSE) 文件。 +## 🙏 致谢 +感谢所有依赖库的开发者和贡献者。 +--- +
+ Built with ❤️ by NanoEra Studio +
+