当前位置: 首页 > news >正文

跟着cherno手搓游戏引擎【24】开启2D引擎前的项目总结(包括前置知识汇总)

前置技术:

 c++动态链接和静态链接:

隐藏的细节:编译与链接_哔哩哔哩_bilibili

【底层】动态链接库(dll)是如何工作的?_哔哩哔哩_bilibili

预编译,编译,汇编,链接

预编译头文件:

为什么要使用预编译头_vs2019 为什么要预编译-CSDN博客

注意平台选择!

项目中,在Sandbox中使用YOTOEngine的.h文件就需要用预编译头文件来确定路径。

输出目录:

(如果要添加dll文件时,一定要指定输出目录!!!!!!!)

vs下的输出目录/输出文件/工作目录-总结_英文版的vs文件输出路径exe文件在哪-CSDN博客

配置静态库:

使用opengl静态库:

随便找个地方把lib和include给复制到一个文件夹下:

c/c++配置 附加包含目录:

也就是把.h文件包含进项目

 链接器配置附加库目录:

也就是把lib添加进来

添加两个依赖项名称:

配置动态库:

使用opengl动态库:

Visual Studio 2019-编写C++动态链接库_哔哩哔哩_bilibili

把没用的lib都删掉,剩下这个: 

配置输出目录:(一般在运行时找不到dll都是因为dll文件没有放到输出目录下面 )

把glfw3.dll放到输出目录下:

修改链接器的依赖项:

 链接器库目录:指向lib所在文件夹:

附加包含目录:

 预处理:

MSBuild的入门完整教程(包学包会)-CSDN博客

cmake:

软件构建: CMake 快速入门_哔哩哔哩_bilibili

CMake 保姆级教程【C/C++】_哔哩哔哩_bilibili

preake5:

premake5实例教程_premake5教程-CSDN博客

opengl:

OpenGL - LearnOpenGL CN (learnopengl-cn.github.io)

制作一个能渲染3d物体的程序:

OpenGL自身是一个巨大的状态机(State Machine):一系列的变量描述OpenGL此刻应当如何运行。OpenGL的状态通常被称为OpenGL上下文(Context)。我们通常使用如下途径去更改OpenGL状态:设置选项,操作缓冲。最后,我们使用当前OpenGL上下文来渲染。

// 创建对象
unsigned int objectId = 0;
glGenObject(1, &objectId);
// 绑定对象至上下文
glBindObject(GL_WINDOW_TARGET, objectId);
// 设置当前绑定到 GL_WINDOW_TARGET 的对象的一些选项
glSetObjectOption(GL_WINDOW_TARGET, GL_OPTION_WINDOW_WIDTH, 800);
glSetObjectOption(GL_WINDOW_TARGET, GL_OPTION_WINDOW_HEIGHT, 600);
// 将上下文对象设回默认
glBindObject(GL_WINDOW_TARGET, 0);

 这一小段代码展现了你以后使用OpenGL时常见的工作流。我们首先创建一个对象,然后用一个id保存它的引用(实际数据被储存在后台)。然后我们将对象绑定至上下文的目标位置(例子中窗口对象目标的位置被定义成GL_WINDOW_TARGET)。接下来我们设置窗口的选项。最后我们将目标位置的对象id设回0,解绑这个对象。设置的选项将被保存在objectId所引用的对象中,一旦我们重新绑定这个对象到GL_WINDOW_TARGET位置,这些选项就会重新生效。

配置glad:

因为OpenGL只是一个标准/规范,具体的实现是由驱动开发商针对特定显卡实现的。由于OpenGL驱动版本众多,它大多数函数的位置都无法在编译时确定下来,需要在运行时查询。所以任务就落在了开发者身上,开发者需要在运行时获取函数地址并将其保存在一个函数指针中供以后使用。

GLAD现在应该提供给你了一个zip压缩文件,包含两个头文件目录,和一个glad.c文件。将两个头文件目录(gladKHR)复制到你的Include文件夹中(或者增加一个额外的项目指向这些目录),并添加glad.c文件到你的工程中。

把#include<glad>放到glfw之前记好了~

无法解析的外部符号的话,就是.c没加进来

最暴力的方法就是直接把.c拖到项目中。 

先了解一下渲染管线:

我就不详细介绍了,既然来了肯定有所了解

c++语法特色:

根据源码慢慢添加:

该博客会持续更新,目前就是防止丢稿。

未来更新内容为:示例和原理讲解。

http://www.lryc.cn/news/300123.html

相关文章:

  • 石子合并+环形石子合并+能量项链+凸多边形的划分——区间DP
  • IMX6ULL移植U-Boot 2022.04
  • ES实战-高级聚合
  • 网络安全产品之认识蜜罐
  • 推荐《架构探险:从零开始写Java Web框架》
  • Go教程-Go语言简介
  • React + SpringBoot + Minio实现文件的预览
  • 心法利器[107] onnx和tensorRT的bert加速方案记录
  • AcWing 122 糖果传递(贪心)
  • unity的重中之重:组件
  • Linux释放内存
  • Python算法题集_翻转二叉树
  • Git快速掌握,通俗易懂
  • PHP毕业设计图片分享网站76t17
  • 代码随想录 Leetcode45. 跳跃游戏 II
  • 【C语言】socketpair 的系统调用
  • 【论文精读】BERT
  • Codeforces Round 925 (Div. 3) - A、B、C、D、E
  • 快速部署MES源码/万界星空科技开源MES
  • 【Python网络编程之TCP三次握手】
  • 【leetcode】深搜、暴搜、回溯、剪枝(C++)2
  • 鸿蒙开发-UI-图形-图片
  • .NET Core WebAPI中使用Log4net记录日志
  • Nginx配置php留档
  • 英语题不会怎么搜答案?分享五个支持答案和解析的工具 #学习方法#媒体
  • Rust 数据结构与算法:4栈:用栈实现进制转换
  • 树莓派4B(Raspberry Pi 4B)使用docker搭建阿里巴巴sentinel服务
  • Django视图
  • python基本语法
  • app逆向-⽹络请求库rxjava2