b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

OpenGL着色语言GLSL基础

电脑杂谈  发布时间:2019-06-09 21:33:10  来源:网络整理

opengl着色语言 pdf_opengl编程指南第七版pdf_opengl教程pdf

修饰符 描述 const 常量值必须在声明是初始化。它是只读的不可修改的。 attribute表示只读的顶点数据,只用在顶点着色器中。数据来自当前的顶点状态或者顶点数组。它必须是全局范围声明的,不能再函数内部。一个attribute可以是浮点数类型的标量,向量,或者矩阵。不可以是数组或则结构体uniform一致变量。在着色器执行期间一致变量的值是不变的。与const常量不同的是,这个值在编译时期是未知的是由着色器进行声明。varying顶点着色器的输出。例如颜色或者纹理坐标,(插值后的数据)作为片段着色器的只读输入数据。必须是全局范围声明的全局变量。可以是浮点数类型的标量,向量,矩阵。不能是数组或者结构体。centorid varying 在没有多重采样的情况下,与varying是一样的意思。在多重采样时,centoridvarying在光栅化的图形内部进行求值而不是在片段中心的固定位置求值。 invariant(不变量)用于表示顶点着色器的输出和任何匹配片段着色器的输入,在不同的着色器中计算产生的值必须是一致的。所有的数据流和控制流,写入一个invariant变量的是一致的。编译器为了保证结果是完全一致的,需要放弃那些可能会导致不一致值的潜在的优化。除非必要,不要使用这个修饰符。在多通道渲染中避免z-fighting可能会使用到。in用在函数的参数中,表示这个参数是输入的,在函数中改变这个值,并不会影响对调用的函数产生副作用。(相当于C语言的传值)opengl着色语言 pdf,这个是函数参数默认的修饰符out 用在函数的参数中,表示该参数是输出参数,值是会改变的。 inout 用在函数的参数,表示这个参数即是输入参数也是输出参数。内置变量 内置变量可以与固定函数功能进行交互。在使用前不需要声明。顶点着色器可用的内置变量如下表:

这些不同的记法用于顶点,颜色,纹理坐标。在前面教程中的顶点渲染器,我们以顶点坐标为输入,以相同的顶点坐标为输出,没有进行任何的修改。假设我们已经启用和设置好了顶点,颜色,纹理坐标数组。

名称 类型 描述 gl_Color ve 包含主颜色的插值只读输入 gl_SecondaryColor ve包含辅助颜色的插值只读输入 gl_TexCoord[] ve 包含纹理坐标数组的插值只读输入 gl_FogFragCoordfloat 包含雾坐标的插值只读输入 gl_FragCoord ve 只读输入,窗口的x,y,z和1/wgl_FrontFacing bool 只读输入,如果是窗口正面图元的一部分,则这个值为true gl_PointCoord vec2点精灵的二维空间坐标范围在(0.0, 0.0)到(1.0, 1.0)之间,仅用于点图元和点精灵开启的情况下。gl_FragData[] ve 使用glDrawBuffers输出的数据数组。不能与gl_FragColor结合使用。gl_FragColor ve 输出的颜色用于随后的像素操作 gl_FragDepth float输出的深度用于随后的像素操作,如果这个值没有被写,则使用固定功能管线的深度值代替 表达式 操作符GLSL语言的操作符与C语言相似。如下表(操作符的优先级从高到低排列)

操作符 描述 () 用于表达式组合,函数调用,构造 [] 数组下标,向量或矩阵的选择器 . 结构体和向量的成员选择 ++ --前缀或后缀的自增自减操作符 + – ! 一元操作符,表示正 负 逻辑非 * / 乘 除操作符 + - 二元操作符 表示加 减操作<> <= >= == != 小于,大于,小于等于, 大于等于,等于,不等于 判断符 &&|| ^^ 逻辑与 ,或, 异或 ?: 条件判断符 = += –= *= /= 赋值操作符 , 表示序列 像 求地址的& 和解引用的 * 操作符不再GLSL中出现,因为GLSL不能直接操作地址。类型转换操作也是不允许的。 位操作符(&,|,^,~,<<, >> ,&=, |=, ^=, <<=,>>=)是GLSL保留的操作符,将来可能会被使用。还有求模操作(%,%=)也是保留的。

