游戏引擎从零开始(1)-创建工程

前言

学习图形学有几年的时间了,计划用半年的时间,搭建一个简易的游戏引擎,加深对游戏引擎和图形学的理解,查漏补缺。

参考youtube上的教程 Game Engine series,做了简化,降低工程上的复杂度。

第一篇,创建简单的工程,能显示一行"hello world"

创建工程目录

考虑通用性和简单,开发工具选择CLion或vscode,使用CMake组织项目及编译流程。如果你的开发机是windows,也可以考虑使用visual studio。

按下面目录结构创建两个大文件夹(Sandbox、engine),和代码文件。

  • Sandbox:业务工程,可以理解为一个sample工程
  • engine:引擎工程,引擎的所有代码都放在这里

Sandbox和engine各自有一个CMakeLists.txt文件,组织编译流程。

实现过程

第一篇讲仔细点,假设读者可能连C++都不是太熟悉。

engine里增加Test类

Test.h // 声明一个Print()函数

c++ 复制代码
//
// Created by sumsmile on 2023/9/1.
//

#ifndef HAZEL_TEST_H
#define HAZEL_TEST_H

// follow原教程,引擎的名字叫Hazel(榛树)
// 没有特别的含义,随便取个名字

// 所有引擎的类都放在命名空间"Hazel"下
namespace Hazel {
    // 只有很简单的print函数
    void Print();
}

#endif //HAZEL_TEST_H

说明:用C++开发基础库,一般会声明一个统一的命名空间,包含自己的实现,避免重名冲突。不像Java,用包名来区分,这点不太方便,代码写起来会稍显冗余。

Test.cpp 实现Print()函数,打印一行字符串

c++ 复制代码
//
// Created by sumsile on 2023/9/1.
//

#include "Test.h"
#include <stdio.h>

namespace Hazel {
    void Print()
    {
        printf("Welcome to Hazel Engine World \n");
    }
}

engine/CMakeLists.txt。 这里不会专门讲cmake的语法,用到哪里,就补充说明。

scss 复制代码
// 设置当前编译需要的最低cmake版本,这里随意选择2.8
cmake_minimum_required(VERSION 2.8)
// 工程名设置为"engine"
project(engine)
// 需要参与编译的源码,现在只有一个Test.cpp文件
// 设置变量SRC_LIST,值为src/Test.cpp
set(SRC_LIST src/Test.cpp)
// add_library,产物是一个engine.a的静态库,参与编译的文件是${SRC_LIST}
add_library(engine STATIC ${SRC_LIST})

Sandbox工程增加Application.cpp

Application.cpp放应用的实现,调用我们的引擎API,现在引擎只有一个Print()的API

arduino 复制代码
//
// Created by sumsmile on 2023/9/1.
//
#include "../engine/src/Test.h"
int main()

{
    // 调用Hazel命名空间下的Print()函数,打印一行日志
    Hazel::Print();
    return 0;
}

Sandbox/CMakeLists.txt

scss 复制代码
cmake_minimum_required(VERSION 2.8)
// 应用名为"Sandbox"
project(Sandbox)
// 现在只有一个文件参与编译
set(SRC_LIST src/Application.cpp)
// 增加依赖的子目录-engine工程
add_subdirectory(engine)

// 输出是一个可执行文件,
add_executable(${PROJECT_NAME} ${SRC_LIST})

// 链接需要的engine库
target_link_libraries(${PROJECT_NAME}  engine)

运行完,在命令行能看到日志:

bash 复制代码
/Users/baidu/Documents/study/gameEngine/Hazel/Sandbox/cmake-build-debug/Sanbox
Welcome to Hazel Engine World 

Process finished with exit code 0

完整代码参考创建工程

如果打不开,可能你需要科学上网额~

Done!

第一篇,大概半个小时的时间,搭建了非常简单的只有一个测试类的引擎工程

相关推荐
Uzuki7 天前
自动驾驶 | 为CarLA添加一辆小米SU7 Part I
自动驾驶·游戏开发·图形学
XZen12 天前
Shadertoy转传统技术实现程序化星球纹理
图形学
李斯维20 天前
深度解析 Android Matrix 变换(二):组合变换 pre、post
android·canvas·图形学
李斯维1 个月前
深入理解 Android Canvas 变换:缩放、旋转、平移全解析(一)
android·canvas·图形学
Uzuki1 个月前
Vulkan环境配置 | vscode+msvc 解决方案
vscode·游戏开发·图形学·c/c++
charon87782 个月前
Games202Lecture 6 Real-time Environment Mapping
图形学
白鹭float.3 个月前
【OpenGL/Assimp】渲染模型、半透明材质与封装光源
c++·图形学·opengl·assimp
白鹭float.3 个月前
【OpenGL/C++】面向对象扩展——测试环境
c++·图形学·opengl
三翼鸟数字化技术团队4 个月前
模型工作流:自动化的模型内部三角面剔除
计算机图形学·图形学
ttod_qzstudio4 个月前
Unity中Mesh重叠顶点合并参考及其应用
unity·图形学