美文网首页
OpenGL ES 光照计算(v15)

OpenGL ES 光照计算(v15)

作者: 忆痕无殇 | 来源:发表于2019-07-17 16:47 被阅读0次

一:顶点着色器

precision highp float;

varying lowp vec2 vTextCoor;
varying lowp vec4 varyColor;
uniform sampler2D colorMap;

void main()
{
   vec4 weakMask = texture2D(colorMap, vTextCoor);
    vec4 mask = varyColor;
    float alpha = 0.3;
    
    vec4 tempColor = mask * (1.0 - alpha) + weakMask * alpha;
    gl_FragColor = tempColor;
}

// gl_Position
// gl_PointSize
2:顶点着色器任务

1:矩阵变换位置
2:计算光照公式生成逐顶点颜色
3:生成/变换纹理坐标
总结:它可以用于执行自定义计算,实施新的变换,照明或者传统的固定功能所不允许的基于顶点的效果。

3:顶点着色器内建特殊变量
gl_VertexID
gl_InstanceID
gl_Position
gl_PointSize
gl_FrontFacing
4:内建Uniform--统一变量

参考:https://blog.csdn.net/linuxheik/article/details/79582106
shader中与外部连接的常量,初始化之后不能够修改其值。否则会引起编译错误。
在shader中定义

uniform mat4 projectionMatrix;
uniform mat4 modelViewMatrix;

在外部调用

  //11.找到myProgram中的projectionMatrix、modelViewMatrix 2个矩阵的地址。如果找到则返回地址,否则返回-1,表示没有找到2个对象。
    GLuint projectionMatrixSlot = glGetUniformLocation(self.myProgram, "projectionMatrix");
    GLuint modelViewMatrixSlot = glGetUniformLocation(self.myProgram, "modelViewMatrix");
5:顶点着色器内建常量
const mediump int gl_MaxVertexAttribs = 16;             //顶点着色器中属性的最大数量
const mediump int gl_MaxVertexUniformVectors = 256;     //顶点着色器中统一变量的最大数量
 const mediump int gl_MaxVertexOutputVectors = 16;     //顶点着色器中输出向量的最大数量
const mediump int gl_MaxVertexTextureImageUnits = 16;  //顶点着色器中纹理单元的最大数量
const mediump int gl_MaxCombinedTextureImageUnits = 32;//顶点着色器和片元着色器中纹理单元最大数量的总和

6:内建特殊变量
变量 描述
gl_VertexID 输入变量,用于保存顶点的整数索引。highp 精度的整数变量
gl_InstanceID 输入变量,用于保存实例化绘图调用中图元的实例编号。highp 精度的整数变量,通常情况下为 0
gl_Position 输出变量,用于输出顶点作为的裁剪坐标。highp 精度的浮点变量
gl_PointSize 用于指定点精灵的尺寸,单位为像素。highp 精度的浮点变量
gl_FrontFacing 不由顶点着色器直接写入,而是根据顶点着色器生成的位置值和渲染的图元类型生成,它是一个布尔变量

6:顶点着色器矩阵变换

MVP(矩阵变换)
模型--->视图--->投影

二:片元着色器

precision highp float;

varying lowp vec2 vTextCoor;
varying lowp vec4 varyColor;
uniform sampler2D colorMap;

void main()
{

    vec4 weakMask = texture2D(colorMap, vTextCoor);
    vec4 mask = varyColor;
    float alpha = 0.3;
    
    vec4 tempColor = mask * (1.0 - alpha) + weakMask * alpha;
    gl_FragColor = tempColor;
}
//gl_FragColor
2:片元着色器业务

1:计算颜色
2:获取纹理
3:往像素点中填充颜色值【纹理值/颜色值】
总结:它可以用于图片。视频。图形中每个像素的颜色填充【比如给视频添加滤镜,实际上就是将视频中每个图片的像素点颜色填充进行修改】

