OpenGL ES 学习教程
文章平均质量分 62
_Captain
这个作者很懒,什么都没留下…
展开
-
OpenGL ES 学习教程(十七) Unity GPU Instance 原理及 GLES 实现(二)
1.前言上一篇 OpenGL ES 学习教程(十七) Unity GPU Instance 原理及 GLES 实现(一) 介绍了使用Uniform数组实现GPU Instance的方法,但是由于Uniform变量数量有上限,所以这种方式受到很大限制。本篇介绍使用顶点缓冲区VBO的形式来实现GPU Instance,只要系统允许,可以绘制无限个实例。2.了解顶点缓冲区VBOVBO在之前的教程中介绍过了,请跳转 OpenGL ES 学习教程(五) 极速绘制,使用 VBO (顶点缓冲区对象)!3.使用V原创 2021-01-19 13:27:56 · 1181 阅读 · 0 评论 -
OpenGL ES 学习教程(十七) Unity GPU Instance 原理及 GLES 实现(一)
我们口中常说的Unity batch有2种形式,static/dynamic batch 和 GPU Instance。static/dynamic 都是在软件层面上对Mesh进行合并,而GPU Instance则是图形框架提供的功能,任何游戏引擎都可以实现上面2种形式的batch,这次我们就来探究下Unity GPU Instance的原理及实现。1.为什么要合并DrawCall?首先需要了解的是CPU与GPU交互,是CS架构的。我们口头上常说的一个DrawCall,指的是从指定GPU Pro原创 2021-01-16 16:29:20 · 2617 阅读 · 0 评论 -
OpenGL ES 学习教程(十) Light casters 之 Spot Light (聚光灯)
聚光灯 是朝某一个方向 照射的光,而且有一个固定的半径 ,在这个半径之内,物体才受到光照影响,这个范围之外的物体就不会被光照影响到。聚光灯在现实生活中的例子有:手电筒、路灯等。原创 2016-02-21 01:04:27 · 4236 阅读 · 0 评论 -
OpenGL ES 学习教程(十一) Skin Mesh (骨骼动画)
Skin Mesh (骨骼动画) 这个名字,多多少少让人产生误解。一开始我总以为要画出来几根骨头,然后再到骨头上去把顶点粘上去。其实不是这样。事实上 是没有 骨骼 这个实体的,骨骼只是大家为了 形象的拟人表示 。原创 2016-02-24 02:24:04 · 11223 阅读 · 22 评论 -
OpenGL ES 学习教程(五) 极速绘制,使用 VBO (顶点缓冲区对象)!
在渲染流水线中,如果我们要渲染一个模型文件,比如一个从 3dmax中导出的茶壶,要经历以下过程 从硬盘读取模型数据,拷贝到内存中,然后每次绘制的时候上传到显卡。原创 2015-12-04 00:05:18 · 3710 阅读 · 7 评论 -
OpenGL ES 学习教程(十二) DEPTH_TEST(深度缓冲测试)
在OpenGL中,默认是没有开启深度检测的,也就是说,后绘制的物体覆盖先绘制的物体(颜色缓冲区中,先绘制的物体 被 后绘制的物体 覆盖)。原创 2016-11-03 00:46:25 · 8060 阅读 · 0 评论 -
OpenGL ES 学习教程(十三) Stencil_TEST(模板缓冲测试)
模板缓冲测试,是指 将模版缓冲区中的值 与 一个参考值 进行比较,根据比较的结果,来对缓冲区中的值进行修改。进而决定该片段是否有效。在应用中的体现就比如:Unity中的Mask 。原创 2016-11-18 15:31:20 · 6108 阅读 · 1 评论 -
OpenGL ES 学习教程(十五) 从 颜色缓冲区(FBO的颜色附着)中 读取颜色数据 保存到图片(FreeImage)
GL中提供读取像素数据的API glReadPixels,方便实现游戏中截屏功能。原创 2016-12-07 02:39:47 · 5420 阅读 · 1 评论 -
OpenGL ES 学习教程(十四) 帧缓冲区对象(FBO) 实现渲染到纹理(Render To Texture/RTT)
一般情况下,我们只需要系统提供的帧缓冲区作为绘图表面,但是又有些特殊情况,比如阴影贴图、动态反射、处理后特效等需要渲染到纹理(Render To Texture/RTT)操作的,如果使用系统提供的帧缓冲区,效率会比较低下。原创 2016-11-27 15:39:08 · 7809 阅读 · 0 评论 -
精度限定符很重要
今天早上写好了Diffuse光照,就开始编译到Android上。但是运行之后就是一片黑,查看logcat也没有错误日志。因为Win上面是好好的,故而猜测是不同的平台对GL处理上不同。于是最简单粗暴,一行一行把新加的Shader代码删除掉,最后定位到vec4 colorTexture=texture2D(m_texture,m_outUV);这行代码哪里有问题?最开始猜测难道texture2D这个函...原创 2018-05-27 14:58:08 · 575 阅读 · 0 评论 -
OpenGL ES 学习教程(十六) ShadowMap的理解
目前游戏上的阴影一般用ShadowMap实现。我一直在学习LearnOpenGL上的文章,ShadowMap这一篇,说实话我两年前就开始看了,一直没明白,或者说没有认真花时间去看。最近在给lives2d堆功能,终于也到了阴影的实现。LearnOpenGL上ShadowMap教程地址:http://learnopengl-cn.readthedocs.io/zh/latest/05%2...原创 2018-07-20 02:14:58 · 1008 阅读 · 2 评论 -
OpenGL ES 学习教程(十) Light casters 之 Point Light (定点光)
定点光,就是光源的位置固定的光!在前面我们用到很多次了。但是在前面学习的光照中,都是假设灯光没有衰减的,不管多远,物体受到的光照都是强度相同的。但是现实中,灯光不可能照亮很远的地方,在一个范围之内就会完全消失在黑暗之中。原创 2016-02-20 00:43:35 · 2228 阅读 · 0 评论 -
OpenGL ES 学习教程(十) Light casters 之 Directional Light (平行光)
前面我们学习光照的时候 ,指定了 灯光的所在位置。根据 灯光的位置 与 Fragment 的位置 算出向量A , 然后与 Fragment 的 法线 进行计算 , 得到夹角,然后计算出 Fragment 受光照的强弱 大小。指定灯光位置的 方式 常见于 室内的灯泡、手电筒 等环境。原创 2016-02-17 00:44:54 · 2246 阅读 · 0 评论 -
OpenGL ES 学习教程(七) 瞎子打灯,照亮他人,浅谈Ambient Lighting 环境光照
我是一个立方体,我头顶上有一个灯,但是我离灯太远了,所以你看我有一点暗淡。即时灯灭了,你也能找到我,因为还有天上的星星照耀。原创 2015-12-11 02:53:05 · 2564 阅读 · 1 评论 -
OpenGL ES 学习教程(七) 亮瞎狗眼的 Specular Lighting 镜面高光
上一篇了解到的 Diffuse Lighting 漫反射光照 对比,Speculer Lighting 镜面高光需要添加一个新的变量 - 观察者的位置。我们代码中观察者 就是 摄像机,所以就使用 摄像机 的位置坐标 替代 观察者的位置。原创 2015-12-13 03:08:55 · 5119 阅读 · 0 评论 -
OpenGL ES 学习教程(七) 物有两面,即使前面有一盏灯,也照不透背后。解析Diffuse Lighting 漫反射光照
物有两面,即使前面有一盏灯,也照不透背后。就如同天使,华丽耀眼的天使之翼,却不能将光芒照射到阴暗的脸庞。只因为光在后面,而我在前面。原创 2015-12-11 17:54:49 · 2091 阅读 · 0 评论 -
OpenGL ES 学习教程(八) 精密控制光照元素的 Material 材质系统
学习教程(七) 第一篇了解了OpenGL中是如何模拟光照的,后面三篇中简单学习了 Ambient Light(环境光照)、Diffuse Lighting(漫反射光照)、Specular Lighting(镜面高光) 。然后我们可以做一些简单的光照效果,比如不同的高光效果。但是这个东西是学习的一个例子,和自然世界中的光照效果相比,还是有很大的差距的。即使上面的图中看起来是光照在一块原创 2015-12-15 14:20:00 · 3381 阅读 · 0 评论 -
OpenGL ES 学习教程(六) 使用开源库 Assimp 将 Obj 模型 转换成自己的格式
前面都是在代码中手写 Cube 的顶点数据、UV坐标。虽然不是很多,但是看得还是肉疼。在项目开发中可不能这么干,虽然咱们可以手写一个软件,但是要手敲一个模型的几千个顶点数据,这估计得找最强大脑。模型有专门负责模型制作的人,她们使用3dmax 或者 maya 或者Blende来制作各种精美的模型,然后用QQ发给程序猿。程序猿就负责把这些模型文件解析出来,从里面读取顶点信息、纹理信息、摄像原创 2015-12-08 19:09:34 · 10443 阅读 · 9 评论 -
OpenGL ES 学习教程(九) 油腻的效果 Lighting Maps 高光贴图
去哪里寻找,油腻的师姐。广告总是在脑子里绕来绕去。虽然说师姐是油腻的,但是原画们也不会把全身都弄成油腻的效果。皮肤是油腻的,可能是涂多了护肤品精油,但是头发和衣服也油腻的话,那就可能这个人是修汽车的。所以对同一个物体,有些地方需要 Specular Ligting 镜面高光,有些地方却只要 Diffuse Lighting 漫反射光。原创 2015-12-16 03:01:04 · 3083 阅读 · 0 评论 -
OpenGL ES 学习教程(二) 可编程管线,Shader,一个彩色三角形!
顶点程序、片元程序字样,就是说,这两个过程是可编程的,要我们自己写代码去控制。顶点程序就是常说的 顶点 Shader ,后缀一般是vsh , 片元程序 就是常说的 片段Shader,后缀一般是 fsh 。原创 2015-11-30 23:55:22 · 2716 阅读 · 3 评论 -
OpenGL ES 学习教程(一) 打开一个窗口,什么都没有!
在Windows上创建OpenGL ES 应用程序可以有两种选择,一是使用windows api来创建窗口,二是使用其它的库来创建。既然是学习,那我们就使用 windows api来创建一个窗口,了解下OpenGL ES 在Windows上面的初始化流程。原创 2015-11-29 17:57:48 · 2671 阅读 · 0 评论 -
OpenGL ES 学习教程(四) 买来墙纸,给立方体贴上!
我不喜欢这种纯色的界面,想象一下,上图如果是纯色的,嗯。高大的武士,蓝色的。敏捷的女刺客,红色的。感觉不好。如果想实现上图中的效果,那就要把 图片 贴到 人物模型上。这个一般是由美术同事们来完成 。原创 2015-12-02 11:36:06 · 1685 阅读 · 0 评论 -
OpenGL ES 学习教程(三) 使用矩阵、彩色立方体转起来!
在OpenGL中,让圆珠笔旋转是一个矩阵,暂称为 rotationMat4,抛起来位移也是一个矩阵 transMat4 ,然后还有缩放矩阵 scaleMat4 。只要把 位移矩阵 乘以 旋转矩阵 乘以 缩放矩阵,就可以把位移、旋转、缩放 这三种效果叠加到 圆珠笔上。原创 2015-12-01 19:58:43 · 2529 阅读 · 0 评论 -
OpenGL ES 学习教程(七) 事实上并没有所谓的灯光,只是大家都装作发亮
平时我们习惯于说 “在这里加上一个灯,照亮这个角落”我们总是误以为,这个灯在发光,但是其实这个灯并不是发光体。在Unity等游戏引擎中,我们在编辑器里面创建一个灯光,然后在编辑器中能看到一个真实的灯光存在,可以调整位置,调整光的颜色等等。这很容易使用,但是却误导了我。原创 2015-12-11 02:16:11 · 2702 阅读 · 0 评论