自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(14)
  • 收藏
  • 关注

原创 OpenGL高级光照Blinn-Phong模型和Gamma校正(一)

Blinn-Phong模型我们之前使用的光照模型是Phone模型,但是该模型在低反光度时会存在不正常的高光区域。根本原因在于在该模型下计算反射光强度时,我们需要根据反射光与视线的夹角大小来决定光强,而当摄像机和光源在同一侧时,可能存在反射光与视线夹角大于90度,而我们使用cos函数来模拟越接近于0光强越大这个过程,那么当夹角大于90度时取值为负数就存在问题了。Blinn-Phong模型就是...

2019-11-15 16:24:41 642

原创 高级OpenGL渲染管线之实例化与抗锯齿(七)

实例化当场景中有大量相似(形状一样,只是角度、位置、缩放不一样)的物体时,如果继续使用glDrawArray或glDrawElement来绘制每一个物体时,大量的性能将会被浪费在和设置OpenGL上下文和与GPU通讯上,因为大量的物体可以使用相同的顶点和模型矩阵,所以我们没必要每一次绘制都设置OpenGL上下文和GPU通讯,,我们只需要一次将生成不同物体间不同属性的必要数据导入,然后绘制所有相...

2019-11-15 14:37:29 553

原创 高级OpenGL渲染管线之几何着色器(六)

几何着色器在顶点着色器和片元着色器中间。从下面的OpenGL渲染流程图可以看出,渲染的流程为顶点着色器—图元装配—视口剔除—光栅化—片元着色器。而几何着色器在光栅化阶段,但是在光栅化之前执行。几何着色器的输入是一个图元的所有顶点,输出是图元类型和所有顶点。#version 330 corelayout (points) in;layout (line_strip, max_ver...

2019-11-15 11:49:17 514

原创 高级OpenGL渲染管线之高级数据及高级GLSL(五)

高级数据我们之前定义顶点属性时都是一次性写入顶点数据,其实,我们还可以使用先分配内存再填数据的方式来写入顶点数据。glBufferData(GL_ARRAY_BUFFER, size, NULL, GL_STATIC_DRAW);glBufferSubData(GL_ARRAY_BUFFER, offset, sizeof(data), &data);但是在使用glBuf...

2019-11-06 23:52:29 351

原创 高级OpenGL渲染管线之立方体贴图(四)

可以想象一下,如果我们有一张可以将摄像机整个包住的大纹理,那么不管摄像机怎么转都能够看到对应的像素。很容易联想到,我们可以用它来实现不会发生变化的场景,例如远处的山,填上的太阳,不会动的云等等。但是,这个纹理应该是怎样的呢?OpenGL里有立方体贴图,他可以实现这个功能。为什么不用球,我认为应该是立方体足够使用了,并且切图更加方便,使用起来也方便。虽然可能造成面中心的点与边上的点到球心的距离不...

2019-11-06 20:30:47 416

原创 高级OpenGL渲染管线之帧缓冲(三)

帧缓冲包括之前学的:用于写入颜色值的颜色缓冲、用于写入深度信息的深度缓冲和允许我们根据一些条件对齐特定片段的模板缓冲。他们都存储在内存中,我们也可以定义自己的帧缓冲。在绑定到GL_FRAMEBUFFER目标之后,所有的读取和写入帧缓冲的操作将会影响当前绑定的帧缓冲。我们也可以使用GL_READ_FRAMEBUFFER或GL_DRAW_FRAMEBUFFER,将一个帧缓冲分别绑定到读取目标或写入...

2019-11-06 17:48:16 243

原创 高级OpenGL渲染管线之混合与面剔除(二)

详细请阅读:https://learnopengl-cn.github.io/04%20Advanced%20OpenGL/03%20Blending/混合用于混合多种颜色,适用于不透明的场景;如果是全透明时可以在shader中使用discard字段,显式表示不进行后面的处理;glEnable(GL_BLEND); // 开启混合测试glBlendFunc(GLenum sfa...

