1.数据类型

GLSL特性与C/C++类似,包括它的数据类型。GLSL有三种基本数据类型:float,int和bool,以及有这些数据类型组成的数组和结构体。GLSL不支持指针。同时,GLSL将向量和矩阵作为基本数据类型。向量类型包括由上述三种基本数据类型构成的二维,三维和四维向量,矩阵类型包括浮点型的2X2,3X3和4X4的方阵。如,浮点型3三维向量类型为vec3,整型四维向量类型为ivec4,而3X3的矩阵为mat3。

vec3 v;            //声明三位浮点型向量v
mat4 m;            //声明四维浮点型方阵m
v[1]=3.0;          //给向量v的第二个元素赋值
m[2][3]=2.0;       //给方阵的第三行、第四列赋值

除了用索引,还可以使用选择运算符来使用向量。选择运算符时对向量各个元素(最多4个)约定俗成的名称。用小写拉丁字母表示。表示顶点位置可以用x、y、z、w;表示颜色可以用r、g、b、a;表示纹理可以用s、t、r、g。可以任选,相同等效。如对于向量v,v[0]、v.r、v.x、v.s都指向量v的第一个元素。

vec4 v1=vec4(1.0, 2.0, 3.0, 4.0);        //声明初始化四维浮点型向量v1vec4 v2;
v2.xy=v1.yz;                              //将v1的第二个和第三个元素复制给v2的第一个和第二个元素v2.z=2.0;                                 //给v2的第三个元素赋值
v2.xy=v1.yx;                              //将v1的头两个元素互换,再复制给v2的头两个元素中 ???

2.限定符

GLSL由4种限定符。

const:被标记变量不可更改

attribute:全局变量,该变量对于某一顶点不可更改,但不同的顶点可以有不同取值。该变量用作从OpenGL应用程序向顶点着色器中传参数,因此该限定符只能作用于顶点着色器。

uniform:全局变量,该变量对于一个图元(primitive)不可更改。图元指的是应用程序中的一个完整几何模型,如:圆,多边形,球体;其次也可以指离散的像素实体,如一幅图。uniform对于不同图元可以取不同的值。同样由OpenGL传参。

varying:定义着色器中的变量,由顶点着色器向片段着色器中传递数据。

3.运算符和数学函数

GLSL支持标准运算符,而且这些运算符也支持向量和矩阵。

注意:矩阵乘法不支持交换律。

4.流经着色器

弱国用户不使用自定义着色器,OpenGL会使用默认的着色器,实现基本渲染功能。但用户也可以自己编写一个与最小着色器有相同功能的着色器实现默认渲染功能。但是,一旦用户自己定义了着色器,就必须保证它的完整性。比如,如果定义了着色器修改顶点的颜色,那么就还必须完成顶点的模型视图变换和投影变换。

这样的最小着色器称为流经着色器,意为数据不做任何修改下流过着色器。

流经顶点着色器

void main(){//option1 gl_Position=gl_ProjectionMatrix*gl_ModelViewMatrix*gl_Vertex;//option2 gl_Position=gl_ModelViewProjectionMatrix*gl_Vertex;//option3 gl_Position=ftransform();
}

当前顶点的坐标被保存在gl_Position中。

流经片段着色器

void main(){gl_FragColor=gl_FrontColor;
}

以上表示保留当前模型颜色。gl_FragColor是O喷GL内建变量,表示当前片段的颜色。gl_FrontColor保存了由应用程序或顶点着色器生成的颜色。

5.着色器对象

着色器程序一般都保存在单独的文本中,通过读取文本编译获得shader对象。在程序末尾或不再使用时,可以使用函数glDeleteShader()删除。

6.程序对象

在使用着色器之前,需要建立程序对象,然后将着色器附着给程序对象。

Gluint p;
p=glCreateProgram();
glAttachShader(p,v);
glAttachShader(p,f);
glLinkProgram(p);
glUseProgram(p);

使用完成后可以使用glDeleteProgram删除程序对象。

整体流程如图:

