【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() 函数新增深度配置

cpp 复制代码
glEnable(GL_DEPTH_TEST);       // ← 新增:启用深度测试
glDepthFunc(GL_LEQUAL);         // ← 新增:设置深度比较函数

glClearColor(0.0, 0.0, 0.0, 1.0);
glClearDepth(1.0f);             // ← 新增:初始化深度缓冲区

1.2 display() 清屏优化

cpp 复制代码
// Build-9 --- 合并为单次调用
if (Clear_Function)
    glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
cpp 复制代码
// 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() 每帧清除深度

cpp 复制代码
glClearDepth(1.0f);                              // ← 新增
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);  // ← 合并清除
cpp 复制代码
// 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 顶点着色器核心变更

网格尺寸恢复动态计算:

cpp 复制代码
float Height = 2.0f / SHeight;   // ← 恢复动态计算
float Width  = 2.0f / SWidth;    // ← 恢复动态计算

// float Height = 0.2f;  //用于单一方块移动测试 调整方块宽高
// float Width  = 0.2f;
cpp 复制代码
// Build-8 --- 固定尺寸
float Height = 0.2f;
float Width  = 0.2f;

地图方块 Z 轴深度调整:

项目 Build-8 Build-9
地图方块 Z 坐标 0.0 0.2

三、入口文件调整

cpp 复制代码
// Build-9
GameStateBase* GSB = &GameStateBase::GetStateBase(10, 10);  // 直接传参
mainLoop(GSB);
cpp 复制代码
// 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 旧文件引用 更新文件引用 筛选器配置同步

六、技术要点总结

深度测试工作原理

cpp 复制代码
渲染顺序(从后到前):
┌─────────────────────────┐
│  玩家方块 (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

相关推荐
吃着火锅x唱着歌1 分钟前
Effective C++ 学习笔记 条款45 运用成员函数模板接受所有兼容类型
c++·笔记·学习
爱和冰阔落13 分钟前
【Linux】多线程打印为什么会乱?pthread 创建、等待、退出、取消与分离全实战
linux·运维·c++·redis
luj_176816 分钟前
尾椎藏今生记忆?骨盆对应不确定性
开发语言·网络·c++·经验分享·算法
断点之下27 分钟前
C++类和对象:六个默认成员函数详解
开发语言·c++
库玛西2 小时前
深入浅出传输层:UDP 与 TCP 协议全景指南
linux·服务器·网络·c++·笔记·tcp/ip·udp
Chester_19998 小时前
CSP202203C.计算资源调度器
开发语言·数据结构·c++·蓝桥杯
会周易的程序员10 小时前
给 PLC 写一个字节码虚拟机:STVM 虚拟机架构设计
开发语言·c++·虚拟机·软plc·iec61131·stvm
小灰灰搞电子10 小时前
完全驾驭 Qt 与数据库:C++ ORM 框架 QxOrm 原理与实践指南
数据库·c++·qt
QT界面美化性能优化10 小时前
QT+AI:使用AI技术为QT应用程序赋能
c++·人工智能·qt·opencv·qt教程·qt6.3
学习星球13 小时前
单调栈——从“找下一个更大的“到柱状图中的最大矩形
数据库·c++·算法·leetcode·xcode