2)内存越界(数组越界,变量类型不一致等) 访问到不属于你的内存区域。1、内存访问越界 、 a) 由于使用错误的下标,导致数组访问越界 b) 搜索字符串时,依靠字符串结束符来判断字符串是否结束,但是字符串没有正常的使用 结束符 c) 使用 strcpy, strcat, sprintf, strcmp, strcasecmp 等字符串操作函数,将目标字符串读/写 爆。这样我们可以看出所有的索引都是属性名,但只有自然数(有最大值)才是索引,一般我们在使用数组的时候不会出现数组越界错误也正是因为此,数组的索引可以不是连续的,访问index不存在的元素的时候返回undefined。

ve myColor, ambient, diffuse[6], specular[6];

myColor = ambient + diffuse[4] + specular[4];

构造函数 构造函数可以用于初始化包含多个成员的变量,包括数组和结构体。构造函数也可以用在表达式中。调用方式如下:

vec3 myNormal = vec3(1.0, 1.0, 1.0);

opengl教程pdf_opengl着色语言 pdf_opengl编程指南第七版pdf

greenTint = myColor + vec3(0.0, 1.0, 0.0);

ive myColor = ive(255);

还可以使用混合标量和向量的方式来构造,只要你的元素足以填满该向量。

ve color = ve(1.0, vec2(0.0, 1.0), 1.0);

vec3 v = vec3(1.0, 10.0, 1.0);

vec3 v1 = vec3(v);

vec2 fv = vec2(5.0, 6.0);

float f = float(fv); //用x值2.5构造,y值被舍弃

对于矩阵,OpenGL中矩阵是列主顺序的。如果只传了一个值,则会构造成对角矩阵,其余的元素为0.

opengl教程pdf_opengl着色语言 pdf_opengl编程指南第七版pdf

mat3 m3 = mat3(1.0);

构造出来的矩阵式:

1.0 0.0 0.0

0.0 1.0 0.0

0.0 0.0 1.0

mat2 matrix1 = mat2(1.0, 0.0, 0.0, 1.0);

mat2 matrix2 = mat2(vec2(1.0, 0.0), vec2(0.0, 1.0));

mat2 matrix3 = mat2(1.0);

以上两步称盘右半测回或下半测回 2、记录与计算(见表3.1) ①盘左(正镜)观测 瞄a,记录 a左= 0°00′36″ 瞄b,记录 b左= 68°42′48″ 上半测回的角值: β左= b左- a左= 68°42′12″ ②盘右(倒镜)观测 瞄b, 记录 b右= 248°42′30″ 瞄a, 记录 a右= 180°00′24″ 下半测回角值: β右= b右- a右= 68°42′06″ ④一测回角值 ③检核 对于dj6经纬仪,上下半测回角度之差应满足: ,否则,应重测。1)盘左(正镜)观测 瞄m,记录 m左= 0°00′36″瞄n,记录 n左= 68°42′48″上半测回的角值:β左= n左- m左= 68°42′12″ ②盘右(倒镜)观测 瞄n, 记录 n右= 248°42′30″瞄m, 记录 m右= 180°00′24″下半测回角值:β右= n右- m右= 68°42′06″ ④一测回角值 ③检核 对于dj6经纬仪,上下半测回角度之差应满足:否则,应重测。图 5 5( 图 5 5 ) 左 上 角 、 右 上 角 、 左 下 角 、 右 下 角 各 有 一 个 子 , 那 么 首 先 要 确 定 它 们 属 于 哪 一 种类 型 。

opengl教程pdf_opengl编程指南第七版pdf_opengl着色语言 pdf

构造函数可以用于标量数据类型的转换。GLSL不支持隐式或显示的转换,只能通过构造函数来转。其中int转为float值是一样的。float转为int则小数部分被丢弃。int或float转为bool,0和0.0转为falseopengl着色语言 pdf,其余的值转为true.bool转为int或float,false值转为0和0.0,true转为1和1.0.

float f = 1.7;

int I = int(f); // I = 1

数组的初始化,可以在构造函数中传入值来初始化数组中对应的每一个值。

ivec2 position[3] = ivec2[3]((0,0), (1,1), (2,2));

ivec2 pos2[3] = ivec2[]((3,3), (2,1), (3,1));

构造函数也可以对结构体进行初始化。其中顺序和类型要一一对应。

