
OpenGL
文章平均质量分 75
淡泊以致远
一个文艺的程序员
展开
-
零基础学习OpenGL(一)--光照
序:今天开始主要写写OpenGL,顺带写写其他的Unity,C#,Shader,优化等。这个系列参考自https://learnopengl-cn.github.io,作者不详,系翻译了经典的OpenGL教程,讲的通俗易懂,大家可以参考一下。所以我也不知道该定义我的文章是转载还是原创还是翻译,因为文章里也有加自己的理解,不懂的欢迎大家来探讨。 定义: OpenGL:...原创 2018-11-23 15:47:01 · 309 阅读 · 0 评论 -
Adreno GPU Profiler 和 Snapdragon Profiler 实战(二)(转载)
  转载 https://www.youkuaiyun.com/article/a/2015-08-05/15826957Snapdragon Profiler是一款系统配置和调试工具,旨在帮助开发人员优化Snapdragon处理器驱动设备中的应用程序。这款工具通过三种数据捕获模式显示应用程序的CPU、GPU、DSP、内存、功率、网络连接和设备运行时的发热数据,从多个不同的...转载 2018-12-10 11:29:51 · 2432 阅读 · 0 评论 -
Adreno GPU Profiler 和 Snapdragon Profiler 实战(一)
OpenGL学过了,Unity的Shader也了解了一下,接下来在实战中看看还缺少什么。 这两款软件的下载地址:https://developer.qualcomm.com/download/software,需要注册个账号才可以下载的(免费注册)。下面安装的步骤会用电脑的应该都会。一、Adreno Profiler Adreno Profi...原创 2018-12-10 11:26:28 · 4611 阅读 · 0 评论 -
零基础学习OpenGL(四)--模板测试
模板测试在深度测试之前。当片段着色器处理完一个片段后,模板测试会开始执行,被保留下来的才会进入深度测试。模板测试对应模板缓冲。 模板缓冲:每个模板值8位表示,这样每个片段就有2的8次方,256种模板值。因此可以利用这些不同的模板值,保留或丢弃某个片段。模板缓冲操作允许我们在渲染片段时将模板缓冲设定为一个特定的值。通过在渲染时修改模板缓冲的内容,写入模板缓冲。同一个渲染...原创 2018-11-27 17:27:35 · 321 阅读 · 0 评论 -
零基础学习OpenGL(三)--深度测试
深度缓冲:在每个片段中储存了信息,以16、24、32位float的形式储存它的深度值。(片段着色器运行之后,在屏幕空间中运行。) 当深度测试启用,OpenGL会将一个片段的深度值和深度缓冲的内容相比,如果测试通过,深度缓冲将更新为新的深度值;如果测试失败,片段丢弃。 启用深度测试: glEnable(GL_DEPT...原创 2018-11-27 15:30:38 · 219 阅读 · 0 评论 -
零基础学习OpenGL(二)--材质、光照贴图
接上节: 我们给物体定义了一个材质的属性,这里包含了 环境光照(Ambient Lighting),漫反射光照(Diffuse Lighting),镜面光照(Specular Lighting)和反光度(Shininess)。 struct Material { vec3 ambi...原创 2018-11-26 16:18:06 · 299 阅读 · 0 评论 -
零基础学习OpenGL(十二)--阴影(一) 阴影映射
阴影是光线被阻挡的结果;当一个光源的光线由于其他物体的阻挡不能够达到一个物体的表面的时候,那么这个物体就在阴影中了。 阴影的实现: 阴影映射:我们以光的位置为视角进行渲染,我们能看到的东西都将被点亮,看不见的一定是在阴影之中了。我们希望得到射线第一次击中的那个物体,然后用这个最近点和射线上其他点进行对比。然后我们将测试一下看看射线上的其他点是否比最近点...原创 2018-12-03 13:55:24 · 617 阅读 · 0 评论 -
零基础学习OpenGL(十一)--Gamma校正
人眼对光的敏感度在不同亮度上是不一样的,人眼会对暗的区域变化更加敏感。如果用8位空间来存储像素,0-1区间可以表示256种亮度,但是我们不会一半表示暗的,一半表示亮的(即暗和亮都是128种颜色)。因为我们应该花更多的空间去存储暗的区域,换句话说,暗的需要被区分成更多种。 编码:当摄影设备储存照片时对像素进行编码,如果使用0.45的编码伽马对输入的亮度进行编码,那么0.5...原创 2018-12-03 10:49:09 · 385 阅读 · 0 评论 -
零基础学习OpenGL(十)--高级光照
之前有讲过冯氏光照模型,但他在镜面反射会在一些情况下出现问题,特别是物体反光度很低时,会导致大片(粗糙的)高光区域。 可以看到,在镜面高光区域的边缘出现了一道很明显的断层。出现这个问题的原因是观察向量和反射向量间的夹角不能大于90度。如果点积的结果为负数,镜面光分量会变为0.0。 当考虑漫反射光的时候,如果法线和光源夹角大于90度,光源会处于被照表...原创 2018-12-03 10:02:40 · 234 阅读 · 0 评论 -
零基础学习OpenGL(九)--抗锯齿
锯齿边缘(Jagged Edges)的产生和光栅器将顶点数据转化为片段的方式有关。这种现象被称之为走样(Aliasing)。有很多种抗锯齿(Anti-aliasing,也被称为反走样)的技术能够帮助我们缓解这种现象,从而产生更平滑边缘。 超采样抗锯齿(Super Sample Anti-aliasing, SSAA):使用比正常分辨率更高的分辨率(即超采样)来渲染场...原创 2018-11-30 16:19:05 · 245 阅读 · 0 评论 -
零基础学习OpenGL(八)--立方体贴图、天空盒、环境映射
立方体贴图 将多个纹理组合起来映射到一张纹理上的一种纹理类型:立方体贴图(Cube Map)。 立方体贴图:一个包含了6个2D纹理的纹理,每个2D纹理都组成了立方体的一个面:一个有纹理的立方体。之所以使...原创 2018-11-30 15:47:15 · 1770 阅读 · 0 评论 -
零基础学习OpenGL(七)--帧缓冲、后处理
用于写入颜色值的颜色缓冲、用于写入深度信息的深度缓冲和允许我们根据一些条件丢弃特定片段的模板缓冲。这些缓冲结合起来叫做帧缓冲(Framebuffer),它被储存在内存中。OpenGL允许我们定义我们自己的帧缓冲,也就是说我们能够定义我们自己的颜色缓冲,甚至是深度缓冲和模板缓冲。 我们目前所做的所有操作都是在默认帧缓冲的渲染缓冲上进行的。默认的帧缓冲是在你创建窗口的时候...原创 2018-11-29 20:22:16 · 1184 阅读 · 0 评论 -
零基础学习OpenGL(十三)--阴影(二) 点光源阴影
上节我们学了如何使用阴影映射技术创建动态阴影,但它只适合定向光,因为阴影只是在单一定向光源下生成的。本节我们的焦点是在各种方向生成动态阴影。这个技术可以适用于点光源,生成所有方向上的阴影。 点光阴影,过去的名字是万向阴影贴图(omnidirectional shadow maps)技术。算法和定向阴影映射差不多:我们从光的透视图生成一个深度贴图,基于当前fragme...原创 2018-12-04 11:16:23 · 1680 阅读 · 0 评论 -
零基础学习OpenGL(六)--面剔除
一个3D的图形,我们从任意方向同时可以看到的面数是少于图形的总面数的,如果看不到的面不执行着色,效率会大大提高。OpenGL能够检查所有面向观察者的面,并渲染它们,而丢弃那些背向的面,节省我们很多的片段着色器调用。OpenGL区分哪些是正向面哪些是背向面的方法是:分析顶点数据的环绕顺序。 当定义一组三角形顶点时,可以选择顺时针,也可以选择逆时针: ...原创 2018-11-29 16:30:47 · 180 阅读 · 0 评论 -
零基础学习OpenGL(五)--混合
OpenGL中,混合用来实现物体透明度。透明就是说一个物体的颜色是物体本身的颜色和它背后其它物体的颜色的不同强度结合。一个物体的透明度是通过它颜色的aplha值来决定的。 想加载有alpha值的纹理时,要在纹理生成过程中告诉OpenGL,我们的纹理现在使用alpha通道了: glTexImage2D(GL_TEXTURE_2D, 0, GL_RG...原创 2018-11-29 16:16:00 · 219 阅读 · 0 评论 -
OpenGL实战--基础
1.uniform变量 uniform变量是外部application程序传递给(vertex和fragment)shader的变量。在(vertex和fragment)shader程序内部,uniform变量就像是C语言里面的常量(const ),它不能被shader程序修改。 Opengl中可以设置三种类型的精度(lowp,medium 和 hi...原创 2018-12-10 11:45:14 · 447 阅读 · 0 评论