【V0.1B9】从零开始的2D游戏引擎开发之路
TEnGinE Version-0.1 Build-9 更新日志
发布日期:2022-05-10 01:16
内部版本号:v0.00.00.11
变更概要
| 类别 | 内容 |
|---|---|
| 深度测试 | OpenGL 深度测试正式启用,支持多层次渲染 |
| 文件重命名 | 着色器文件名简化 (State→无前缀) |
| 新增文件 | Tanxl_StateControl.h(预留头文件) |
| 网格尺寸 | 从固定 0.2f 恢复为动态计算 |
| 地图规格 | 默认地图从 1×1 扩展至 10×10 |
| Z轴分层 | 地图方块 Z=0.2,玩家方块 Z=0.1 |
| 颜色统一 | 地图方块颜色统一为黄色系 |
一、深度测试系统启用(核心功能)
这是 Build-9 最具技术含量的改动——已开启深度测试功能,使引擎正式支持多图层渲染。
1.1 init() 函数新增深度配置
glEnable(GL_DEPTH_TEST); // ← 新增:启用深度测试 glDepthFunc(GL_LEQUAL); // ← 新增:设置深度比较函数 glClearColor(0.0, 0.0, 0.0, 1.0); glClearDepth(1.0f); // ← 新增:初始化深度缓冲区1.2 display() 清屏优化
// Build-9 — 合并为单次调用 if (Clear_Function) glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);// Build-8 — 分开调用 if (Clear_Function) { glClear(GL_DEPTH_BUFFER_BIT); glClearColor(0.0, 0.0, 0.0, 1.0); glClear(GL_COLOR_BUFFER_BIT); }1.3 mainLoop() 每帧清除深度
glClearDepth(1.0f); // ← 新增 glClearColor(0.0f, 0.0f, 0.0f, 0.0f); glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); // ← 合并清除// Build-8 — 仅清除颜色缓冲 glClearColor(0.0f, 0.0f, 0.0f, 0.0f); glClear(GL_COLOR_BUFFER_BIT);二、着色器文件重命名
| 操作 | 旧文件名 | 新文件名 |
|---|---|---|
| 重命名 | StatevertShader.glsl | vertShader.glsl |
| 重命名 | StatefragShader.glsl | fragShader.glsl |
2.1 顶点着色器核心变更
网格尺寸恢复动态计算:
float Height = 2.0f / SHeight; // ← 恢复动态计算 float Width = 2.0f / SWidth; // ← 恢复动态计算 // float Height = 0.2f; //用于单一方块移动测试 调整方块宽高 // float Width = 0.2f;// Build-8 — 固定尺寸 float Height = 0.2f; float Width = 0.2f;地图方块 Z 轴深度调整:
| 项目 | Build-8 | Build-9 |
|---|---|---|
| 地图方块 Z 坐标 | 0.0 | 0.2 |
三、入口文件调整
// Build-9 GameStateBase* GSB = &GameStateBase::GetStateBase(10, 10); // 直接传参 mainLoop(GSB);// Build-8 GameStateBase* GSB = &GameStateBase::GetStateBase(); GSB->SetState(1, 1); // 单独设置 mainLoop(GSB);| 变更项 | Build-8 | Build-9 |
|---|---|---|
| GetStateBase 参数 | 无 | (10, 10) |
| SetState 调用 | SetState(1, 1) | 已移除 |
| 默认地图尺寸 | 1 × 1 | 10 × 10 |
四、新增文件
Tanxl_StateControl.h
这是一个预留的头文件,当前仅包含#pragma once防重复包含指令,为后续状态控制模块预留扩展空间。
五、影响范围总览
| 文件 | Build-8 | Build-9 | 变更类型 |
|---|---|---|---|
vertShader.glsl | - | ✅ 新增 | 从 StatevertShader 重命名 |
fragShader.glsl | - | ✅ 新增 | 从 StatefragShader 重命名 |
Tanxl_StateControl.h | - | ✅ 新增 | 预留头文件 |
main.cpp | GetStateBase()+SetState(1,1) | GetStateBase(10,10) | 入口参数调整 |
Tanxl_OpenGL_Draw.h | 无深度测试 | 完整深度测试支持 | 核心功能升级 |
Tanxl_GameState.h | - | - | 无变化 |
Tanxl_GameState.cpp | - | - | 无变化 |
TANXL_ENGINE.vcxproj | 旧文件引用 | 更新文件引用 | 项目配置同步 |
TANXL_ENGINE.vcxproj.filters | 旧文件引用 | 更新文件引用 | 筛选器配置同步 |
六、技术要点总结
深度测试工作原理
渲染顺序(从后到前): ┌─────────────────────────┐ │ 玩家方块 (Z = 0.1) │ ← 前层,可自由移动 ├─────────────────────────┤ │ 地图方块 (Z = 0.2) │ ← 后层,网格排列 └─────────────────────────┘glEnable(GL_DEPTH_TEST)— 启用 OpenGL 深度测试功能glDepthFunc(GL_LEQUAL)— 允许相同深度值的物体覆盖绘制glClearDepth(1.0f)— 将深度缓冲区重置为最大值(最远)- 每帧
glClear(GL_DEPTH_BUFFER_BIT \| GL_COLOR_BUFFER_BIT)— 同时清除深度和颜色缓冲
Z轴设计思路
| 图层 | Z 值 | 说明 |
|---|---|---|
| 地图背景 | 0.2 | 网格方块组成的底层地图 |
| 玩家/物品 | 0.1 | 可移动物体,显示在地图上方 |
数值越小越靠前(近摄像机),确保玩家方块始终显示在地图方块之上。
Wild_Chicken_Programing///2022-05-10 01:16
