
OpenGL
rv0p111
之前由于一些原因博客没有更新,现在还是正常更新,继续分享..
展开
-
OpenGL-没有设置glClear的坏处
就好比如果我们如果去绘制一个圆形,这里没有设置glClear#include "GLTools.h"#include void draw(){ //1、清屏颜色 glClearColor(0.0f, 1.0f, 0.0f, 1.0f); //前一个函数设置好清除颜色,后者利用前一个函数设置好的当前清除颜色设置窗口颜色 //开始渲染 指定填充方式原创 2018-02-03 16:25:11 · 1360 阅读 · 0 评论 -
OpenGL 点精灵效果
点精灵效果简介点精灵其实是OpenGL 1.5及之后的版本所支持的一个特性,通过点精灵这个特性,我们可以通过绘制1个3D点,去将一个2D纹理图像显示在屏幕的任意位置。所以我们可以用点去表示屏幕上移动的大量的粒子,来产生一些视觉效果。把这些点表示为重叠2D图像是可以做成动画细丝的效果的。其实OpenGL一直都是支持对点进行纹理贴图的,但是在1.5版本之前,这意味着只是将单个纹理坐标应用于整个点。...原创 2018-04-20 07:51:58 · 2645 阅读 · 0 评论 -
OpenGL-缓冲区对象
关于缓冲区对象 其实关于缓冲区对象的这个概念其实很广,比如说有帧缓冲区、有顶点缓冲区、像素缓冲区、纹理缓冲区等等。缓冲区对象是保存在GPU内存中的,我们能够去高效的访问它,在OpenGL有缓冲区对象之前,应用程序只有有限的选择可以在GPU当中去存储数据,以及在GPU中更新数据常常是需要去重新加载整个对象的,在系统内存和GPU内存之间来回移动数据可能是一个极其缓慢的过程创建缓冲区其实非...原创 2018-04-23 14:38:23 · 871 阅读 · 0 评论 -
OpenGL-纹理数组
关于纹理数组 我们可以通过不同的纹理单元去一次性的去访问几个纹理,也就是说着色器可以一次性访问多个纹理对象,实际上还有中方法也能达到这种效果,就是使用纹理数组,也就是说我们可以将几个2D图像都去加载到一个单独的纹理对象中,其实Mip贴图中每个Mip层次都是一个不同的图像以及立方体贴图中立方体的每个面都有它们自己的图像也都是在一个纹理中添加多个图像的体现对于纹理贴图,我们可以将整个数组...原创 2018-04-22 08:31:11 · 4155 阅读 · 4 评论 -
OpenGL中的Use of undeclared identifier 'gl_PointCoord'
关于这个问题,其实解决方法很简单,我们只需要在着色器程序中加入一行代码就可以解决 #version 120原因是这样子的因为gl_PointCoord是在着色器版本为1.2的版本的时候引入的,具体原因可以参考这个讨论下面是我们原本的程序,执行的时候会报Use of undeclared identifier ‘gl_PointCoord’varying vec4 vStarC...原创 2018-04-16 12:24:18 · 2301 阅读 · 0 评论 -
OpenGL多重纹理
一、简单介绍在先前的时候,我一直都是只给要渲染的几何体中将一个单独的纹理加载到一个纹理对象上面,然后我们要使用纹理的时候就会去绑定它到选定的纹理对象上面。传递给片元着色器的uniform sampler2D texture设置为0,这里传0是因为我们默认使用的就是第一个纹理单元也就是默认激活的纹理单元texture0。其实在片元着色器中我们可以使用多个纹理,然后在片元着色器中让这些纹理颜色进行相乘...原创 2018-04-10 12:48:26 · 1112 阅读 · 0 评论 -
卡通着色效果
一、简单介绍虽然自己学的都比较浅,但是还是想通过文字来记录下。首先先介绍下卡通着色的效果,为什么要进行卡通着色,卡通着色的目的就是为了让被着色物体显得过渡的不要那么的好,明暗交界线很明显。卡通着色也叫做非真实渲染技术,利用卡通着色加上描黑边的效果就可以很好的做出一个动画的任务了,就比如说下面的一个喜羊羊的图片。颜色都很分明的。卡通着色将一个一维纹理贴图作为查询表,使用纹理贴图中的纯色去填充几何图形...原创 2018-03-27 12:54:30 · 923 阅读 · 0 评论 -
通过Phong着色照亮纹理的单元的注意点
一、简单介绍我们在着色器中使用光照来进行对物体颜色值的影响可以是逐个顶点进行的,当然也可以是逐个像素进行的,这样的操作基本都是直接将物体的基本的颜色值和光线的颜色和强度进行相乘,然后得到最终的颜色。这里就像简单的介绍下,如果我们物体有纹理了,怎么办?难道还是直接将纹理颜色和光线的颜色和强度直接相乘吗?二、实战演练我们在堆纹理表面进行光照的时候一定要考虑到的就是,我们这边使用的是ADS光照模型因为A...原创 2018-03-26 19:32:40 · 257 阅读 · 0 评论 -
冯氏光照模型--镜面光的计算
一、简单介绍冯氏光照模型是由三部分组成,一个是环境光,一个是漫射光,还有一个就是镜面光。冯氏光照模型的提出主要就是为了去做出光照效果来影响物体的表面的颜色的。冯氏模型阐述了镜面光的计算依赖于观察者的观察方向和反射光向量之间的夹角,所以下面就会去去简单的介绍下镜面光的概念。高强度的镜面光趋向于它所照射的表面上形成一个亮点,也就是镜面亮点。这个镜面两点的应用的话,其实就好比现实世界中总是存在金属的,金...原创 2018-03-25 01:35:16 · 2574 阅读 · 1 评论 -
Lambert光照模型和Gouraud着色以及Phong着色的区别
一、Lambert模型这里简单的介绍下Lambertian漫反射模型其实就是假设反射光均匀分布在所有方向,反射光照的强度与表面法线和光源方向夹角的余弦值成正比。也就是可以理解成受光面所受的光照都是均匀的,不会因为表面粗糙而有所影响。不能反映粗糙度带来的变化。也就是说无论我们从哪个方向进行观察,物体表面的光照的表现都是不变的。Lambert对应的公式为:vResult = vDiffuseMater...原创 2018-03-24 20:02:27 · 6616 阅读 · 0 评论 -
OpenGL中法线坐标的转换
一、简单介绍我们都知道如果我们要将一个物体从本地坐标系变到视觉坐标系的话都是要通过模型视图矩阵来进行变化的,我们的光照效果是在视觉坐标系中进行实现的,因为观察者的位置其实是决定了光照的效果的,在我们开启光照功能的时候,法线是决定了顶点或者是面上所接受到光照的多少的,就比如说我们要确定一个指定顶点上的光线的强度的时候,如果我们使用的是漫射光的话,漫射光是需要两个变量的,一个就是光源的方向,还有一个就...原创 2018-03-23 20:49:12 · 1422 阅读 · 0 评论 -
利用OpenGL ES在ios上绘制图像
一、简单介绍最近也开始学了自定义着色器程序,来进行图形的渲染,现在就对最基本的用绘制纹理的方式来在设备上显示图片,本篇文章主要都是自己的理解,如有错误尽请指出。废话不多说,先去介绍一下CAEAGLLayer这个类,其实CAEAGLLayer是一个实现了EAGLDrawable协议的层,允许它作为OpenGLES渲染目标。提供了一个OpenGL ES渲染环境。其中GLKit框架中的GLKView的l...原创 2018-03-14 00:09:26 · 4049 阅读 · 0 评论 -
OpenGL纹理和顶点对应,纹理没有在前面导致的结果
最近在研究纹理的时候又发现一个问题,就是设置了纹理坐标和顶点对应的时候,发现了有一块地方莫名的被拉伸了,出现了如下图的情况,其中黑线是我为了方便观察画的原本以为是顶点指定顺序出了问题,因为天花板上的纹理是好的,而地板在第一个三角形绘制的时候上面的纹理边缘被拉伸了。然后又把图形指定的和天花板顺序一样,这样纹理确实没有拉伸了,但是之后又看了下旁边的墙的绘制方式,发现其实和我们地板的顶点的数据是一样的。...原创 2018-03-01 16:00:17 · 537 阅读 · 0 评论 -
OpenGL--纹理放大、缩小、环绕模式
讲道理,这个自己研究了一阵子,现在做一个总结。这里所使用的过滤都是线性过滤,以及我们这里给s轴和t轴设置的都是一样的环绕模式也就是我们在下面设置的什么就是什么,这里的wrapMode指的就是下面设置的那些模式 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, wrapMode); glTexParameteri(GL_TEXTURE_...原创 2018-02-28 19:10:53 · 7665 阅读 · 0 评论 -
GLTools-GLFrame概念
学习OpenGL也有一些日子的,最近终于有点弄明白角色帧的含义了,这里在此简单记录下,有说的不对的可以留言。其实角色帧也叫做观察者,通常移动的物体称为角色,只有角色才会有自己的变化,所以其实GLFrame是拿来做变化用的。可以用来产生模型视图矩阵。来产生位置的移动。GetCameraMatrix是GLFrame的一个函数,我们通常会用这个来进行设置,我们可以通过此函数来获取一个观察者变换过后的矩阵...原创 2018-02-13 22:28:43 · 1370 阅读 · 0 评论 -
OpenGL-设置纹理和顶点数据对应出现的问题
今天偶然在贴纹理的时候,发现如果我们使用的GLBatch类的来设置纹理数据和顶点数据出现的问题,这里主要是记录下 pyramidBatch.Vertex3f(-1.0f, -1.0f, -1.0f); pyramidBatch.Normal3f(0.0f, -1.0f, 0.0f); pyramidBatch.MultiTexCoord2f(0, 0.0f, 0.0...原创 2018-02-26 16:32:35 · 601 阅读 · 0 评论 -
OpenGL-背面剔除深度测试
一、进行创建用一个最简单的案例来说明下这两个技术吧。首先,我们可以使用GLTools里面的gltMakeTorus函数来为我们去创建一个类似于甜甜圈的模型。二、解释说明当我们不旋转的时候创建的模型是这样的三、旋转之后我们发现,为什么一旋转就会出现黑边?那是因为一些远端三角形绘制在了近端三角形上,为什么这么说因为三角形的背面其实是黑色的,为什么是黑色?因为这个模型就是这么设定的,然后我们一旋转可能就...原创 2018-02-09 16:20:48 · 902 阅读 · 5 评论 -
Mac下的OpenGL环境配置
基于Xcode9.2的环境搭建 准备资源:1、GLTools工具函数库2、libGLTools.a前两个可以去GitHub上去下载然后按步骤操作 https://github.com/HazimGazov/GLTools 注意如果电脑上没有安装过CMake的,需要安装下,因为上面就需要用到CMake的终端指令。如果要安装CMake的终端命令就需要先去官网https://cmake.org/down...原创 2018-02-03 09:58:39 · 582 阅读 · 0 评论 -
OpenGL-运动模式效果
关于运动模糊效果的制作 运动模糊效果其实是一种特效,它有助于显示出一个场景当中哪些对象是运动的,以及它们运动的有多快,在电影中和现实生活中都有这样的例子,当一个物体以一个相对于单帧快门速度来说的高速经过照相机的时候,这一帧和相邻帧的图片上就会沿着运动的方向出现一片模糊的痕迹,就比如说在高速公路上行驶当中的汽车中的一位乘客从汽车中向侧面拍摄照片的场景OpenGL中有很多方法可以去作出这...原创 2018-05-05 16:11:49 · 2000 阅读 · 0 评论