自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 问答 (1)
  • 收藏
  • 关注

原创 教程 28 - 图像/纹理描述符与属性

*** @brief 任何设置为此值的ID都应被视为无效,* 不指向真实对象。/*** @brief 任何设置为此值的ID都应被视为无效,* 不指向真实对象。恭喜你完成了本教程!这是Kohi渲染系统中最复杂的部分之一。我们实现了完整的纹理绑定pipeline,从顶点属性到着色器采样。虽然代码量很大,但这个系统为后续的材质系统、纹理流式加载等高级功能提供了坚实的基础。关键要点回顾多级描述符设计实现了性能优化和关注点分离Generation跟踪避免不必要的描述符更新。

2025-12-10 21:08:59 591

原创 教程 27 - 图像与纹理

在深入代码之前,让我们先了解纹理系统的整体架构:fill:#333;color:#333;color:#333;fill:none;GPU端CPU端VkImageVkSampler暂存缓冲区像素数据着色器采样首先,我们需要定义通用的纹理结构体。恭喜你完成了本教程!✅ 通用纹理结构体设计✅ Vulkan图像创建✅ 图像布局转换✅ 数据从CPU到GPU的传输✅ 采样器配置纹理系统是任何现代游戏引擎的核心组件。虽然这只是基础部分,但它为后续的纹理采样、材质系统等功能奠定了基础。

2025-12-10 21:07:47 437

原创 教程 26 - 相机控制系统

在前面的教程中,我们实现了 MVP 变换,但相机一直是静止的。现在我们要让相机动起来!graph LRA[⌨️ 键盘输入] --> B[🎮 输入处理]B --> C[📐 更新状态]C --> D[🔢 计算View矩阵]D --> E[🖥️ 渲染场景]核心任务✅ 定义相机状态(位置、欧拉角)✅ 处理键盘输入(WASD、方向键)✅ 计算 View 矩阵✅ 传递给渲染器在。

2025-12-08 20:31:20 755

原创 教程 25 - Push Constants 与 Model 矩阵

在教程 24 中,我们实现了全局 UBO 来传递 projection 和 view 矩阵。但我们还缺少Model 矩阵- 它控制每个物体的位置、旋转和缩放。graph LRA[🎮 对象数据] --> B[Push Constants]B --> C[顶点着色器]D[📊 全局UBO] --> CC --> E[MVP变换]E --> F[🖥️ 屏幕]核心任务✅ 理解 Push Constants 的概念和优势✅ 在管线布局中配置 Push Constants✅ 在着色器中使用。

2025-12-08 20:29:41 540

原创 教程 24 - Uniform Buffer Objects 与描述符系统

/ 当前的顶点着色器 - 硬编码坐标// ❌ 无法移动、旋转、缩放!问题❌ 无法移动相机❌ 无法旋转物体❌ 无法实现透视投影❌ 所有坐标都是硬编码的解决方案// 使用UBO的顶点着色器mat4 view;// ✅ 可以变换!是一块GPU内存,用于存储着色器中的uniform变量。│ Uniform 变量的特点 ││ ✓ 所有顶点/片段共享相同的值 ││ ✓ 在一次绘制调用中保持不变 ││ ✓ 可以在下次绘制前更新 ││ ✓ 高效传递少量数据 │示例对比。

2025-12-07 20:09:39 1014

原创 教程 23 - 绘制到屏幕

我们将绘制一个四边形(由两个三角形组成),并根据顶点位置生成渐变色。│ ╲ ││ ╲ │ ← 两个三角形│ ╲ │三角形1: V0, V1, V2三角形2: V0, V3, V1颜色映射顶点位置从-1.0到1.0片段着色器将其映射到颜色0.0到1.0结果:彩色渐变效果!在// 在 vulkan_renderer_backend_initialize() 末尾,create_buffers() 之后// TODO: 临时测试代码(稍后会移到资源系统)// 定义4个顶点(四边形的四个角)

2025-12-07 20:08:35 740

原创 教程 22 - Vulkan 缓冲区系统

缓冲区(Buffer)是GPU内存中的一块线性存储区域,用于存储各种类型的数据。│ GPU内存布局 ││ ││ │ 顶点缓冲区 │ ← 顶点位置、法线、UV等 ││ ││ │ 索引缓冲区 │ ← 三角形索引 ││ ││ │ Uniform缓冲区 │ ← 变换矩阵、材质参数 ││ ││ │ 暂存缓冲区 │ ← 临时数据传输 ││ │在/*** @brief Vulkan缓冲区封装* 包含缓冲区对象和其绑定的内存/// 缓冲区总大小(字节) u64 total_size;

2025-12-05 19:58:18 960

原创 教程 21 - Vulkan 图形管线

图形管线(Graphics Pipeline)是GPU渲染的核心,它定义了顶点数据如何变成屏幕上的像素。│ Vulkan 图形管线完整流程 ││ ││ [顶点数据] ││ ↓ ││ │ 1. 顶点输入 (VB/IB) │ ← 固定功能 ││ ↓ ││ │ 2. 顶点着色器 │ ← 可编程 🎨 ││ ↓ ││ │ 3. 曲面细分 (可选) │ ← 可编程 ││ ↓ ││ │ 4. 几何着色器 (可选) │ ← 可编程 ││ ↓ ││ │ 5. 光栅化 │ ← 固定功能 ││ ↓ │。

2025-12-05 19:52:29 780

原创 教程 20 - 文件系统与着色器模块

上一篇:教程 19 - 资源管道设置 | 下一篇:待定 | 返回目录通过本教程,你将学会:在本教程中,我们将实现两个关键系统:着色器模块的重要性在Vulkan中,着色器必须以SPIR-V字节码形式提供。我们需要:实现步骤概览:文件系统抽象文件操作API读写功能着色器加载GLSL源码SPIR-V编译Vulkan着色器模块图形管线集成🗂️ 第一部分:文件系统抽象核心概念什么是文件系统抽象?文件系统抽象层是一个统一的接口,隐藏了不同操作系统的文件操作差异。文件句柄设计步骤 1:创建文件句柄结

2025-12-04 20:03:47 997

原创 教程 19 - 资源管道设置

在前面的教程中,我们完成了数学库的实现。现在,在继续深入渲染系统之前,我们需要建立资源管道,为后续的着色器、纹理、模型等资源做好准备。本教程将实现资源目录结构assets/- 源资源文件(GLSL 着色器等)- 编译后的资源(SPIR-V 着色器等)着色器编译流程编译顶点着色器 (.vert.glsl → .vert.spv)编译片段着色器 (.frag.glsl → .frag.spv)错误检查和报告构建后脚本(Windows)(Linux)编译着色器并复制所有资源开发环境集成。

2025-12-04 20:01:40 1001

原创 教程 18 - 矩阵与四元数数学库完成

在教程 17 中,我们实现了向量数学库 (Vec2/Vec3/Vec4)。矩阵和四元数。本教程将实现Mat4 (4x4 矩阵)矩阵基础运算 (乘法、转置、求逆)变换矩阵 (平移、缩放、旋转)投影矩阵 (正交、透视)视图矩阵 (相机 look_at)Quaternion (四元数)四元数基础运算 (归一化、共轭、求逆)四元数乘法四元数转矩阵四元数插值 (SLERP)这些数学工具是所有 3D 图形应用的基础,从简单的物体移动到复杂的骨骼动画,都离不开矩阵和四元数。齐次坐标是关键!

2025-12-03 20:26:26 539

原创 教程 17 - 构建系统重构与数学库基础

在前面的教程中,我们完成了 Vulkan 渲染循环的基础实现。现在,在继续深入图形渲染之前,我们需要回过头来完善两个重要的基础设施构建系统重构- 引擎库构建- 引擎库构建(Windows)- 测试床构建- 测试床构建(Windows)数学库第一部分数学常量 (π, √2, 角度转换等)基础数学函数 (sin, cos, sqrt, abs, random 等)向量类型定义 (vec2, vec3, vec4, quat)向量运算函数 (加减乘除、点积、叉积、归一化等)

2025-12-03 20:23:26 948

原创 教程 16 - Vulkan 渲染循环与窗口调整

✅ Renderpass (定义渲染操作)✅ Command Buffer (记录 GPU 命令)✅ Framebuffer (渲染目标)✅ Fence 和 Semaphore (同步对象)现在,我们要将这些组件整合到一个完整的渲染循环等待上一帧完成- 使用 Fence 确保 GPU 完成了上一帧获取交换链图像- 从交换链获取下一个可用图像记录渲染命令- 在 Command Buffer 中记录清屏等命令提交到 GPU- 将 Command Buffer 提交到图形队列呈现到屏幕。

2025-12-02 20:49:32 825

原创 教程 15 - Vulkan 帧缓冲和同步对象

在教程 14中,我们创建了命令缓冲。现在我们要创建Framebuffers(帧缓冲)和同步对象graph LRF --> H[⏰ CPU-GPU 同步]G --> I[🎮 GPU 内部同步]H --> J[✅ 渲染完成]I --> J核心任务✅ 创建 Framebuffer(连接 Renderpass 和图像)✅ 创建 Fence(CPU-GPU 同步)✅ 创建 Semaphore(GPU 内部同步)✅ 实现 In-Flight Frames 机制✅ 集成到渲染循环。

2025-12-01 20:41:47 961

原创 教程 14 - Vulkan 命令缓冲(Command Buffers)

在教程 13中,我们创建了 Renderpass。现在我们要创建Command Buffers(命令缓冲)graph LRB --> E[🎨 记录渲染命令]C --> ED --> EE --> F[📤 提交到队列]F --> G[🎮 GPU 执行]核心任务✅ 创建 Command Pool(命令池)✅ 分配 Command Buffers(命令缓冲)✅ 实现命令记录的开始/结束✅ 实现状态管理和验证✅ 支持单次使用命令缓冲Command Buffer(命令缓冲)

2025-11-30 16:28:00 894

原创 教程 13 - Vulkan 渲染通道(Renderpass)

在教程 12中,我们创建了逻辑设备和交换链,拥有了渲染目标。现在我们要创建Vulkan Renderpass(渲染通道)graph LRA[📋 Renderpass] --> B[🌈 颜色附件]A --> C[🔍 深度附件]A --> E[🔄 依赖关系]B --> F[🎨 渲染输出]C --> FD --> FE --> FF --> G[🖼️ 最终图像]核心任务✅ 定义 Renderpass 数据结构✅ 配置颜色和深度附件✅ 创建 Subpass 描述。

2025-11-29 19:33:46 902

原创 教程 12 - Vulkan 逻辑设备和交换链

在上一篇教程中,我们成功创建了 Vulkan 表面并选择了合适的物理设备。从选定的物理设备创建逻辑设备获取设备队列句柄理解交换链(Swapchain)的概念和作用创建和配置 Vulkan 交换链管理交换链图像和深度附件实现交换链的重建机制// 物理设备// 逻辑设备// 交换链支持信息// 队列族索引// 队列句柄// 设备属性// 深度格式// 图像句柄// 图像内存// 图像视图u32 width;// 宽度u32 height;

2025-11-29 19:29:11 912

原创 教程 11 - Vulkan 表面和物理设备

在前一章中,我们创建了 Vulkan 实例并配置了扩展和验证层。创建表面(Surface)- 连接 Vulkan 和窗口系统选择物理设备(Physical Device)- 找到合适的 GPU查询队列家族(Queue Families)- 确定设备支持的操作类型检查交换链支持- 验证设备能否渲染到窗口本章将完成这些关键步骤,为后续的渲染管线搭建基础。本章内容🖼️ Vulkan 表面系统🎮 物理设备枚举和选择📋 队列家族查询🔄 交换链支持检测💾 设备属性和内存信息学习重点。

2025-11-28 19:59:45 449

原创 教程 10 - Vulkan 扩展、验证层和调试器

扩展(Extensions)- 提供额外功能(如窗口表面、调试工具)验证层(Validation Layers)- 检测 API 使用错误,在开发期间必不可少❌ 将渲染内容显示到窗口(需要表面扩展)❌ 发现 API 调用错误(需要验证层)❌ 调试渲染问题(需要调试扩展)本章内容🔌 Vulkan 扩展系统原理🛡️ 验证层配置和使用🐛 调试回调实现🖥️ 平台特定扩展获取⚙️ 错误检查宏学习重点理解 Vulkan 的扩展机制掌握验证层的配置方法实现调试消息回调。

2025-11-27 19:00:57 320

原创 教程 09 - 时钟和渲染器脚手架

在游戏引擎中,时间管理和渲染系统是两个最核心的组件。时间管理负责精确控制游戏逻辑的更新频率,而渲染系统负责将游戏世界呈现到屏幕上。时钟系统(Clock System)- 用于计算帧间隔时间(delta time)和性能测量渲染器架构(Renderer Architecture)- 采用分层设计,支持多种图形 APIVulkan 后端初始化- 作为具体渲染后端的实现示例学习重点如何设计高精度的时钟系统如何使用分层架构隔离渲染 API如何在 C 语言中实现"接口"和"多态"

2025-11-27 18:59:22 841

原创 教程 08 - 输入子系统

🎯 学习目标✅ 理解输入子系统的设计思想✅ 掌握键盘和鼠标输入处理✅ 学会实现当前帧与前一帧状态对比✅ 理解输入系统与事件系统的集成✅ 掌握输入状态查询的最佳实践📊 本章信息🔢 教程编号:08🎯 难度等级:🟡 中级⏱️ 预计时间:90 分钟💻 编程语言:C 语言8cd41bb📄 按键枚举(点击展开/折叠)} buttons;

2025-11-25 18:27:56 557

原创 教程 07 - 事件系统与动态数组

📡 构建灵活的事件通信机制与动态数据结构学习如何实现发布-订阅模式的事件系统,以及设计泛型动态数组容器🏠 返回目录 | ⬅️ 上一章:内存子系统 | ➡️ 下一章:输入子系统📊 本章信息在没有事件系统的情况下,系统之间需要直接调用:问题:解决方案:事件系统(发布-订阅模式)优势:🎯 为什么需要动态数组问题:静态数组的限制问题:优势:动态数组内存布局事件流程#mermaid-svg-GTGBLvsnXNp7wMrZ {font-family:"trebuchet ms",v

2025-11-24 20:20:00 546

原创 教程 06 - 内存子系统

✅ 自定义内存管理的重要性✅ 内存标签(Memory Tag)系统✅ 内存分配追踪机制✅ 内存统计和报告✅ 内存泄漏检测方法✅ 平台内存 API 的封装║ 🎯 内存子系统的核心优势 ║║ 1️⃣ 分类追踪(Memory Tagging) ║║ • 标记内存属于哪个子系统(纹理、模型、游戏等) ║║ • 统计各子系统的内存使用情况 ║║ • 快速定位内存泄漏源头 ║║ ║║ 2️⃣ 自动清零(Auto Zeroing) ║║ • 所有新分配的内存自动清零 ║。

2025-11-23 16:45:53 1023

原创 教程 05 - 应用层与游戏循环

✅ 应用层的职责与设计 ✅ 游戏循环的实现原理 ✅ 控制反转(IoC)模式 ✅ 游戏接口的定义 ✅ 入口点的统一设计 ✅ 引擎与游戏的分离这是整个架构的核心接口定义。📄 game_types.h 完整源码🔧 技术技能✅ 设计应用层架构 ✅ 实现游戏循环 ✅ 定义游戏接口 ✅ 使用控制反转模式 ✅ 管理应用生命周期 ✅ 理解 Delta Time 的重要性💡 核心概念✅ 控制反转(IoC) ✅ 策略模式 ✅ 模板方法模式 ✅ 接口契约 ✅ Opaque Pointer ✅ 游戏循环模式🎯 关键要点。

2025-11-21 18:57:58 816

原创 教程 04 - 平台抽象层设计

在本章中,我们将创建 Kohi 引擎的平台抽象层(Platform Abstraction Layer, PAL),这是跨平台引擎的基石。🎮 引擎核心📋 平台抽象层 API🪟 Windows 实现🐧 Linux 实现🍎 macOS 实现未来扩展Win32 APIX11 + XCBCocoa核心任务✅ 定义统一的平台接口 (platform.h✅ 实现 Windows 平台层 (✅ 实现 Linux 平台层 (✅ 集成彩色日志输出✅ 创建测试窗口🔧 技术技能。

2025-11-21 18:53:05 904

原创 教程 03 - 日志系统实现

通过本教程,你将学会:在本章中,我们将实现 Kohi 引擎的核心日志系统,这是所有后续功能的基础设施。核心功能:🔥 为什么要分级?级别使用场景示例生产环境🔴 FATAL致命错误,程序即将崩溃✅ 始终记录🟠 ERROR错误,但程序可继续运行✅ 始终记录🟡 WARN警告,可能的问题✅ 通常记录🔵 INFO重要信息✅ 可选记录🟣 DEBUG调试信息❌ 禁用(性能)⚪ TRACE详细追踪❌ 禁用(性能)💡 条

2025-11-20 18:55:50 758

原创 教程 02 - Linux 开发环境配置

在教程 01中,我们配置了 Windows 开发环境。现在我们要为Linux 平台graph LRA[🐧 Linux 环境] --> B[📦 安装工具]B --> C[🔨 Clang 编译器]B --> E[📚 系统库]C --> F[⚙️ 构建脚本]D --> FE --> FF --> G[🎮 运行程序]核心任务✅ 安装 Clang 编译器和开发工具✅ 配置 Vulkan SDK 环境变量✅ 安装 X11、XCB 等窗口系统库✅ 创建 Bash 构建脚本。

2025-11-19 21:19:11 1269

原创 教程 01 - Windows 环境初始配置

项目初始配置是指为一个软件项目建立基础开发环境的过程。graph LRA[🛠️ 开发工具配置] --> B[📦 构建系统]B --> C[📁 项目结构]C --> D[💻 基础代码]配置项说明作用🛠️开发工具配置设置代码编辑器(VS Code)的工作环境提供代码补全、调试等功能📦构建系统创建编译脚本来自动化构建流程一键编译,提高开发效率📁项目结构划分引擎代码和测试代码的目录结构代码组织清晰,易于维护💻基础代码编写最小可运行的代码来验证环境确保环境配置正确🎯 目标。

2025-11-19 14:01:17 851

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除