自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

加载中...

----------请检查你的网络设置

原创 OpenGL基础30:模板测试
原力计划

前置:OpenGL基础29:深度测试 一、模板测试 前面一章提到过:深度缓冲是在片段着色器运行、以及模板测试(Stencil Testing)之后,那么这下知道模板测试是在什么时候了吧,模板测试和深度测试逻辑可以说是一致的,它能丢弃一些片段,仍然保留下来的片段将会进入深度测试阶段: glEn...

2020-07-03 18:40:08 49 0

原创 OpenGL基础29:深度测试
原力计划

前置:OpenGL基础11:空间 一、深度测试 在OpenGL基础13:第一个正方体这一章中,就开始用深度测试了 深度缓冲就像颜色缓冲(Color Buffer)(储存所有的片段颜色:视觉输出)一样,在每个片段中储存了信息,并且通常和颜色缓冲有着一样的宽度和高度,深度缓冲是由窗口系统自动创建...

2020-07-03 12:29:10 42 0

原创 OpenGL基础28:模型
原力计划

参考文献:https://learnopengl.com/#!Getting-started/OpenGL 前置:OpenGL基础27:网格 一、模型 有了mesh类之后,接下来就是实现一个model类将各个mesh拼成一个模型 首先是模型的创建:很好理解,就是一次绘制其所有的mesh: ...

2020-06-30 20:05:16 82 0

原创 OpenGL基础27:网格
原力计划

一、网格(Mesh) 从字面上的意思来看就是下面这个东西: 其实差不多,如果你是游戏开放相关的工作者,又或者了解过图形学,应该都听过网格(Mesh)这个词,大概印象是下面这样的: ...

2020-06-23 16:33:24 227 0

原创 OpenGL基础26:Assimp库

一、模型文件 游戏中有很多复杂的模型往往都是美术通过3D建模工具构建出来的,当然不是程序将顶点写死在代码里的,想想看一个简单的人物模型可能就有上千个顶点,这个时候按之前“生成木箱子”的方法肯定就不可行了 从3D模型的设计到最后体现在场景中,整个过程可以分为2个步骤 当使用3D建模工具导出模型...

2020-06-19 17:15:14 844 0

原创 OpenGL基础25:多光源(附简单GLSL配置)
原力计划

到这里,光照基础就已经接近尾声了,当然对于光照渲染的学习,这可能只是百步中的一步,尽管如此,至少是做到了从 0 到 1 的一个过程,就像之前刚学会“HelloWorld”一样,一切伟大的行动和思想,都有一个微不足道的开始 再次声明:直至这一章,主要还是参考于https://learnopeng...

2020-06-16 20:24:51 118 0

原创 OpenGL基础24:聚光灯
原力计划

前置:OpenGL基础23:平行光与点光源 一、聚光灯 三种基础光源在上一章讲了2种,现在只剩下聚光灯了 手电筒就是一个很经典例子,相对于点光源,聚光灯拥有以下特点 依然有衰减,但是聚光灯的光照一般都是非常强的(也就是有着非常远的射程) 有一定的范围,在这个范围外光照极速衰减,距离聚光方...

2020-06-16 11:49:30 101 0

原创 OpenGL基础23:平行光与点光源
原力计划

前面几章主要是针对物体,现在开始针对光源! 一、平行光 在OpenGL基础18:光照基础这一章里面讲了几种常见光源,先看平行光吧 一个很好的例子就是太阳光,因为离我们的距离过远,所以太阳光的特点就是“无限范围”且平行 所有的光线都是平行的,这样的话物体与光源的相对位置是不重要的,在之前的章...

2020-06-15 19:46:22 94 0

原创 OpenGL基础22:贴图

在OpenGL基础13:第一个正方体中给正方体加了箱子的纹理,但是在后面介绍光照的时候又把纹理属性给丢了,现在尝试在有纹理的基础之上增加光照 一、漫反射贴图 先把之前的纹理加回去 顶点着色器和主代码的处理和之前OpenGL基础9:纹理 纹理这一章一样,而对于片段着色器,需要进行稍加修改 在...

2020-06-11 19:45:48 131 0

原创 OpenGL基础21:材质

