- 博客(139)
- 资源 (24)
- 收藏
- 关注
原创 场景系统简介
目录什么是场景系统?为什么要有场景系统?如何设计场景系统?什么是场景系统?游戏场景通常可以理解为,根据要求还原出游戏中的建筑物、树木、天空、道路、NPC等可用元素,是搭载游戏世界观的主体。为什么要有场景系统?统一管理,便于跨部门交流,跨部门演示等数据转换自动化,专注于构建场景本身与项目解耦合性能优化更集中,覆盖更广泛所以,游戏引擎一定得拥有一个场景系统。如何设计场景系统?先来想一下,真实世界中的一个场景都包含些什么:地面、不同纹路的砂石、不同形状的花草、昼夜变换、天空、海洋、…场景
2022-03-31 20:44:44
3887
原创 特效系统简介
目录什么是特效系统?为什么要有特效系统?如何设计特效系统?什么是特效系统?为了体现出场景中的某些特殊效果,通常会增加一些在现实中不常见的表现。这些表现包括但不限于:技能特效,场景光影特效,UI表现特效,暴雨沙尘等等,此处省略若干张炫酷的截图…为什么要有特效系统?可以说特效是游戏中最常见的效果之一,而且通常可以用更小的代价营造出更好的氛围。例如,强化反馈(UI新手引导特效),增强视觉表现(技能表现),特殊效果表现(boss不同阶段的形态与颜色,植被燃烧消失,景深效果)……对于当前市面上的大部分应用
2022-03-31 20:31:10
897
原创 游戏引擎简介
目录什么是游戏引擎游戏引擎模块划分常见的游戏引擎碎碎念什么是游戏引擎游戏引擎是由多个子系统共同构成的复杂系统,它几乎涵盖了游戏开发过程中的所有重要环节。以上来自百度百科,听起来很牛,上次听到这么牛的描述还是上次…游戏引擎简言之是游戏开发过程的凝练,没有游戏引擎,硬撸代码也可以做一个游戏,但是性价比太低,所以把游戏引擎当做是一个辅助游戏开发的工具,事情就简单了。既然是辅助工具,为什么说它重要,因为可以简化流程,批量优化游戏效果和运行效率,甚至是自动化量产游戏,好的游戏引擎架构就好比一个优秀的工业流水
2022-03-31 19:54:30
5641
原创 速查之变量前缀
目录碎碎念sz碎碎念关于缩写,我只在小学生和程序员群体中见到过,有一些变量前缀的缩写看似约定俗成,但是偶尔见到还是奇奇怪怪,这里做个汇总,遇到了就加进来,方便速查~szstring terminated with a zero,表示以零结尾的字符串...
2022-03-31 19:14:41
450
原创 图形学常见概念与算法-常用初等数学公式
目录乘法公式与因式分解比例 (ab\frac{a}{b}ba = cd\frac{c}{d}dc)二次方程 ax^2^ + bx + c = 0对数数列排列组合与二项式定理平面三角乘法公式与因式分解(a ± b)2 = a2 ± 2ab + b2(a + b + c)2 = a2 + b2 + c2 + 2ab + 2ac + 2bca2 - b2 = (a - b)(a + b)(a ± b)3 = a3 ± 3a2b + 3ab2 ± b3a3 ± b3 = (a ±
2022-02-04 21:55:50
506
原创 图形学常见概念与算法-AABB碰撞判定
目录二维场景中的AABB碰撞检测三维场景中的AABB碰撞检测原理二维场景中的AABB碰撞检测只需要验证物体A与B是否满足下列条件(满足一个就不重合):A的Y轴方向最小值大于B的Y轴方向最大值A的X轴方向最小值大于B的X轴方向最大值B的Y轴方向最小值大于A的Y轴方向最大值B的X轴方向最小值大于A的X轴方向最大值三维场景中的AABB碰撞检测原理原理同二维场景,只是增加了一个Z轴,6个条件满足一个就不重合。...
2022-02-03 16:25:06
971
原创 图形学常见概念与算法-选中判定
目录描述分析描述点击屏幕,如何判断选中了哪个物体分析点击屏幕可以得到一个像素点,根据渲染的深度范围(-1, 1),通过像素坐标转换为世界坐标,可以得到两个世界坐标点,即可得到射线检测的原点和方向向量,然后计算碰撞即可。...
2022-02-03 15:56:13
3291
原创 图形学常见概念与算法-冯氏光照模型
目录冯氏光照模型三要素冯氏光照模型三要素环境(Ambient):模拟环境光漫反射(Diffuse):模拟光源对物体的方向性影响镜面(Specular):模拟有光泽物体上出现的亮点
2022-02-03 15:54:12
1852
原创 图形学常见概念与算法-拾取模式
目录OpenGL拾取模式(Picking)OpenGL拾取模式(Picking)鼠标的交互操作,如用鼠标点选画面中的物体,称之为拾取(Picking)。OpenGL中的拾取是对OpenGL图形管线的一个应用,不是像D3D中采用射线交叉测试来判断是否选中一个目标,而是在图形管线的投影变换阶段利用拾取矩阵来实现的:glRenderMode(GL_SELECT);OpenGL的图像管线简言之如下:->模型变换Model->观察变换View->投影变换Projection-&g
2022-01-31 19:21:13
593
原创 图形学常见概念与算法-纹理生成
目录OpenGL中生成纹理代码实现OpenGL中生成纹理代码实现unsigned int texture;glGenTextures(1, &texture); // 第一个参数为生成纹理的数量glBindTexture(GL_TEXTURE_2D, texture); // 绑定纹理,让之后的任何纹理指令都可以配置当前绑定的纹理glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE
2022-01-31 19:16:28
2895
原创 图形学常见概念与算法-纹理环绕
目录纹理环绕的作用OpenGL中如何设置纹理环绕的作用纹理坐标通常范围在(0, 0)到(1, 1),但也可以设置在范围之外,这时就要设置环绕方式(texture wrapping)了,默认是重复,可以设置xy轴,叫做st轴,如果是3D纹理还有个r轴,就是z轴。OpenGL中如何设置glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);第一个参数:指定了纹理目标;第二个参数:指定了设置的选项,这里为WRAP选项,及设置的纹理轴S
2022-01-31 19:12:56
824
原创 图形学常见概念与算法-纹理过滤
目录什么是纹理过滤OpenGL中如何设置什么是纹理过滤缩小或放大纹理时,一个像素会被放到几个像素的位置,或者几个像素放到一个位置,怎样去融合就是texture filtering,即纹理像素(texel)影射到纹理坐标的方式。OpenGL中如何设置glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);第一个参数:指定纹理目标,2D纹理GL_TEXTURE_2D,立方体贴图GL_TEXTURE_CUBE_MAP;第二个
2022-01-31 19:07:35
1356
原创 常用系统dll及下载网站
常用系统dll,类似这些(需要可以点击这里免费下载~):mfc140.dllmfc140d.dllmsvcp100.dllmsvcp140.dllmsvcp140d.dllmsvcr100.dllucrtbased.dllvcruntime140.dll下载网站如下:https://www.ijinshan.com/filerepair/dll.shtml缺啥下啥,基本都能找到~...
2021-09-29 18:39:52
2929
1
原创 程序的编译和链接
目录源文件到可执行文件的过程编译(Compile)链接(Link)源文件到可执行文件的过程编译(Compile)编译需要源文件语法正确,函数与变量的声明正确…编译器能够识别代码中的词汇、句子以及各种特定的格式,并将他们转换成计算机能够识别的二进制形式,这个过程称为编译(Compile)。链接(Link)链接(Link)其实就是一个“打包”的过程,它将所有二进制形式的目标文件和系统组件组合成一个可执行文件。完成链接的过程需要链接器(Linker)。...
2021-09-27 00:09:09
112
原创 makefile和cmake
目录作用优点cmake作用makefile关系到了整个工程的编译规则。一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。优点makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。cmakem
2021-09-26 23:36:32
332
原创 C++实现方针顺时针旋转
目录题目描述输入描述输出描述示例:实现思路代码实现题目描述输入一个N阶方阵(0<N<10),输出此方阵顺时针旋转M(0<=M<=10000)次后的方阵旋转举例:如下四个三阶方阵从左到右为数字围绕中心顺时针旋转1 2 34 5 67 8 97 4 18 5 29 6 39 8 76 5 43 2 13 6 92 5 81 4 7输入描述第一行输入一个正整数N(0<N<10)接下来的N行,每行N个整数,用空格分开,为方阵的数据最后一行输入
2021-09-12 23:15:05
2370
原创 渲染后效---高斯模糊
目录概念原理高斯函数高斯采样概念在许多图像处理软件上,都会有模糊滤镜blur,使图片产生模糊的效果,有许多可以实现图像模糊的算法,其中比较常见的一种就是高斯模糊(Gaussian Blur),是将高斯分布(正态分布)应用于图像处理的一种技术,本质上就是数据的平滑处理,比直接求平均值多了一步加权处理。原理正态分布的曲线,越接近中心,取值越大,越远离中心,取值越小。计算平均值时,只需要将中心点作为原点,其他点按照其在正态曲线上的位置,分配权重,就可以得到一个加权平均值。高斯函数高斯函数的一维形式如下
2021-08-31 22:57:29
320
原创 渲染后效---glitch
描述glitch通常是指电脑或硬件设备出现故障,比如老式电视的雪花效果,又比如摔坏了的屏幕上脉冲电流闪烁的效果,这种破碎带有缺陷的效果,可以营造出破败、恐怖、或者未来感。效果参考codepen上的glitch效果...
2021-08-31 22:30:01
156
原创 glsl内置函数汇总
pow(x, y):x的y次方sqrt(x):对x开根号inversesqrt(x):x根号的倒数exp(x):以e为底数,x为指数exp2(x):2的x次方sin(x):x的正弦值cos(x):x的余弦值tan(x):x的正切值abs(x):x的绝对值clamp(x, min, max):取x位于min和max之间的值,超出取边界floor(x):x向下取整ceil(x):x向上取整fract(x):x取小数部分...
2021-08-31 22:11:17
2571
原创 VS2019无法解析的外部符号wglGetProcAddress
解决方法项目属性->配置属性->链接器->输入,附加依赖项增加Opengl32.lib即可。说明opengl32.lib包含在Microsoft SDK里,在Visual Studio安装时就已经默认安装了,所以只需要将opengl32.lib添加进链接器的附加依赖项就可以了。碎碎念编译时遇到这类无法解析或无法打开的报错,基本都在项目属性的附加依赖项、附加库目录、附加包含目录里加一下就好了,缺啥加啥。...
2021-08-31 21:57:03
1112
原创 OpenGL学习笔记(四十七)
目录辐射度的 HDR 文件格式辐射度的 HDR 文件格式谈及辐射度的文件格式,辐射度文件的格式(扩展名为 .hdr)存储了一张完整的立方体贴图,所有六个面数据都是浮点数,允许指定 0.0 到 1.0 范围之外的颜色值,以使光线具有正确的颜色强度。这个文件格式使用了一个聪明的技巧来存储每个浮点值:它并非直接存储每个通道的 32 位数据,而是每个通道存储 8 位,再以 alpha 通道存放指数——虽然确实会导致精度损失,但是非常有效率,不过需要解析程序将每种颜色重新转换为它们的浮点数等效值。下面是一个示例
2021-07-31 17:09:37
457
原创 OpenGL学习笔记(四十六)
目录PBR 和 HDRPBR 和 HDR在 PBR 渲染管线中考虑高动态范围(High Dynamic Range, HDR)的场景光照非常重要。由于 PBR 的大部分输入基于实际物理属性和测量,因此为入射光值找到其物理等效值是很重要的。无论我们是对光线的辐射通量进行研究性猜测,还是使用它们的直接物理等效值,诸如一个简单灯泡和太阳之间的这种差异都是很重要的,如果不在 HDR 渲染环境中工作,就无法正确指定每个光的相对强度。因此,PBR 和 HDR 需要密切合作,但这些与基于图像的光照有什么关系?我们在
2021-07-31 17:08:26
176
原创 OpenGL学习笔记(四十五)
目录漫反射辐照度漫反射辐照度基于图像的光照(Image based lighting, IBL)是一类光照技术的集合。其光源不是如前一节教程中描述的可分解的直接光源,而是将周围环境整体视为一个大光源。IBL 通常使用(取自现实世界或从3D场景生成的)环境立方体贴图 (Cubemap) ,我们可以将立方体贴图的每个像素视为光源,在渲染方程中直接使用它。这种方式可以有效地捕捉环境的全局光照和氛围,使物体更好地融入其环境。由于基于图像的光照算法会捕捉部分甚至全部的环境光照,通常认为它是一种更精确的环境光照输
2021-07-31 17:07:28
75
原创 OpenGL学习笔记(四十四)
目录PBR材质PBR材质PBR渲染管线所需要的每一个表面参数都可以用纹理来定义或者建模。使用纹理可以让我们逐个片段的来控制每个表面上特定的点对于光线是如何响应的:不论那个点是金属的,粗糙或者平滑,也不论表面对于不同波长的光会有如何的反应。PBR渲染管线当中经常会碰到的纹理列表,还有将它们输入PBR渲染器所能得到的相应的视觉输出:上边的几种纹理代表了不同的物理含义,组合起来就组成了更逼真的效果。反照率:反照率(Albedo)纹理为每一个金属的纹素(Texel)(纹理像素)指定表面颜色或者基础反射率
2021-07-31 17:03:14
180
原创 OpenGL学习笔记(四十三)
目录BRDFBRDF判断一种PBR光照模型是否是基于物理的,必须满足的条件之三就是BRDF。什么是BRDF呢?BRDF,或者说双向反射分布函数,它接受入射(光)方向ωi,出射(观察)方向ωo,平面法线n以及一个用来表示微平面粗糙程度的参数a作为函数的输入参数。BRDF可以近似的求出每束光线对一个给定了材质属性的平面上最终反射出来的光线所作出的贡献程度。举例来说,如果一个平面拥有完全光滑的表面(比如镜面),那么对于所有的入射光线ωi(除了一束以外)而言BRDF函数都会返回0.0 ,只有一束与出射光线ωo
2021-06-29 00:21:37
207
原创 OpenGL学习笔记(四十二)
目录能量守恒能量守恒接下来说一说,判断一种PBR光照模型是否是基于物理的,必须满足的条件之二,就是能量守恒。微平面近似法使用了这样一种形式的能量守恒(Energy Conservation):出射光线的能量永远不能超过入射光线的能量(发光面除外)。随着粗糙度的上升镜面反射区域的会增加,但是镜面反射的亮度却会下降。如果不管反射轮廓的大小而让每个像素的镜面反射强度(Specular Intensity)都一样的话,那么粗糙的平面就会放射出过多的能量,而这样就违背了能量守恒定律。这也就是为什么光滑平面的镜面
2021-06-29 00:16:53
80
原创 OpenGL学习笔记(四十一)
目录微平面模型微平面模型上一节说到,判断一种PBR光照模型是否是基于物理的,必须满足的条件之一就是基于微平面(Microfacet)的表面模型,所有的PBR技术都基于微平面理论。这项理论认为,达到微观尺度之后任何平面都可以用被称为微平面(Microfacets)的细小镜面来进行描绘。根据平面粗糙程度的不同,这些细小镜面的取向排列可以相当不一致,产生的效果就是:一个平面越是粗糙,这个平面上的微平面的排列就越混乱。这些微小镜面这样无序取向排列的影响就是,当我们特指镜面光/镜面反射时,入射光线更趋向于向完全不
2021-06-29 00:11:06
118
原创 OpenGL学习笔记(四十)
目录PBR简介PBR简介PBR是指基于物理的渲染(Physically Based Rendering),它指的是一些在不同程度上都基于与现实世界的物理原理更相符的基本理论所构成的渲染技术的集合。正因为基于物理的渲染目的便是为了使用一种更符合物理学规律的方式来模拟光线,因此这种渲染方式与Phong或者Blinn-Phong光照算法相比总体上看起来要更真实一些。除了看起来更好些以外,由于它与物理性质非常接近,因此我们可以直接以物理参数为依据来编写表面材质,而不必依靠粗劣的修改与调整来让光照效果看上去正常
2021-06-29 00:04:43
75
原创 OpenGL学习笔记(三十九)
目录结合延迟渲染与正向渲染结合延迟渲染与正向渲染现在我们想要渲染每一个光源为一个3D立方体,并放置在光源的位置上随着延迟渲染器一起发出光源的颜色。很明显,我们需要做的第一件事就是在延迟渲染方形之上正向渲染所有的光源,它会在延迟渲染管线的最后进行。所以我们只需要像正常情况下渲染立方体,只是会在我们完成延迟渲染操作之后进行。...
2021-05-30 18:15:25
85
原创 OpenGL学习笔记(三十八)
目录G缓冲G缓冲G缓冲(G-buffer)是对所有用来储存光照相关的数据,并在最后的光照处理阶段中使用的所有纹理的总称。趁此机会,让我们顺便复习一下在正向渲染中照亮一个片段所需要的所有数据:一个3D位置向量来计算(插值)片段位置变量供lightDir和viewDir使用一个RGB漫反射颜色向量,也就是反照率(Albedo)一个3D法向量来判断平面的斜率一个镜面强度(Specular Intensity)浮点值所有光源的位置和颜色向量玩家或者观察者的位置向量...
2021-05-30 18:14:14
85
原创 OpenGL学习笔记(三十七)
目录几何处理与光照处理几何处理与光照处理延迟着色法基于我们延迟(Defer)或推迟(Postpone)大部分计算量非常大的渲染(像是光照)到后期进行处理的想法。它包含两个处理阶段(Pass):在第一个几何处理阶段(Geometry Pass)中,我们先渲染场景一次,之后获取对象的各种几何信息,并储存在一系列叫做G缓冲(G-buffer)的纹理中;想想位置向量(Position Vector)、颜色向量(Color Vector)、法向量(Normal Vector)和/或镜面值(Specular Val
2021-05-30 18:13:16
122
原创 OpenGL学习笔记(三十六)
目录延迟着色法延迟着色法正向渲染(Forward Rendering)或者正向着色法(Forward Shading),它是我们渲染物体的一种非常直接的方式,在场景中我们根据所有光源照亮一个物体,之后再渲染下一个物体,以此类推。它非常容易理解,也很容易实现,但是同时它对程序性能的影响也很大,因为对于每一个需要渲染的物体,程序都要对每一个光源每一个需要渲染的片段进行迭代,这是非常多的!因为大部分片段着色器的输出都会被之后的输出覆盖,正向渲染还会在场景中因为高深的复杂度(多个物体重合在一个像素上)浪费大量的
2021-05-30 18:11:05
68
原创 OpenGL学习笔记(三十五)
目录能量守恒能量守恒微平面近似法使用了这样一种形式的能量守恒(Energy Conservation):出射光线的能量永远不能超过入射光线的能量(发光面除外)。如图示我们可以看到,随着粗糙度的上升镜面反射区域的会增加,但是镜面反射的亮度却会下降。如果不管反射轮廓的大小而让每个像素的镜面反射强度(Specular Intensity)都一样的话,那么粗糙的平面就会放射出过多的能量,而这样就违背了能量守恒定律。这也就是为什么正如我们看到的一样,光滑平面的镜面反射更强烈而粗糙平面的反射更昏暗。为了遵守能量守
2021-04-30 13:28:52
91
1
原创 OpenGL学习笔记(三十四)
目录微平面模型微平面模型所有的PBR技术都基于微平面理论。这项理论认为,达到微观尺度之后任何平面都可以用被称为微平面(Microfacets)的细小镜面来进行描绘。根据平面粗糙程度的不同,这些细小镜面的取向排列可以相当不一致。产生的效果就是:一个平面越是粗糙,这个平面上的微平面的排列就越混乱。这些微小镜面这样无序取向排列的影响就是,当我们特指镜面光/镜面反射时,入射光线更趋向于向完全不同的方向发散(Scatter)开来,进而产生出分布范围更广泛的镜面反射。而与之相反的是,对于一个光滑的平面,光线大体上
2021-04-30 13:28:12
69
原创 OpenGL学习笔记(三十三)
目录PBRPBRPBR,或者用更通俗一些的称呼是指基于物理的渲染(Physically Based Rendering),它指的是一些在不同程度上都基于与现实世界的物理原理更相符的基本理论所构成的渲染技术的集合。正因为基于物理的渲染目的便是为了使用一种更符合物理学规律的方式来模拟光线,因此这种渲染方式与我们原来的Phong或者Blinn-Phong光照算法相比总体上看起来要更真实一些。除了看起来更好些以外,由于它与物理性质非常接近,因此我们(尤其是美术师们)可以直接以物理参数为依据来编写表面材质,而不必
2021-04-30 13:27:12
93
原创 C++强制类型转换
目录C语言的强制类型转换C++的强制类型转换static_castdynamic_castconst_castreinterpret_castC语言的强制类型转换一般形式(类型说明符)(表达式)功能把表达式的运算结果强制转换成类型说明符所表示的类型。例如(int)(x+y)把x+y的结果转换为整型。自动转换自动转换是在源类型和目标类型兼容以及目标类型广于源类型时发生一个类型到另一类的转换。注意表达式要用括号括起来,否则就只转换最近的单个变量,如(int)x+y就只把x转换成int型
2021-04-24 11:52:56
320
原创 OpenGL学习笔记(三十二)
目录模板缓冲的应用-物体轮廓模板缓冲的应用-物体轮廓物体轮廓所能做的事情正如它名字所描述的那样。我们将会为每个(或者一个)物体在它的周围创建一个很小的有色边框。当你想要在策略游戏中选中一个单位进行操作的,想要告诉玩家选中的是哪个单位的时候,这个效果就非常有用了。为物体创建轮廓的步骤如下:在绘制(需要添加轮廓的)物体之前,将模板函数设置为GL_ALWAYS,每当物体的片段被渲染时,将模板缓冲更新为1。渲染物体。禁用模板写入以及深度测试。将每个物体缩放一点点。使用一个不同的片段着色器,输出一个单
2021-03-30 22:16:33
109
原创 OpenGL学习笔记(三十一)
目录模板测试相关gl命令模板测试相关gl命令glEnable(GL_STENCIL_TEST);glStencilMask(0xFF); // 每一位写入模板缓冲时都保持原样glStencilMask(0x00); // 每一位在写入模板缓冲时都会变成0(禁用写入)glStencilFunc(GL_EQUAL, 1, 0xFF)...
2021-03-30 22:14:38
86
原创 OpenGL学习笔记(三十)
目录模板缓冲写入模板缓冲写入模板缓冲操作允许我们在渲染片段时将模板缓冲设定为一个特定的值。通过在渲染时修改模板缓冲的内容,我们写入了模板缓冲。在同一个(或者接下来的)渲染迭代中,我们可以读取这些值,来决定丢弃还是保留某个片段。使用模板缓冲的时候你可以尽情发挥,但大体的步骤如下:启用模板缓冲的写入。渲染物体,更新模板缓冲的内容。禁用模板缓冲的写入。渲染(其它)物体,这次根据模板缓冲的内容丢弃特定的片段。...
2021-03-30 22:12:53
79
原创 OpenGL学习笔记(二十九)
目录模板测试模板测试当片段着色器处理完一个片段之后,模板测试(Stencil Test)会开始执行,和深度测试一样,它也可能会丢弃片段。接下来,被保留的片段会进入深度测试,它可能会丢弃更多的片段。模板测试是根据又一个缓冲来进行的,它叫做模板缓冲(Stencil Buffer)。...
2021-03-30 22:11:08
71
Qt plugin+QGraphicsView
2017-09-06
文件读写操作demo
2017-08-08
QT+VS点击按钮弹出新窗口的实现
2017-07-28
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人