2d游戏引擎_如何用500行代码写一个游戏引擎/渲染器(一)

fabf8a45ea1e4c6be1c098c291f1e83d.png

对于游戏开发者初学者而言,游戏引擎是个巨大无比的黑盒。

初学阶段拖拖拽拽加一点代码就能简单运行一个小游戏。

但是如果不清楚游戏引擎的核心原理,对于一些稍微深一点操作有时候又会无从下手。

所以明白游戏引擎或者说渲染引擎的基本原理非常重要。

但是即使是从OpenGL学起,学习曲线也是十分陡峭。因为涉及到多个知识点的储备,比如线性代数,矩阵计算,PBR(基于物理的渲染)

所以现在从头开始写一个非常非常简单的游戏引擎。或者说叫渲染器。完全模拟整个游戏引擎/渲染器的整个原理,也不用OpenGL等高级的API,也不需要性能优化,目的是展现原理,期望把一些概念用最简单的语言说出来。

本系列文章的目的是让对游戏引擎感兴趣的可以照葫芦画瓢写一个最简单的游戏引擎。

即使不是程序员,我也期望能用最简单的语言,让高中生也能了解,到底什么是游戏引擎?它是怎么工作的。

什么是游戏引擎

通过构建一个3D或者2D的场景,将场景里面的物体渲染成2D的图像信息,并展现出来。这是我理解的对游戏引擎最简单直观的理解。

我常常将游戏引擎比作照相的原理是一模一样,现实世界中众多三维物体,相机按下快门后,得出一张图片。

而游戏引擎的工作,是运用数学方法是中将这些三维物体用数学方法去表示,通过计算还原成了一张二维的图形数据(称为帧Frame)。如果这些不停的生成数据帧像电影一样播放,展示在屏幕前,就形成了游戏引擎。

这些二维图片每秒播放的次数就是我们常说的FPS(Frame Per Second)了。

也就是说游戏引擎就是帮我将三维的数据转换成二维图形。(有朋友说不是还有魂斗罗这样的二维游戏吗?其实二维的数据也可以看成三维数据的固定视角下的表现,所以这里统称三维图形)

以unity 自带的卡丁车游戏为例子。

场景中布置了非常的多的三维模型,比如树木车子。

950440f8e0d5460585219668bf4758db.png

当运行时,将实时计算的三维数据最终转换成二维的图形信息

f79721213856ab4e392337be1410c8ef.png

什么是渲染管线?

而将这些三维数据,通过数学计算转换成二维图形的过程,我们可以称为渲染管线(Render pipeline). 初学者第一次接触管线这个名词就非常陌生,且奇怪。其实可以形象的理解为这个渲染的过程是类似于水流或者流水线,或者一道菜,每个步骤都是非常固定且统一的,最终的成功就是我们要的二维的图像。

来看下图,比如这是一个简单的渲染管线的示意图

我们的目的是渲染最终的一个三角形,最开始时我们只有表示这个三角形的三个点。

每个点称为顶点(Vertex)。

我们这里先不太展开什么是着色器(Shader),可以简单的理解为渲染管线提供了可供修改数据的小程序。

OK。管线开始一个一个介绍

  1. 开始我们有一堆顶点数据
  2. 交由给顶点着色器(可以顶点数据做一些处理)
  3. 三个点组成三角形(图元)
  4. 交由给几何着色器(可以图元数据做一些处理)
  5. 几何图片里面的像素全部填满(这一步称为光栅化
  6. 给他一点颜色(片段着色器(fragment shader),fragment就是一粒粒的意思,可以引申为细化的意思)
  7. 做一些混合和剔除(比如透明的多个物体叠在一起)
  8. 完成

c3ae53d5bf6a40f5d748b59cb51de1d4.png

哎。不对,不是三维图形转换成二维图形并呈现出来吗?并没有体现三维转化成二维图形的这个过程啊?

其实三维图形的数据(顶点)一般在会在顶点着色器中计算成为二维的点。或者在传给管线之前已经是从三维转化成二维的数据了。这里面都是可以的。

但是接下来的文章,为了简单化,刚开始我并不打算模拟一个渲染管线。

我们直接模拟如何将一个三维的数据还原成一张二维的图形。还原这样一个最最简单的游戏引擎。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C 2D 游戏引擎是一种用于开发二维游戏的软件工具,它提供了一系列的功能和工具,以帮助游戏开发者创建、设计和实现2D游戏。这种引擎通常包括图形渲染、物理模拟、音频管理、碰撞检测等核心功能,以及提供脚本语言、动画编辑器、场景编辑器等辅助工具。 C 2D 游戏引擎具有很多优点。首先,它提供了开发者所需的基础功能,轻松实现游戏中的动画效果、粒子效果、地图编辑、角色控制等。其次,C 2D 游戏引擎通常使用简单易懂的API,使得开发者可以更加便捷地进编程工作,从而加快开发进度。此外,这种引擎通常具有较高的兼容性和跨平台性,可以在不同的操作系统和设备上运。 当然,C 2D 游戏引擎也有一些限制。首先,由于是2D游戏引擎,它的功能相对较为有限。相较于3D游戏引擎,C 2D 游戏引擎无法实现逼真的三维场景和效果。其次,由于C语言本身的限制,C 2D 游戏引擎在可视化设计方面可能略显欠缺,开发者需要用代码实现许多细节。此外,C 2D 游戏引擎对开发者的编程能力要求相对较高,需要具备良好的基础知识和经验。 总的来说,C 2D 游戏引擎是一种用于开发二维游戏的强大工具,提供了丰富的功能和工具,帮助开发者实现各种2D游戏效果。虽然它的功能和可视化设计相对有限,但在跨平台兼容性和编程效率方面具有一定优势。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值