OpenGL游戏引擎
文章平均质量分 79
King.W.
这个作者很懒,什么都没留下…
展开
-
OpenGL游戏引擎开发[10]-多重纹理
简介 有时候我们在游戏,会看到类似这样裸露的土地、沼泽之类的:这是游戏《自然之力》的地图,在草地上会有“粘土”、“黑土”这样裸露的区域,玩家能够在这片区域挖土,不同的材料可以制作不同的道具。那这个是怎么做的呢?最粗暴的办法,就是画一个这样的纹理,贴到地形上还有一种就是使用几种不同的纹理对地形进行混合贴图比如,unity中刷地形的时候,就是使用第二种办法,事先加载好纹理,再使用“刷子”在地形上画对应的纹理贴图。这节我们使用代码来实现这样的效果。原理 原理很简单,就是取不同的纹理贴图的原创 2020-12-27 20:04:08 · 586 阅读 · 0 评论 -
OpenGL游戏引擎开发[9]-雾特效
今天来在场景中添加雾的特效。原理雾的计算公式为:1visibility = e^((distance * density)^gradient)23// 其中 distance 为物体顶点距离相机的位置4// density 可以理解为雾的密度5// gradient 为雾的衰减系数,用来表示相机拉近时,雾褪去的快慢程度因为雾远处看和天空的颜色是混为一体的,因此,一般在场景中使用天空的颜色作为原创 2020-12-11 13:50:57 · 569 阅读 · 0 评论 -
OpenGL游戏引擎开发[8]-巧用贴图透明度通道显示复杂模型
使用透明度渲染物体我们游戏中的模型一般都是在3D建模中做的,比如:人物模型、建筑模型等。这些模型直接关系到游戏的效果,所以,美工人员花费很大精力去雕琢模型也无可厚非。然而,那些环境的装饰的模型,比如:草、杂草、、、 这些模型本来形状就不规则,3D建模比较麻烦,而且只是装饰作用,玩家也不一定把它当回事,所以,没必要画很大精力去雕琢这些模型。但是,你也不能太磕碜吧,你随意搞个太丑的模型,和场景中其他模型放在一起毫无违和感,那这。。。其实,我们可以有个取巧的办法。既能基本满足可视化的需求,对模型的要求也不原创 2020-12-09 23:30:28 · 566 阅读 · 1 评论 -
OpenGL游戏引擎开发[7]-生成南京地形图
获取南京地形高度图数据上节我们自己生成另一个平面地形,这节我们生成一个带有真实地形高度的【南京玄武区】的地形图。如果大家玩过《城市天际线》的画,都知道游戏里面可以导入现实世界真实的地图的。其官网提供了一个工具:http://terrain.party/这是一个使用openlayers地图库制作的一个在线生成真实世界地形高度图的工具,我们在上面找到想要生成高度图的区域,就可以使用右侧的工具栏下载按钮进行下载。下载下来一个压缩包:里面有文件的说明信息,请自行查看。这里我们使用融合过的高度图【na原创 2020-12-06 19:22:20 · 580 阅读 · 0 评论 -
OpenGL游戏引擎开发[6]-生成简单地形
好久没更新了,没办法,要写毕业论文。。。今天来讲一下如何生成简单地形。一般小游戏中的地形是由程序生成的,比如《我的世界》的地形,每次新建一个存档,都会生成一个新的地图。常见的方法就是使用柏林噪声随机函数生成地形高度图,如:这个这是在线使用柏林噪声随机函数生成地形高度图的工具,可以在这上面生成高度图,然后把高度图下载下来,再读取高度图生成地形。本节,我们先写个简单的,先不使用高度图,先自己生成个平面网格,就像这样:其实思路和前面加载STL模型是一样的,只不过,STL模型是从文件读取数据的,原创 2020-12-06 00:37:10 · 1426 阅读 · 0 评论 -
OpenGL游戏引擎开发[5]-自己动手写STL模型加载器
前面我们绘制的物体要么是手动设置的顶点(比如简单的三角形),要么是程序生成的顶点(比如绘制的地球)。还有一种就是加载3D建模软件建好的3D模型。常见的3D模型格式有很多:.OBJ, .STL, .PLY, .fbx, .x 等等。当然加载这些3D模型有成熟的第三方库,如Assimp,我们自己手动写代码解析这些模型的格式是为了熟悉模型加载的流程,为了以后在使用第三方库的时出错了,或者加载的模型和预期的结果不同时,方便排错。本节我们来介绍如何加载STL格式的3D模型。这种格式很简单,只包含顶点数据位置数据以及原创 2020-05-16 13:46:26 · 526 阅读 · 0 评论 -
OpenGL游戏引擎开发[4]-在OpenGL绘制纹理
上一节我们学会了使用OpenGL着色器,但是在片段着色器中,我们使用简单纯色来绘制物体,这一节,我们要在片段着色器中使用采用器对纹理进行采样输出,作为物体表面的颜色,进而绘制带有纹理贴图的物体。纹理纹理简单来说就是一张图片,最常见的就是王者荣耀中英雄的皮肤,当然,这里只说游戏角色的外观,因为不同的皮肤还有不同的特效,甚至有不同的人物动作。不同的游戏人物外观就是换了不同纹理贴图。根据纹理的作用,纹理贴图可以分为:普通纹理(就是着色用的)、法线贴图、切线切图… 顾名思义,普通纹理中存储的就是颜色值,就是我原创 2020-05-14 01:48:46 · 660 阅读 · 0 评论 -
OpenGL游戏引擎开发[3]-OpenGL的着色器GLSL
本节将学习OpenGL的着色器语言GLSL。本节效果主要内容什么是着色器如何在OpenGL中使用Shader如何编写顶点着色器和片段着色器代码实现过程什么是着色器前面说了,3D编程要完成2件事。物体显示在哪?物体显示成什么样?着色器,也叫shader,字面意思就是用来着色的。当然,它也顺便完成了物体的空间变换。换句话说,3D渲染流水线就是在着色器中实现的,当然它要配合OpenGL的相关渲染指令来完成更加高级的操作,比如:帧缓冲区采样、像素缓冲区的应用等。它是一小段类似于C语原创 2020-05-10 11:13:57 · 1318 阅读 · 0 评论 -
OpenGL游戏引擎开发[2]-使用VAO和VBO绘制图形
基本概念本节介绍如何使用VAO和VBO进行图形绘制。关于VAO和VBO的概念,大家可以查阅 LearnOpenGL 等相关教程,我如果介绍的话,篇幅就太长了。而这些常见的OpenGL概念网上资料很多,这里我只简单介绍下我对相关概念的理解,如果各位不了解话,请查阅相关的OpenGL书籍。CPU 与 GPU大家都知道,我们平时写的程序是运行在CPU上的,CPU适合做逻辑运算。图形程序需要大量的...原创 2020-05-06 01:39:43 · 798 阅读 · 0 评论 -
OpenGL游戏引擎开发[1]-环境搭建
前言我的计划是带大家从零开始写一个简单的渲染引擎出来。当然,我不可能每行代码都放在文章中,每节内容我们围绕一个主题,我先讲解原理,再讲解OpenGL实现的关键代码,然而我会把代码给大家,大家自行查阅。一些基本的OpenGL知识,大家可以看 LearnOpenGL 的教程,这个教程是以知识点的形式给大家讲的,我们在这里是将这些知识点串起来实现一些效果,让大家明白这些知识点在实战中是如何运用的。我...原创 2020-04-30 21:43:42 · 1341 阅读 · 0 评论