struct surface { int index; vec3 color; float rotate; }; surfacemySurface = surface(3, vec3(red, green, blue), 0.5); 成分选择向量中单独的成分可以通过{x,y,z,w},{r,g,b,a}或者{s,t,p,q}的记法来表示。这些不同的记法用于顶点,颜色,纹理坐标。在成分选择中,你不可以混合使用这些记法。其中{s,t,p,q}中的p替换了纹理的r坐标,因为与颜色r重复了。下面是用法举例:

标量数组、向量数组和矩阵数组在内存中按照元素的顺序储存,索引为0的成员储存在最低偏移处。rbegin 返回一个反向迭代器指向向量末尾元素之后 rend 返回一个反向迭代器,指向向量起始元素 reverse 颠倒元素顺序。向量索引:索引格式为:向量1[向量2],返回的结果为向量1中索引为向量2的那些元素,注意元素允许重复。

opengl编程指南第七版pdf_opengl教程pdf_opengl着色语言 pdf

vec3 yxz = myVec.yxz; //调换顺序ve mySSTT = myVec.sstt; //重复其中的值在赋值是,也可以选择你想要的顺序,但是不能重复其中的成分。

ve myColor = {0.0, 1.0, 2.0, 1.0}; myColor.x = -1.0; myColor.yz =vec2(3.0, 5.0); myColor.wx = vec2(1.0, 3.0); myColor.zz = vec2(2.0,3.0); //不合法 我们也可以通过使用下标来访问向量或矩阵中的元素。如果越界那行为将是未定义的。

float myY = myVec[1];

在矩阵中,可以通过一维的下标来获得该列的向量(OpenGL的矩阵是列主顺序的)。二维的小标来获得向量中的元素。

mat3 myMat = mat3(1.0); vec3 myVec = myMat[0]; //获得第一列向量 1.0, 0.0,0.0float f = myMat[0][0]; // 第一列的第一个向量。 控制流 循环与C和C++相似,GLSL语言也提供了for, while,do/while的循环方式。使用continue跳入下一次循环,break结束循环。

for (l = 0; l < numLights; l++) {if (!lightExists[l])continue;color += light[l]; }while (i < num) { sum += color[i]; i++; }do{color += light[lightNum]; lightNum--; }while (lightNum > 0)if/else color = unlitColor;if (numLights > 0) { color =litColor; }else{ color = unlitColor; } discard片段着色器中有一种特殊的控制流成为discard。使用discard会退出片段着色器,不执行后面的片段着色操作。片段也不会写入帧缓冲区。

if (color.a < 0.9)

discard;

调用时输入23和24.5,输入的这2个参数才是真正需要传递给函数的参数,ref int, ref double是告诉alien需要分配空间,调用c函数从栈中获取它的参数,调用结束后将返回结果放到栈中(为了区分返回结果和栈中的其他的值,每个c函数还会返回结果的个数),然后lua函数返回结果值。该参数与 g 代码要相对应如下: 工件坐标系 1 (g54) ---工件原点返回偏移值---参数 1221 工件坐标系 2 (g55) ---工件原点返回偏移值---参数 1222 工件坐标系 3 (g56) ---工件原点返回偏移值---参数 1223 工件坐标系 4 (g57) ---工件原点返回偏移值---参数 1224 工件坐标系 5 (g58) ---工件原点返回偏移值---参数 1225 工件坐标系 6 (g59) ---工件原点返回偏移值---参数 1226 在接通电源和完成了原点返回后,系统自动选择工件坐标系 1 (g54) 。filter()函数实现过滤功能,有两个参数,第一个参数为none或一个函数对象,第二个参数为一个可迭代的对象,当第一个参数为none时,实现将可迭代对象的每一个元素值为false的过滤掉,生成一个仅包含元素值为true的新可迭代对象。

void main(void) { ... }GLSL中的函数,必须是在全局范围定义和声明的。不能在函数定义中声明或定义函数。函数必须有返回类型,参数是可选的。参数的修饰符(in,out, inout, const等)是可选的。


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-104880-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      • 谭峭
        谭峭

        那就让女性无偿服务呀

      • 宋武公司空
        宋武公司空

        我很信赖南方黑芝麻湖

      每日福利
      热点图片
      拼命载入中...