随笔分类 - 计算机图形学
1
摘要:本篇博客说一下学习延迟渲染中遇到的问题。 学习延迟渲染的过程中主要给了我疑惑的是深度测试的问题,在Learn OpenGL的相关代码中,我并没有看到G-buffer有根据片段深度对片段进行消隐或者显示。这是我一直疑惑的地方。如果在fragment shader中不经过深度测试就将片段输出至G-buf
阅读全文
摘要:一周没写博客了(感觉每天都在划水),OpenGL还差Deferred Shading和SSAO,以及PBR的内容没学,计划到下个月十号左右初步学完,然后进入实践环节(元旦前结束),至于图形学后面怎么学还没有正式确定(大概方向是进一步熟悉OpenGL,然后写个光栅化渲染器之类的,如果还有时间的话还能尝
阅读全文
摘要:首先,我们要知道视差贴图Parallax Mapping的作用,为什么要引入它。 对于一张原本2D的图片,我们通过使用法线贴图,使其表面表现出了一定的凹凸感,细节感。但是还是可能会出现一些问题,法线贴图只能通过明暗来表现凹凸,同时它忽视了现实中的一些效果。比如说遮挡的效果,只应用了法线贴图的纹理无法
阅读全文
摘要:本篇blog主要是写一下藏在Gamma校正技术背后的原理,我尽可能地去阐述为什么会有Gamma校正这个东西,以及为什么一般的Gamma值是2.2。 前置知识:首先我们要知道,人类对于颜色的敏感度并非是线性的,对于暗色的辨识能力要比亮色的辨识能力强一些(这是进化的结果,辨识更多的暗色有助于发现隐藏在黑
阅读全文
摘要:学习立方体贴图(skybox)的时候,在优化那里,有这么一段话: 一开始我还有些纳闷,想着透视除法不是通过透视矩阵自动操作的嘛,还有z分量怎么就是深度值了?不是应该通过上次深度测试所给的函数才对吗? 带着这些疑问,我重新查阅了一些资料,也看了透视矩阵的推导过程。 实际上,我以前的想法有些许错误,在顶
阅读全文
摘要:将颜色缓冲,深度缓冲,模板缓冲结合起来,就叫做帧缓冲(存储在内存中)。 具体创建方法以及用法这里不讲,LearnOpenGL对应章节有:帧缓冲。 这里说一下容易让人误解(或者难以理解)的地方。 实际上我们平时做的一些操作都是在默认帧缓冲中的渲染缓冲(Renderbuffer)中进行的,这里默认的帧缓
阅读全文
摘要:面剔除和深度测试之间的区别。一般面剔除是应用于一些闭合物体(比方说立方体),由于视角的缘故,我们最多能同时看到一个物体的三个面,其他三个看不到,那么此时,我们就可以将另外三个看不到的面剔除掉。这就是面剔除,它节省了很多系统开销。深度测试的话不仅用于单个物体(的两个相对面),也用于物体于物体之间。面剔
阅读全文
摘要:。。这个blog标题有点长 =_= 学习混合的时候,偶然发现了深度测试存在的一些问题(也可以说是特性)。经过google之后明白了问题所在,对深度测试也有了进一步的了解。 如上所示,在进行混合的时候,发现有一些本该因为透明度混合出现的窗却没有出现,进一步观察又会发现,有的透明度混合窗口却照常出现。
阅读全文
摘要:模板测试(stencil test)应该说是对于深度测试的另外一种补充,锦上添花类型的。可以拿来实现一些效果:比方说RTS游戏中选中人物的时候,人物外围有一层光圈(表明被选中)。 和深度测试一样,模板测试有模板缓冲(stencil buffer),由GLFW自动创建(别的库的话当然要看文档,看有没有
阅读全文
摘要:上一节的Mesh类主要的目标是将加载进来的模型相关数据做处理,然后绘制出来。那么在Mesh类之前,我们还需要一个Model类去加载这些模型,将其转化为数据并对另外的一些数据做一些处理。 话不多说,直接上code: Draw函数没什么好讲的啦,遍历所有的网格(处理过的),并且调用网格各自的Draw函数
阅读全文
摘要:OpenGL 学习到模型加载的时候,介绍了一个模型导入库(Open Asset Import Library,Assimp)的用法。初学的时候觉得稍微有些复杂,故借由这篇blog来简单地捋一下其中的细节。 首先,当我们使用Assimp导入模型的时候,它通常会将整个模型加载到一个场景(Scene)对象
阅读全文
摘要:生活中我们所看到的物体所呈现出来的颜色,其实是它反射光源造成的,我们在OpenGL里面模拟光照,实质上就是通过各种方式计算出反射光源。 首先,我们学习了“颜色”这一小章节,核心知识就是物体本身的颜色(矩阵)乘以光源颜色(矩阵),得到的就是物体反射的颜色。 为了模拟物体更加真实的效果,我们接着学习了“
阅读全文
摘要:本篇blog讲一下关于材质的知识。 在前面中,我们通过设定几个光照分量以及物体本身的颜色,实现了物体的视觉输出(就是人眼看到的啦)。 设置材质:我们可以通过进一步地整合数据,来对物体的颜色进行更加严格的控制,既环境光照,漫反射光照,镜面光照三个分量,再加上反光度(为了方便理解,我们把这几个分量看成是
阅读全文
摘要:本片blog主要是为了整理脑内一些混杂的知识。 颜色: 大自然中的物体都有着自己独一无二的颜色,我们需要用电脑去模拟这种颜色(尽管是用有限的电脑颜色去模拟无限的自然界存在的颜色,但是你基本看不出来区别)。 严格地说,平时生活中我们看到的某一个物体的颜色并不是它本身的颜色,而是它所反射(reflect
阅读全文
摘要:最后一篇博客讲一下Perspective(透视)。 在顶点运算器的最后,OpenGL希望所有的坐标落在一个特定的范围内,超出这个范围的物体就会被裁剪或者重新渲染。而从观察空间变化到裁剪空间,所需要的就是投影矩阵,投影矩阵有两种,一种是正射投影(ortho),另一种是透视投影(perspective)
阅读全文
摘要:这篇blog写的是观察空间(从世界空间到观察空间)里的观察矩阵(view matrix),也称之为摄像机(camera)。 本质上来说,并不存在什么摄像机。所谓对空间的观察,实际上是物体自己在变换(反方向变换),造成一种我们人为观测的感觉,这也就是观察矩阵的功能:观察矩阵把所有的世界坐标变换为相对于
阅读全文
摘要:前面学习OpenGL的时候渲染的东西都是2D(更准确地说是在2D平面渲染2D的物体)的,而现在开始学习了3D的渲染,其中的门道还是很多的。这里提一提。 首先我们要了解OpenGL的坐标系统,屏幕中心为空间坐标系原点,向右为正x半轴,上为正y半轴,而 从屏幕内指向屏幕外为 正z半轴,如果要渲染一个物体
阅读全文
摘要:本篇写一下EBO(element buffer object, 又称index buffer object IBO,索引缓冲对象)。 在明白了VBO,VAO的相关概念之后,EBO理解起来就简单了很多。 假设现在我们需要绘制一个矩形,首先我们想到的是给出四个点,然后让OpenGL处理。但是限制出现了,
阅读全文
摘要:本篇blog讲的是VAO,想看VBO参照上一篇blog。 VAO(vertex array object,顶点数组对象),不得不说......这个名字起得真是鬼畜,名字和功能八竿子打不着。 吐槽归吐槽,该写还是要写的。 我们知道,VBO保存了一个模型的顶点属性信息,每次绘制模型之前我们需要绑定所有的
阅读全文
摘要:刚学习OpenGL不久,就遇到了VAO VBO EBO(IBO)这类难题,这里写个blog来讲解一下这三个东西的概念,理清思路。 由于篇幅问题,本篇先写最简单的VBO。 在讲解之前,有些预备知识需要了解一下:OpenGL中的缓冲区既是所谓的显存,开始工作的时候缓冲区内的数据会通过AGP总线传输到GP
阅读全文
1

浙公网安备 33010602011771号