前置:OpenGL基础20:镜面光照 一、材质 前面环境光、漫反射光照和镜面光照都已经安排上了,但是物体的属性是写死的 在真实的世界里,不同的物体会对光产生不同的反应,例如一颗金属球或一块橡木,它们在完全相同的光照下显示出来的效果必然是不同的,前者以反射(Reflect)为主,后者以散射(S...

2020-06-10 17:35:51 84 0

原创 OpenGL基础20:镜面光照
原力计划

前置:OpenGL基础19:法向量与漫反射 一、镜面光照 前面物体已经拥有了环境光和漫反射光,现在再加上镜面光照就完美了,镜面光照的效果是:当我们去看光被物体所反射的那个方向的时候,会看到一个高光 和镜面反射一样,不过我们希望得到的是下图与的夹角 我们在求漫反射光照时,已经获得了向量和...

2020-06-10 11:49:59 97 0

原创 OpenGL基础19:法向量与漫反射

前置:OpenGL基础18:光照 一、法向量 法向量:垂直于当前点所在面的向量 无论是漫反射光照还是镜面光照,我们都需要知道当前反射点的法向量 单纯的对于一个顶点来讲,它肯定是没有法向量的,所以我们需要考虑这个顶点与其周围的顶点(他们可以构成唯一的一个面,即顶点所在的面),并可以通过叉乘来...

2020-06-09 19:21:45 67 0

原创 OpenGL基础18:光照基础

真实的光照非常的复杂,所以有关光照的算法和论文也有不少,想要模拟出更真实的光照往往需要很强的实力,很牛的算法以及很高的数学/物理水平,与此相关的技术到现在为止也只是在发展中(包括目前比较火的“光线追踪”),当然,肯定要从最简单的入手,尽可能以最低的门槛,最简单的算法先入手,做出个大致的样子来 一...

2020-06-09 09:54:59 68 0

原创 OpenGL基础17:颜色

一、RGB三原色 回想一下初中物理知识: 三原色:自然界中所有的颜色都可以用红、绿、蓝(RGB)这三种颜色频率的不同强度组合而得,白色包含了所有颜色 能看到一个物体的颜色,是这个物体(Reflected)反射的颜色,换句话说,就是不能被当前物体吸收(Absorb)的颜色 之所以能看到五彩斑...

2020-06-05 20:15:42 200 0

原创 OpenGL基础16:视角
原力计划

一、欧拉角 三种欧拉角: 俯仰角(Pitch):沿x轴旋转的角,从上往下看的角 偏航角(Yaw):沿y轴旋转的角,从左往右看的角 滚转角(Roll):沿z轴旋转的角(对于摄像机而言,一般不关心这个) 关于坐标轴: 自身坐标系:物体自身的坐标轴,显然如果物体进行了俯仰、偏航、滚筒的旋转...

2020-06-03 21:07:05 124 0

原创 OpenGL基础15:输入控制
原力计划

接上一章:OpenGL基础14:摄像机 现在来尝试通过输入控制摄像机 一、键盘输入 其实从第一章开始,代码里面一直都有实现键盘输入: void key_callback(GLFWwindow* window, int key, int scancode, int action, int ...

2020-06-02 17:27:59 1347 0

原创 OpenGL基础14:摄像机
原力计划

很可惜,openGL没有摄像机的概念 一、摄像机 我们当然需要想办法模拟出一个摄像机,也就是玩家的视角,在前面这一章:第一个正方体,我们仅将“摄像机”往z轴正方向移动了3个单位,并且正对着(0, 0, 0),但是大部分的情况下,类似于我们处于一个3D场景中,摄像机的视角都是从上斜向下的,这个时...

2020-05-26 15:25:08 754 0

原创 OpenGL基础13:第一个正方体
原力计划

我们已经进入了3D世界了,想办法生成一个最简单的3D图形:正方体吧 一、生成一块箱子 接上一章的代码,其实如果前面12章都完全理解了,应该可以直接写出生成正方体的代码(不就是多5个面嘛) 为了简单化,我们保留纹理,把颜色这一属性也去掉,除此之外顶点缓冲也不用了,直接拉36个顶点出来 代码如...

2020-05-21 19:47:46 266 0

原创 OpenGL基础12:进入3D世界
原力计划

前置:OpenGL基础11:空间 一、坐标系 我们都学过坐标系,根据z轴的方向,一般有两种不同的坐标系表示方法: 其中拇指是x轴正方向,食指是y轴正方向,中指是z轴正方形 OpenGL约定是右手坐标系,而在标准化设备坐标系(NDCSpace)中OpenGL使用的是左手坐标系 还记...

2020-05-21 16:49:03 1540 0

原创 OpenGL基础11:空间
原力计划

一、局部空间 即对象被创建时,所在的空间 例如我们用模型软建(ZBrush、Blender、3DMax等)创建了一条龙的模型,那么它在创建的时候,就处于它的局部空间内,一般来讲,模型的中心即局部空间的中心(0, 0, 0),如果我们这里说龙的眼睛的坐标为(2.2, 1.5, -2),那么也就是...

2020-05-21 11:44:27 285 0

原创 OpenGL基础10:变换
原力计划

必须掌握的前置技能:https://blog.csdn.net/Jaihk662/article/details/103811465(向量与矩阵) 其实也不难,也就是一些线性代数的基本知识,暂时只需要理解到这种程度就好,后面可以再说 一、GLM库 和SOIL一样,GLM也是一个openGL的...

2020-05-15 16:05:00 854 0

原创 OpenGL基础9:纹理
原力计划

其实上一章就是在讲纹理了,不过上一章的目的仅是在想办法生成一张有纹理的矩形 一、纹理坐标与环绕方式 为了能够把纹理映射(Map)到三角形上,我们需要指定三角形的每个顶点各自对应纹理的哪个部分,每个顶点都会关联着一个纹理坐标(Texture Coordinate),用来标明该从纹理图像的哪个部分...

2020-05-13 19:55:47 218 0

原创 OpenGL基础8:SOIL库
原力计划

一、SOIL SOIL是简易OpenGL图像库(Simple OpenGL Image Library)的缩写,它支持大多数流行的图像格式,关于SOIL的介绍应该很多,这里就不说了,我们先装上 OpenGL环境配置(超全整合版)SOIL库可以从这篇文章中的链接中下载到,有个叫做imple Op...

2020-05-11 20:23:53 274 0

原创 OpenGL基础7:彩色三角形

一、彩色三角形 前面顶点属性只用了位置属性,现在可以尝试给顶点加上颜色属性 GLfloat trangleY[] = { -0.5f, -0.5f, 0.0f, 1.0f, 0.0f, 0.0f, -0.5f, 0.5f, 0.0f, 0.0f, 1.0f, 0.0f, ...

2020-05-07 20:01:27 158 0

原创 OpenGL基础6:着色器

如果想要完整的代码,可以用上一章最下面那份代码,然后进行局部替换就OK了 一、着色器结构 一个简单的着色器如下: #version 3.4 //版本号 in type name1 //输入数据 out type name2 //输出数据 uniform type n...

2020-05-07 12:10:43 99 0

原创 OpenGL基础5:第一个正方形
原力计划

绘制一个正方形真的很简单,很显然,两个三角形铺在一起就可以了 一、绘制正方形 其实如果真的完全理解了前面的知识, 那么理论上不需要教程,即可绘制出正方形了,就如上所说,两个三角形只有顶点的位置不同而已…… 那么问题来了,绘制一个正方形,需要多少个顶点呢?按照如上的方法,应该是需要6个,然而很...

2020-04-22 12:05:35 136 0

原创 OpenGL基础4:最基础的单元 —— 三角形
原力计划

在刚学 OpenGL 的时候千万不要沉迷细节,后面你会慢慢懂,又或者说:放弃 前置:OpenGL基础1:最简单的OpenGL例子 一、最简单的着色器 前面讲过,如果我们打算做渲染的话必需要配置顶点和片段着色器,因此这里不得不先提前了解一下着色器 最简单的顶点着色器: #version ...

2020-04-17 17:26:46 145 0

原创 OpenGL基础3:渲染管线

一、渲染与着色器 渲染(render)本质上就是将图形显示在屏幕上的这个过程,最终的目的就是将3D的世界用 2D 的像素点表示出来(UI 为特例),这也是渲染管线(Graphics Pipeline)所负责管理的,图形渲染管线可以被划分为两个主要部分:第一部分把你的3D坐标转换为2D坐标,第二部...

2020-04-16 19:56:12 142 0

原创 OpenGL基础2:OpenGL简介

其实看到这里,你应该也像我一样,装好了环境,并且成功打开了第一个窗口,又或者说已经可以开始绘制一些非常基础的单元了,但是刚入门你应该也一样,对着一堆方法一脸懵逼,看着讲解和教程似乎也能理解,但是脱离教程就会发现自己一行代码都弄不出来,还是需要不断地去参考。 小朋友你是否有很多问号,不知道为什么需...

2020-04-15 21:44:50 120 0

原创 2017 ACM-ICPC乌鲁木齐网络赛 G. Query on a string(KMP+树状数组)

题目链接:https://www.jisuanke.com/contest/870 题意: 给出两个字符串S和T,Q次操作:①C a b表示将第a个字符改为b;②Q l r表示T在S的子串[l, r]中共出现多少次 其中|S| 思路: 若S串的子串[x-|T|+1, x]和T串完美匹配,那...

2020-04-15 16:34:42 783 0

原创 splay伸展树基础操作(bzoj 1861: [Zjoi2006]Book 书架)

splay:一种排序树(先序遍历权值有序) 主要性质:随着访问翻转次数的增多,复杂度越来越接近logn,形态也越来越接近平衡树 主要功能:每次将要询问or删除or修改的点先一路翻转到根,然后再满足所需操作 翻转规则如下: 具体解析看代码 1861: [Zjoi2006]Book 书架 Ti...

2020-04-15 16:33:33 572 0

原创 OpenGL基础1:最简单的OpenGL例子

相对于一些基础的课程,例如一门计算机语言,又或者说是Unity3D之类的游戏引擎,openGL的学习是要难不少,因此在网上“查攻略”的时候尽量想办法 1. 多参考几篇文章;2. 有能力的话去google,去国外的学习网站看看;3. 所有代码自己再写一遍 本文(包括后续的openGL基础类文章)都...

2020-04-15 15:51:16 185 0

原创 OpenGL环境配置(超全整合版)
原力计划

网上搜罗各种资料,终于把openGL的环境配置好了,为了让后面的人省事,于是整合出了一个类似于“懒人包”的东西,非常好弄,按照下面的教程来就好了,什么都不缺 一、事前准备 一块主流显卡(最好是独显) Visual StudioIDE(最好是2017以上版本,本人是2019) 应该都没问题 ...

2020-04-13 21:23:59 231 3

原创 基础线代公式汇总

相关专业大学时都学过线代, 然而等到真正需要用的时候,已经过去好久了导致很多东西都忘了,所以需要专门开一贴记录一下,这里就当是个汇总吧 1):向量点乘与其向量夹角之间的关系: 2):向量b在向量a上的投影(其中为向量ab之间的夹角): 3):向量a和b的叉乘(积): ,其中i, j...