3:内建常量
const mediump int gl_MaxFragmentInputVectors = 15; //片元着色器出入的最大数量
const mediump int gl_MaxTextureImageUnits = 16;//可用纹理图像单元的最大数量
const mediump int gl_MaxFragmentUniformVectors = 224;//片元着色器可用vec4 uniform变量的最大数量
const mediump int gl_MaxDrawBuffers = 4; //多重渲染目标最大支持数量
4:内建特殊变量
变量 描述
gl_FragCoord 只读变量,这个变量保存片元的窗口相对坐标
gl_ForntFacing 只读变量,这个布尔变量是正面图元时为true否则为false
gl_PointCoord 只读变量,可以在渲染点精灵的时候使用,保存了点精灵的纹理坐标,这个坐标在点精灵光栅化期间自动生成,处于(0,1)区间。
gl_FragDepth 一个只写输出变量,在片元着色器写入时,覆盖片元的固定功能深度值,尽量减少手动实现深度值写入,这个功能需要谨慎使用,因为它可能禁用许多GPU的深度优化,例如:许多GPU都有“Early-z”的功能,在执行片元着色器之前进行深度测试,使用“Early-z”的好处就是不能通过深度测试的片元就不会被着色(从而降低了着色器的调用次数,提高了性能)但是使用gl_FragDepth,就必须禁用该功能,因为GPU在执行着色器之前不知道深度值。
5:内建函数

常用内建函数

函数 说明
dot 点乘
cross 叉乘
texture2D 用于对纹理采样
normalize 对于一个向量规格化
clamp 将一个向量固定在一个最小值和最大值之间
pow 幂函数(对矢量和标量同样有效,下同)
exp,log 指数函数,对数函数
abs 绝对值
sqrt 平方根
max,min 最值
ceil,floor 去大于实参的最小整数,取小于实参的最大整数
sin,cos,tan 正三角函数
asin,acos,atan 反三角函数
length 向量长度
distance 两个向量的距离
matrixCompMult 矩阵对应元素分别相乘
transpose,determinant,inverse 矩阵的转置,行列式,逆
lessThan,greaterThan,equal 小于,大于,等于(对实参向量对应位置的每个分量做大小比较,生成布尔向量)

相关文章

  • OpenGL ES 光照计算(v15)

    一:顶点着色器 2:顶点着色器任务 1:矩阵变换位置2:计算光照公式生成逐顶点颜色3:生成/变换纹理坐标总结:它可...

  • OpenGL ES光照计算

    光照是OpenGL ES里很重要的一部分,下面我们来学习总结一下如何计算不同的光照效果。 光照基础1、环境光照2、...

  • OpenGL ES 􏳆􏰤􏷐􏶾􏲗􏵘光照计算

    光照基础 环境光 漫反射光 镜面光 光照特性 发射光:由物体自身发光 环境光:环境中充分散射的光,而且无法分辨它的...

  • OpenGL ES光照计算

    光照基础 环境光照:利用环境光可以描述一块区域的亮度,通常在场景中,环境光的颜色是一个常量 漫反射光照:光线向所有...

  • OpenGL ES 光照计算

    冯氏光照模型:主要结构由3个元素组成:环境(Ambient)光照、漫反射(Diffuse)光照和镜面(Specul...

  • OPenGL ES光照计算

    现实世界的光照是极其复杂的,而且会受到诸多因素的影响,这是以目前我们所拥有的处理能力无法模拟的。因此OpenGL的...

  • OpenGL ES 光照计算

    光照计算在片元着色器执行,计算每一个像素点的颜色 一、光照计算 1、环境光计算 环境光 = 光源的环境光颜色 * ...

  • OpenGL ES 光照计算

    光照基础 1.环境光照(ambient) 2.漫反射光照(diffuse) 3.镜面光照(specular) 光照...

  • OpenGL ES之旅(四)-- OpenGL ES 光照计算

    光照是个很复杂的话题,尤其是多光源,阴影的计算。在这篇文章中,我会详细介绍不同类型光的性质以及物体的材质属性,以及...

  • OpenGL ES(八)-光照计算

    光照基础 从生理学的角度上讲,眼睛之所以看见各种物体,是因为光线直接或间接的从它们那里到达了眼睛。人类对于光线强弱...

网友评论

      本文标题:OpenGL ES 光照计算(v15)

      本文链接:https://www.haomeiwen.com/subject/vlgnkctx.html