2019-11-01 16:24:47 319

转载 高级Opengl渲染管线之测试(一)

一、深度测试深度测试默认是禁用的,所以如果要启用深度测试的话,我们需要用GL_DEPTH_TEST选项来启用它:glEnable(GL_DEPTH_TEST);当它启用的时候,如果一个片段通过了深度测试的话,OpenGL会在深度缓冲中储存该片段的z值;如果没有通过深度缓冲,则会丢弃该片段。如果你启用了深度缓冲,你还应该在每个渲染迭代之前使用GL_DEPTH_BUFFER_BIT来清除...

2019-10-31 18:15:44 450

原创 OpenGL渲染管线之光照

材质材质也即物体的光照属性,我们使用材质(Material)来模拟物体在真实光照环境下的光照表现。#version 330 corestruct Material { vec3 ambient; vec3 diffuse; vec3 specular; float shininess;}; uniform Material material;am...

2019-10-28 16:01:29 292

原创 OpenGL渲染管线之简单示例(五)

前言:这一章我们将对前面的所有知识进行实践,通过OpenGL编程,完成一个简单的OpenGL程序。你可以通过访问我的GitHub获取我学习的HelloOpenGL项目。这个项目需要的所有头文件及库均配置在项目中,下载后无需再额外配置环境,但由于作者并不想重复配置多个平台,请在Debug - Win32(x86)环境下编译。另外,作者把很多理解都写在了注释中!!!项目地址:https://git...

2019-10-22 20:11:41 300

原创 OpenGL渲染管线之着色器(四)

本文所介绍的着色器将基于OpenGL 3.3前言:OpenGL实现可编程逻辑管线,开发人员就可以自定义其中的某些流程,从 《penGL渲染管线之概述 (一)》(点击进入)可以看出,可编程逻辑管线的实现方式只是将之前的固定管线中可编程的部分提取出来供开发人员自定义。目前,开发人员可以使用的包括顶点着色器、几何着色器、片元着色器。它们的功能请继续阅读《penGL渲染管线之概述 (一)》。概述:...

2019-10-22 18:12:33 209

原创 OpenGL渲染管线之纹理(三)

概述:纹理时一个2D图片(也可以是1D或者3D),用来让图形看起来更真实。是一种很简单就能够模拟真实的方法,因为如果不使用纹理,那么我们就必须为所有细节构建顶点和图形,这样的开销会非常大,有了纹理后,我们就只需要少很多的顶点,然后把纹理贴上去就可以了,及时有些不真实,但是也看不出来。纹理坐标:纹理坐标的原点在左下角; S、T、R 对应 X、Y、Z 但是在存储图片的时候数据是从左上角...

2019-10-21 22:55:16 275

原创 OpenGL渲染管线之概述 (一)

前言:本系列学习可能不适合对OpenGL没有任何了解的学习者。因为本系列只是作者基于自己的学习历程及加上自己对某些功能的设计思路思考得到,并且完成度不是很高。适合于对OpenGL已经有了一定了解,至少需要知道渲染管线主要有哪些流程以及图形渲染过程需要经过哪些变换。概述:opengl渲染管线是为了独立出渲染图形的每个过程,因为基于目前的渲染图形理论,渲染同一个场景中的大多数物体的计算过程是相...

2019-10-21 20:45:43 497

原创 OpenGL渲染管线之坐标系 (二)

本文图片引用自https://learnopengl-cn.readthedocs.io/概述:在OpenGL渲染的整个流程中,共涉及到这几个坐标系:局部坐标系(Object or model coordinates)、世界坐标系(World coordinates)、摄像机坐标系(Eye、Camera coordinates)、裁剪坐标系(Clip coordinates)、屏幕坐标系(...

2019-10-21 20:45:30 542

空空如也

空空如也

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

TA关注的人

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