2020-01-02 21:21:55 249 2

原创 LuaForUnity10:框架配置与AssetBundle

一、框架配置文件 ulua的框架配置文件:Scripts/ConstDefine/AppConst.cs 这里面有特别多的公共常量信息(注释也非常全),类似于总控制台,目前只考虑一个比较重要的参数:ExampleMode,一般来讲如果你用当前框架进行开发前,一般都会把里面的NGUI等例子全部删...

2019-11-29 19:23:51 76 0

原创 LuaForUnity9:uLua的一个简单实例

一、LuaScriptMgr和DoString方法 LuaScriptMgr:uLua自带的管理器,对 LuaState 进行了封装,而 LuaState 又是对 Lua 解析器对象的进一步封装,LuaState 是运用的反射方式,而LuaScriptMgr 用的是 Wrap 方式 DoStr...

2019-11-28 11:02:25 85 0

原创 LuaForUnity8:uLua简介

一、ulua简介 ulua:一种支持Unity3D的热更新方案(unity+lua+cstolua) SimpleFramework:一个ulua框架,是一个可以直接使用的项目工程,有对应UGUI和NGUI两个版本 热更新的意义在于,游戏上线后难免会需要即时修复BUG或是更新节日活动,这些都...

2019-08-01 16:00:18 140 0

原创 C#基础18:内置委托类型Action和Func

前文:https://blog.csdn.net/Jaihk662/article/details/97130647(匿名方法与Lambda表达式) 一、Action泛型委托 Action 为 System 内置的无返回值委托,只需要引用 System 库就可以直接使用而不用定义,有以下几种形...

2019-07-24 16:10:15 182 0

原创 C#基础17:匿名方法与Lambda表达式

前文:https://blog.csdn.net/Jaihk662/article/details/96895681(委托) 一、匿名方法 匿名方法:字面理解,没有名字(名字省略)的方法。在开发过程中,有些方法非常简单因此就根本没有必要专门定义成一个方法,从此就出现了匿名方法 根据前文第二个...

2019-07-24 14:33:36 182 0

原创 C#基础16:事件与观察者模式

前文:https://blog.csdn.net/Jaihk662/article/details/96895681(委托) 一、事件与委托 其实事件就是委托的一种升级版,和委托的不同如下: 在原有的委托变量的基础上多一个 event 关键字,这个委托变量就称为事件; 在其它类中,事件只能...

2019-07-23 15:57:24 153 0

提示
确定要删除当前文章?
取消 删除