自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

加载中...

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

  • 博客(13)
  • 资源 (2)
  • 收藏
  • 关注

原创 OpenGL基础41:几何着色器

在顶点着色器之后,片段着色器之前,还有几何着色器,它是可选的,在《OpenGL基础3:渲染管线》这一章中就有提到了,有了几何着色器后可以做很多骚操作,更容易实现很多有意思的效果一、最简单的几何着色器(Geometry Shader)几何着色器的输入:一个或多个表示单独基本图形(primitive)的顶点,这个基本图形可以是点、线或者三角形输出:处理过后的基本图形顶点,这些顶点无论是大小还是位置,甚至是数量、基本图形单元都可以被改变、拼装最“简单”的几何着色器如下:#version...

2020-07-31 14:12:53 1030 1

原创 OpenGL基础40:Uniform缓冲

前置:OpenGL基础39:GLSL内建变量与接口块想想之前代码,glUniform()和glGetUniformLocation()的使用数量是不是过于频繁了,对于每个着色器的每一个uniform变量,都需要特意去设置,不但代码特别长,而且大多都是重复的一、Uniform对象没错,就是UBO,这不知道是第几个缓冲对象(xBO)了,不过也好,这样不用去查都可以大致知道它的意思和作用在之前的例子中,几乎所有的物体着色器中都有投影矩阵和观察矩阵,值也是相同的(都处于一个世界中怎么可能不一样...

2020-07-30 16:02:26 1367 1

原创 OpenGL基础39:GLSL内建变量与接口块

GLSL有几个以gl_为前缀的变量(内建变量),它们在着色器中能直接获取和使用,并且都有着很重要的意义,gl_Position 和 gl_FragCoord 就是两个典型的内建变量一、顶点着色器变量gl_Position:顶点着色器裁切空间输出的位置向量。想让屏幕上渲染出东西,那么就必须使用,否则将什么都看不到,在第一次接触顶点着色器之后,就一直在用它了gl_PointSize:渲染出的点的大小,需要满足以下两个条件,gl_PointSize才会是有效的:glEnable(GL...

2020-07-29 20:16:27 1184

原创 OpenGL基础38:数据存储

一、缓冲数据OpenGL中的缓冲就是一块内存区域的对象,将缓冲绑定到一个特定缓冲对象的时候,就给缓冲赋予了一个特殊的意义,例如绑定到GL_ARRAY_BUFFER的时候,这个缓冲就是一个顶点数组缓冲,绑定到GL_ELEMENT_ARRAY_BUFFER的时候,这个缓冲就是个顶点索引缓冲之前的用法一直都是这样:GLuint skyboxVAO, skyboxVBO;glGenVertexArrays(1, &skyboxVAO);glGenBuffers(1, &sky...

2020-07-28 16:53:51 575

原创 OpenGL基础37:反射与折射

前置:OpenGL基础20:镜面光照一、反射不一定所有的光源都是简单的白光,不仅如此,光线也是可以多次反射的,例如一面镜子,可以从中看到远处的风景,一些金属材质的物体表面也会反射周围物体的光这主要就是着色器的改动,和漫反射以及镜面反射一样,还有一种贴图叫做反射贴图,当然了,是否是贴图只是着色器写法上的问题,有了之前的经验,搞定这个不是问题反射的计算方式和之前的镜面反射很像,,着色器如下:#version 330 corelayout (location = 0) in ve...

2020-07-21 18:25:29 1767

原创 OpenGL基础36:天空盒

一、立方体贴图立方体贴图就是6个2D贴图,每个贴图都是立方体的一个面,当然这样的立方体贴图是一个整体,有自己特有的属性,可以使用方向向量对它们索引和采样立方体贴图的主要作用:其组成了一个完全封闭的空间,这就意味着从立方体中间发出任意方向的向量,一定会触碰到立方体表面的一个点,也就是立方体贴图的纹理位置,从而就可以获取所有顶点的纹理坐标,再通过这个纹理坐标就能获取到立方体贴图上正确的纹理沿着黄色的方向向量,可以得到对应黄色块的纹理坐标创建一个立方体贴图:GLuint textur...

2020-07-16 17:59:04 2018

原创 OpenGL基础35:帧缓冲(下)之简单图像处理

在之前的章节,所有的物体都是中规中矩的显示的,只考虑了光照对物体的影响,那假设想要显示特殊的效果该怎么操作呢?例如马赛克风、将所有的物体都显示为黑白色,就像上世纪80年代的灰白电视一样,又或者说将整个场景渲染到一张泛黄的纸上以体现出年代感……当然是修改着色器,事实上,很多地方都是这么做的,不过有些情况下,场景中的物体和对应的着色器都不少,若是想要整个场景(视口)体现出某个效果,就需要借助别的方法了接上文:OpenGL基础34:帧缓冲之附件接下来就可以开始实战了五、黑白画根据上文的目...

2020-07-15 17:04:44 1024

原创 OpenGL基础34:帧缓冲(中)之附件

在之前的章节,所有的物体都是中规中矩的显示的,只考虑了光照对物体的影响,那假设想要显示特殊的效果该怎么操作呢?例如马赛克风、将所有的物体都显示为黑白色,就像上世纪80年代的灰白电视一样,又或者说将整个场景渲染到一张泛黄的纸上以体现出年代感……当然是修改着色器,事实上,很多地方都是这么做的,不过有些情况下,场景中的物体和对应的着色器都不少,若是想要整个场景(视口)体现出某个效果,就需要借助别的方法了接上文:OpenGL基础33:帧缓冲之离屏渲染三、纹理附件接下来,就是想办法往帧缓冲里添加...

2020-07-15 15:22:14 2261

原创 OpenGL基础33:帧缓冲(上)之离屏渲染

在之前的章节,所有的物体都是中规中矩的显示的,只考虑了光照对物体的影响,那假设想要显示特殊的效果该怎么操作呢?例如马赛克风、将所有的物体都显示为黑白色,就像上世纪80年代的灰白电视一样,又或者说将整个场景渲染到一张泛黄的纸上以体现出年代感……当然是修改着色器,事实上,很多地方都是这么做的,不过有些情况下,场景中的物体和对应的着色器都不少,若是想要整个场景(视口)体现出某个效果,就需要借助别的方法了一、帧缓冲为了解决这个问题,来学习帧缓冲吧,当有了目的之后才能更好的去理解和掌握。这一章相对之...

2020-07-13 21:07:02 4453

原创 OpenGL基础32:面剔除

一个标准的立方体总共6个面,对于每个面又有里外之分,因此若要绘制一个正方形的话,总共需要绘制12个面,然而事实上,对于每个面,我们在玩家视角一定只能看到它的一个朝向换句话说,对于一个六个面的正方体,我们一定只能看到最多三个面,这样的话,有个很明显的优化方法:不再绘制玩家看不到的面!一个好消息是,openGL自带这样的优化一、绘制顺序当定义一系列的三角顶点时,他一定也同时定义了一个特定的连接顺序(Winding Order),它们可能是顺时针的或逆时针的,每个三角形由3个顶点组成,我们从三角...

2020-07-13 15:09:31 777

原创 OpenGL基础31:混合

在很多游戏场景中,地面往往都不是完全干净和平坦的,如果是草坪,那么肯定会有一些长得比较高的杂草,而对于沙地,往往总会有一些奇形怪状的石头等,一般来讲确实可以用模型,但是贴图也是一个不错的选择一、Alpha值考虑给地面铺上“石头”:注意如果想加载这种纹理,最好保证空白的部分是透明的而并非为白底!前面讨论过颜色的属性:RGB,其实颜色还有一个属性A代表为透明度也就是说:RGBA才是一个表示颜色的“完全体”,如果想渲染一些半透明的材质,就必须要考虑到透明度这一属性,就如上面的石头...

2020-07-10 17:15:24 1245

原创 OpenGL基础30:模板测试

前置:OpenGL基础29:深度测试一、模板测试前面一章提到过:深度缓冲是在片段着色器运行、以及模板测试(Stencil Testing)之后,那么这下知道模板测试是在什么时候了吧,模板测试和深度测试逻辑可以说是一致的,它能丢弃一些片段,仍然保留下来的片段将会进入深度测试阶段:glEnable(GL_STENCIL_TEST):开启模板测试 glClear(GL_STENCIL_BUFFER_BIT):清空模板缓冲可以用模板测试实现一些非常有意思的效果,一个最经典的例子就是3D物体的描...

2020-07-03 18:40:08 707

原创 OpenGL基础29:深度测试

前置:OpenGL基础11:空间一、深度测试在OpenGL基础13:第一个正方体这一章中,就开始用深度测试了深度缓冲就像颜色缓冲(Color Buffer)(储存所有的片段颜色:视觉输出)一样,在每个片段中储存了信息,并且通常和颜色缓冲有着一样的宽度和高度,深度缓冲是由窗口系统自动创建的,它会以16、24或32位float的形式储存它的深度值,在大部分的系统中,深度缓冲的精度都是24位的当深度测试(Depth Testing)被启用的时候,OpenGL会将一个片段的的深度值与深度缓...

2020-07-03 12:29:10 1003 1

OpenGL基础学习完整代码(完整场景带优化).zip

对应的OpenGL学习博客:https://blog.csdn.net/jaihk662/category_9903113.html,第1章~第56章节完整代码。需要对应环境(openGL基本环境,SOIL库、glm库以及Assimp库、FreeType库),如何装环境的教程也在上面的链接中。此代码仅用于OpenGL入门学习

2020-09-28

OpenGL基础学习完整代码.zip

对应的OpenGL学习博客:https://blog.csdn.net/jaihk662/category_9903113.html,第1章~第45章节完整代码。需要对应环境(openGL基本环境,SOIL库、glm库以及Assimp库),如何装环境的教程也在上面的链接中。此代码仅用于OpenGL入门学习。PS:可能会有点卡主要是因为:①使用的地面模型是高模(几十万个顶点)②使用的天空盒贴图是2040x2048的超大贴图6张;没办法只找到这些资源,所以只能将就着用了

2020-08-12

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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