基本数据类型(包括float, int bool)和C语言一样,就不介绍了
向量类型数据结构初始化,遵循下面规则:
如果向量的构造函数里只有一个标量值,那么这个标量将用于该向量所有的字段如果构造函数是标量和向量的混合体,那么这个向量各字段值从左到右依次取,如果是多个标量的话,标量个数至少要有向量的维数那么多。举例如下:vec4 myVec4 = vec4(1.0); // myVec4 = {1.0, 1.0, 1.0, 1.0} vec3 myVec3 = vec3(1.0, 0.0, 0.5); // myVec3 = {1.0, 0.0, 0.5} vec3 temp = vec3(myVec3); // temp = myVec3 vec2 myVec2 = vec2(myVec3); // myVec2 = {myVec3.x, myVec3.y} myVec4 = vec4(myVec2, temp, 0.0); // myVec4 = {myVec2.x, myVec2.y, // temp, 0.0 }
矩阵初始化基本规则如下:
如果只有一个标量,那么会初始化为一个对角矩阵,对角线上变量的值为该标量;可以由几个向量初始化一个矩阵,如mat2可以由2个vec2初始化可以由多个标量初始化,列为主序可以由标量和向量混合方式初始化,列为主序举例如下:
mat3 myMat3 = mat3(1.0, 0.0, 0.0, // First column 0.0, 1.0, 0.0, // Second column 0.0, 1.0, 1.0); // Third column
向量元素可以通过“.”操作,或者“[]”下标操作符来访问,当用“.”操作时,后面可以跟x,y,z,w,或者r,g,b,a,或者s,t,r,q,可以同时跟好几个,来表示一个子向量,如下:
vec3 myVec3 = vec3(0.0, 1.0, 2.0); // myVec3 = {0.0, 1.0, 2.0} vec3 temp; temp = myVec3.xyz; // temp = {0.0, 1.0, 2.0} temp = myVec3.xxx; // temp = {0.0, 0.0, 0.0} temp = myVec3.zyx; // temp = {2.0, 1.0, 0.0}
可以用下标操作[],类似于C语言数组。
矩阵被认为是几个列向量的集合,可以用下标操作[],来访问某一个列向量,然后用向量操作符访问各字段,如下:
mat4 myMat4 = mat4(1.0); // Initialize diagonal to 1.0 (identity) vec4 col0 = myMat4[0]; // Get col0 vector out of the matrix float m1_1 = myMat4[1][1]; // Get element at [1][1] in matrix float m2_2 = myMat4[2].z; // Get element at [2][2] in matrix
注意:下标操作不支持变量索引。
基本数据结构都可以定义为一个常量,类似C语言,前面加一个const. 必须在声明时初始化,类似于java中的final。举例如下:
const float zero = 0.0; const float pi = 3.14159; const vec4 red = vec4(1.0, 0.0, 0.0, 1.0); const mat4 identity = mat4(1.0);