大家好,接下来将为大家介绍OpenGL ES 3.x 着色器语言:shader language。

1、指定版本

OpenGL ES的顶点着色器和片段着色器的第一行声明GLSL的版本:(如果没有指定,则默认为 1.0版本)。

#version 300 es // 使用3.0版本
  • 1.

2、变量类型

类型 说明
void 空类型,即不返回任何
bool 布尔类型 true,false
int 带符号的整数 signed integer
float 带符号的浮点数 floating scalar
vec2, vec3, vec4 n维浮点数向量 n-component floating point vector
bvec2, bvec3, bvec4 n维布尔向量 Boolean vector
ivec2, ivec3, ivec4 n维整数向量 signed integer vector
mat2, mat3, mat4 2×2, 3×3, 4×4 浮点数矩阵 float matrix
sampler2D 2D纹理 a 2D texture
samplerCube 盒纹理 cube mapped texture

3、变量声明、赋值

OpenGL ES 不支持指针类型。

在 OpenGL ES 中,对于类型转换有很严格的限制,即变量只允许使用相同类型的其它变量进行赋值或其它操作。

标量类型示例:

float mFloat = 1.0;
float mFloat2 = 1;     // error: invalid type conversion
bool mBool = true;
int mInt = 0;
int mInt2 = 0.0;       // error: invalid type conversion
mFloat = float(mBool); // 正确,bool -> float
mFloat = float(mInt);  // 正确,int -> float
mBool = bool(mInt);    // 正确,int -> bool
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

向量类型示例:

vec4 mVec4 = vec4(1.0);             // mVec4 = {1.0, 1.0, 1.0, 1.0}
vec3 mVec3 = vec3(1.0, 0.0, 0.5);   // mVec3 = {1.0, 0.0, 0.5}
vec3 temp = vec3(mVec3);            // temp = mVec3
vec2 mVec2 = vec2(mVec3);           // mVec2 = {mVec3.x, mVec3.y}
mVec4 = vec4(mVec2, temp);          // mVec4 = {mVec2.x, mVec2.y, temp.x, temp.y}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

矩阵类型示例:

矩阵类型的构造函数则更加灵活,规则如下:
1) 如果只提供了一个标量(基本数据类型),则会用这个值填充矩阵的对角线,比如 mat4(1.0) 将会构造一个 4×4 的单位矩阵
2) 可以使用多个向量构造,比如 mat2 可以使用两个 vec2 构造
3) 可以使用多个标量构造

需要注意的是,和平时的写法不同,OpenGL 中的矩阵以列优先的形式排序:

mat3 myMat3 = mat3(1.0, 0.0, 0.0,  // 第一列
                   0.0, 1.0, 0.0,  // 第二列
                   0.0, 1.0, 1.0); // 第三列
  • 1.
  • 2.
  • 3.

4、向量和矩阵分量示例

根据组成 vector 的成员数量,可以通过 {x, y, z, w},{r, g, b, a}, 或 {s, t, p, q} 来访问它的成员,x、r、s 永远指向第一个成员,使用不同的名字仅仅只是为了方便,但不能混合使用,即不能用 “.xgr” 这样的形式。使用示例:

vec3 mVec3 = vec3(0.0, 1.0, 2.0); // mVec3 = {0.0, 1.0, 2.0}
vec3 temp;
temp = mVec3.xyz; // temp = {0.0, 1.0, 2.0}
temp = mVec3.xxx; // temp = {0.0, 0.0, 0.0}
temp = mVec3.zyx; // temp = {2.0, 1.0, 0.0}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

也可以使用 “[]” 操作符,需要注意的是,矩阵是以列排序的:

mat4 mMat4 = mat4(1.0);      // 初始化对角线的值为 1.0 (单位矩阵)
vec4 col0 = mMat4[0];        // 从矩阵中获取第 0 列向量
float m1_1 = mMat4[1][1];    // 从矩阵中获取元素 [1][1]
float m2_2 = mMat4[2].z;     // 从矩阵中获取元素 [2][2]
  • 1.
  • 2.
  • 3.
  • 4.

5、常量示例

常量必须在声明的时候初始化:

const float zero = 0.0;
const float pi = 3.1415926;
const vec4 red = vec4(1.0, 0.0, 0.0, 1.0);
const mat4 identity = mat4(1.0);
const bool mBool = true;
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

6、结构体示例

struct mixStruct {
      vec4 color;
      float start;
      float end;
      int fault;
  } mMix;  //定义了一个mixStruct的结构体类型和mMix的结构体变量
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
mMix = mixStruct(vec4(0.0, 1.0, 0.0, 1.0), // color
                               0.5,        // start
                               2.0,        // end
                               1.0);       // fault
  • 1.
  • 2.
  • 3.
  • 4.

7、数组示例

数组声明及初始化:

float floatArray[4];
vec4 vecArray[2];

float a[4] = float[](1.0, 2.0, 3.0, 4.0);
float b[4] = float[4](1.0, 2.0, 3.0, 4.0);
vec2 c[2] = vec2[2](vec2(1.0), vec2(1.0));
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,请不要用于商业用途!
3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员!
8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载
声明如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性

GLB下载网(glbxz.com)gltf文件下载-glb格式下载-模型制作 » android开发 使用 OpenGL ES 加载gltf 文件

常见问题FAQ

免费下载或者VIP会员专享资源能否直接商用?
本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
提示下载要提取码
百度网盘提取码都是gltf。
分享过期和重复下载怎么办
分享过期请使用备份下载,重复下载是不另扣费的,请放心下载。
模型和平台不兼容怎么办
可以用网站在线编辑功能,修改模型属性,大小,方向,坐标,中心,透明等问题,然后重新导出既可https://glbxz.com/38636.html
  • 8834会员数(个)
  • 16731资源数(个)
  • 32本周更新(个)
  • 39237 今日更新(个)
  • 1251稳定运行(天)

提供最优质的资源集合

加入VIP
开通VIP 享更多特权,建议使用 QQ 登录
×