GPGPU基础(一):一些基本概念相关推荐

  1. (转)OpenLayers3基础教程——OL3基本概念

    http://blog.csdn.net/gisshixisheng/article/details/46756275 OpenLayers3基础教程--OL3基本概念 从本节开始,我会陆陆续续的更新 ...

  2. Java基础之面向对象的概念 继承---组合----枚举类

    Java基础之面向对象的概念 继承---组合----枚举类 本章作为面向对象概念的最后一篇,但是作为一名java程序员在面向对象的这条路上还很长. 一.继承与组合简介 继承是实现类重用的重要手段,但是 ...

  3. Kafka教程(一)基础入门:基本概念、安装部署、运维监控、命令行使用

    Kafka教程(一)基础入门 1.基本概念 背景 领英->Apache 分布式.消息发布订阅系统 角色 存储系统 消息系统 流处理平台-Kafka Streaming 特点 高吞吐.低延迟 cg ...

  4. 光盘属于计算机软件,计算机基础知识光盘的概念

    因为软盘的容量太小,所以用得越来越少了,近几年用得比较多的是光盘.平时我们用的音乐CD.VCD影碟都是光盘,电脑上用的软件光盘和它们外表看起来是一样的,而且CD和VCD都可以在电脑上使用. 现在一般的 ...

  5. GIS基础简介:基本概念、互联网坐标系、WebGIS实操

    GIS基础简介:基本概念.互联网坐标系.WebGIS实操 01 | GIS基础知识-GIS概念 1.GIS是什么: 1)随着时代的发展我们几乎每天都能够与GIS接触.比如手机上的百度地图或者高德地图, ...

  6. 七天入门统计力学-第1天 基础知识及基本概念

    七天掌握物理基础课统计力学是不可能的,但是由于工作需要,以及方便其他相关课程的学习,在七天之内至少可以对统计力学大的体系有一个把握,并且能够体会出其中的重点和难点.这样的"预习"性 ...

  7. 密码基础知识——密码的概念与作用

    密码基础知识--密码的概念与作用 密码的概念与作用 密码的概念 密码的重要作用 密码的功能 密码应用技术框架 密码应用中的安全性问题 密码应用安全性评估的基本原理 信息安全管理标准 PDCA 管理循环 ...

  8. python基础 python函数 函数概念 函数的多种参数 多种调用参数 装包 解包 函数代码块 函数的返回值

    python基础 python函数 函数概念 函数的多种参数 多种调用参数 装包 解包 函数代码块 函数的返回值 一 .函数概念 函数是根据需要,将代码打包为代码块, 每一个代码块就可以封装为一个函数 ...

  9. GPGPU基础(二):GPGPU需要用到的OpenGL概念

    在计算机图形学中,纹理映射是实现复杂表面效果的高效方法,即以较小的计算量就可以实现较为逼真的模芯效果.在GPGPU中,纹理映射也是一个至关重要的概念.由图形API实现经典GPGPU的原理可以总结为:用 ...

最新文章

  1. Android架构组件LiveData+ViewModel
  2. 类型、值和变量(一)
  3. Python编程基础:第八节 判断语句If Statements
  4. 【测试】SAP 委外加工收货BAPI Demo
  5. vue v-model 简单使用
  6. luogu P1330 封锁阳光大学
  7. 外显子和基因组基本概念(一)
  8. 结束十年科学争论,张辰宇团队阐明食物miRNA被胃吸收的分子机制,miRNA跨界调控再添力证...
  9. Linux显示中文【原创】
  10. Python中带else子句的for循环执行过程
  11. 微软silverlight视频教程
  12. C#程序打包安装部署之创建快捷方式
  13. TypeError: unhashable type: ‘numpy.ndarray‘
  14. 【车间调度】基于matlab遗传算法求解多目标流水车间调度问题【含Matlab源码 443期】
  15. 卡巴斯基安全部队2014,越来越像VISTA了
  16. 最新2019年dnf辅助制作视频教程
  17. CES这个会下腰的中国机器人火了,大型仿人机器人市场迎来“头号玩家”
  18. gcc -Wall -pedantic -ansi(转载)
  19. AC-DMIS 5.3自动测量平面(自定义触测点、批量测量)
  20. 华中科技大学计算机网络教材,华中科技大学计算机网络复习资料.ppt

热门文章

  1. Java MyShopping管理系统 > 购物结算+管理系统
  2. Ps经典实例教程3000例
  3. 红米手机H5布局压扁
  4. SEDA源码解读(二)
  5. MySQL数据库web客户端管理工具软件
  6. 数据库系统---分布式数据库系统
  7. 数据可视化技能之组合框完成动态图表
  8. 基于android的资源文件管理器
  9. Vue项目中常见问题(55)提交订单、获取订单号、展示支付信息
  10. 【Python数据类型展示】