Overload游戏引擎细节分析
文章平均质量分 90
Overload是开源非商业游戏引擎,代码比较简单,适合图形开发初学者。本专栏分析其实现细节,不会宏观介绍其代码,重点介绍渲染模块原理。每篇文章着眼于一个细节知识点,尽量做到看完就会使用。读者需有一定的OpenGL知识。
loveoobaby
专注工业CAD/CAE软件开发
展开
-
【Overload游戏引擎细节分析】PBR材质Shader---完结篇
Overload也提供了这种材料,借助贴图可以实现非常真实的材质效果。下面这个例子的贴图来自LearnOpenGL,大家可以自己去下载。这个PBR Shader整体上与LearnOpenGL中的理论一致,看完LearnOpenGL之后再看这个Shader就比较简单了。PBR基于物理的渲染可以实现更加真实的效果,其Shader值得分析一下。但PBR需要较多的基础知识,不适合不会OpenGL的朋友。顶点着色器基本与standard材质一致,这里就不再分析了,具体可看。二、PBR Shader分析。原创 2023-10-27 14:05:07 · 1976 阅读 · 2 评论 -
【Overload游戏引擎细节分析】standard材质Shader
Blinn-Phong光照模型,又称为Blinn-phong反射模型(Blinn–Phong reflection model)或者 phong 修正模型(modified Phong reflection model),是由 Jim Blinn于 1977 年在文章中对传统 phong 光照模型基础上进行修改提出的。它是一个经验模型,并不完全符合真实世界中的光照现象,但由于实现起来简单方便,并且计算速度和得到的效果都还不错,因此在早期被广泛的使用。Shader是实现材质的核心,下面分析其代码。原创 2023-10-25 18:28:26 · 1446 阅读 · 1 评论 -
【Overload游戏引擎细节分析】Lambert材质Shader分析
Lambert是非常简单的漫反射模型,Shader代码很好理解。原创 2023-10-21 23:41:46 · 1738 阅读 · 0 评论 -
【Overload游戏引擎细节分析】鼠标键盘控制摄像机原理
Overload的摄像机控制实现在类CameraController中,其有三个个方法HandleCameraPanning、HandleCameraFPSMouse、HandleCameraOrbit、HandleCameraZoom是鼠标控制摄像机的平移、绕自身转动、绕特定点转动、缩放。OvMaths::FVector3::Forward是固定矢量(0,0,1),其与m_cameraRotation相乘获取当前摄像机的Z轴,也叫Forward量,或可称为摄像机的指向。这个函数实现摄像机绕自身原点转动。原创 2023-10-20 11:00:37 · 6349 阅读 · 3 评论 -
【Overload游戏引擎细节分析】视图投影矩阵计算与摄像机
本文只罗列公式,不做具体的推导。OpenGL本身没有摄像机(Camera)的概念,但我们为了产品上的需求与编程上的方便,一般会抽象一个摄像机组件。摄像机类似于人眼,可以建立一个本地坐标系。相机的位置是坐标原点,摄像机的朝向Forward是摄像机看的方向,再给定向上的Up轴即可建立本地坐标系。然后,可以通过矩阵将世界坐标系的物体变换到摄像机坐标系中,这个矩阵称为视图矩阵。通过改变摄像机的本地坐标系,可以产生场景漫游的效果。原创 2023-10-16 11:16:41 · 1671 阅读 · 1 评论 -
【Overload游戏引擎细节分析】UBO与SSBO的封装
这里使用到了glUniformBlockBinding函数,这个函数主要是显示指定BUO的索引,可以保证多个不同的Shader程序之间UBO的索引是一样的,但需要在调用glLinkProgram之前调用。由于uniform变量的位置是着色器链接时候产生的,因此它在应用程序中获得的索引会有变化。但在Overload引擎中,调用这个方法是在调用glProgram之后调用的,而且索引值使用的是GetBlockLocation获取的,这也是UBO在Shader的默认索引值,所以这个方法应该是可以删除的。原创 2023-10-05 18:44:04 · 1259 阅读 · 0 评论 -
【Overload游戏引擎细节分析】编辑器对象鼠标拾取原理
先获取以下鼠标位置。先绑定FrameBuffer,使用glReadPixels读取像素,注意图片格式是RGB,跟初始化FrameBuffer进行的设置一致,这些细节都得注意,玄机很多。其实帧缓存的设置都是固定格式的代码,套路基本一样,先用伪代码串一下。Overload使用的是渲染id到纹理,其实现需借助OpenGL的帧缓冲FrameBuffer,所以要先了解一下OpenGL的帧缓冲。Overload中鼠标拾取是先将物体的id渲染到纹理中,根据鼠标位置读取这张图上的对应的像素值,之后解码获取对象的id。原创 2023-10-07 10:29:44 · 1548 阅读 · 0 评论 -
【Overload游戏引擎细节分析】从视图投影矩阵提取视锥体及overload对视锥体的封装
overoad代码中包含一段有意思的代码,可以从视图投影矩阵逆推出摄像机的视锥体,本文来分析一下原理。原创 2023-10-08 17:44:03 · 1576 阅读 · 0 评论 -
【Overload游戏引擎细节分析】画场景栅格的Shader分析
从中看出,先将面片平移到视点的前方,使得三角形始终在视锥体范围内,同时将三角形进行缩放,总的尺寸缩放到10000。然后使用m_gridMaterial材质进行绘制。所谓的材质就是Shader的封装。最后再绘制坐标轴的三条线。Overload Editor启动之后,场景视图中有栅格线,这个在很多软件中都有。刚开始我猜测它应该是通过绘制线实现的。阅读代码发现,这个栅格的几何网格只有两个三角形面片组成的正方形,使用特使Shader绘制出来的。原创 2023-10-04 22:48:58 · 1843 阅读 · 1 评论 -
【Overload游戏引擎细节分析】四元数公式到代码
威廉·汉密尔顿于1843年发明了四元数,作为一种允许对向量进行乘法和除法、旋转和拉伸的方法。四元数是有四个数,由一个标量和一个向量组成的复数。原创 2023-10-11 18:06:15 · 180 阅读 · 0 评论