glsl是什么就不多说了。这里只介绍一下glsl中一些限定符。

  glsl中包含两类具有定义性质的符号,一类是和c++中定义变量的一样的符号,用来说明存放数据的类型,如float,int,bool。还有一类是的功能类似于c++中的private,protect,public,是用来说明变量被访问的方式,glsl中常用的限定符包含三个,uniform,attribute 以及 varying,称为限定符(还有一个const,就不多说了)。

uniform限定了该变量是随着图元变化而变化的,也就是说在一个图元被光栅化过程中是不会变的。

  attribute限定了该变量是随着顶点变化而变化的,如,一个三角形图元,三个顶点的都可以绑定不同的attribute属性,但是三个顶点只能使用一个uniform属性。

  其中,attribute只能在 vertex shader中使用,而不能在 fragment shader中使用。uniform能在两种类型的shader中使用。但是,着两种限定符修饰的变量都是只读,不可写的。

  varying变量比较特殊了,这个限定符号修饰的变量作用主要是在vertex shader 和 fragment shader 之间进行传输数据的,在vertex shader中是读写都没有问题,但是在fragment  shader中只读不可写。并且,在从vertex shader到 fragment shader之间,要被固定流水线进行插值(个人感觉是在光栅化阶段进行插值的),并且插值方式采用的是透视校正方式完成的(和透视纹理映射一样),而不是线性插值。所以,varying变量不但被vertex shader改变,而且被固定流水线改变。

可以看出来,三种限定符从图元角度来看是越来越精细的,uniform是对整个图元(面片)而言,attribute是对图元(面片)上的几个关键点而言,varying则精细到了图元(面片)中的任何一个点。同时,在glsl中也使用上述三种限定符定义了一些内置的变量,免去了很多麻烦。

这里提一下,在glsl中定义了两个gl_color变量,一个是attribute修饰,只在vertex shader中使用,只读。还有一个是varying修饰的,但是只在fragment shader中使用,所以不冲突,并且varying修饰的gl_color是由gl_frontColor 和gl_backColor自动转变的,而gl_frontColor 和gl_backColor又是由attribut gl_color自动转化的。(http://blog.sina.com.cn/s/blog_41630e7e01008uu6.html)

对于opengl和glsl的交互中,要设定uniform的值,要在调用gluseprogram以后才可以设定,但是在编译链接glsl程序以后就可以开始获得uniform类型变量的地址了。

 

struct gl_LightSourceParameters
{
vec4 ambient;
vec4 diffuse;
vec4 specular;
vec4 position;
...
}; uniform gl_LightSourceParameters gl_LightSource[gl_MaxLights];

上面时glsl中对光源的内置定义,其中,光源的方向是在摄像机坐标系下定义的,如果从世界坐标系到摄像机坐标系转化矩阵的左上角3x3矩阵是正交矩阵,例如使用glulookat设置,则光源的方向已经被opengl归一化了,否则还要手动归一化。

关于GLSL中语法和调用规则的一些记录的更多相关文章

  1. 在Android中使用OpenGL ES开发第(五)节:GLSL基础语法

    一.前期基础储备笔者之前的四篇文综述了Android中使用OpenGL ES绘制基本图形和实现了简单的相机预览,初次接触OpenGL ES开发的读者可能对其中新的概念比较迷惑,尤其是其中的顶点着色器( ...

  2. Struts2中Action对象的set方法和get方法调用规则

    Struts的Action是采用的是多实例多线程设计,而不是像Servlet那样采用单实例多线程设计,因此在struts中,一个请求就对应一个Action对象,个对象之间的数据相互之间互不干扰.没接到 ...

  3. JavaScript中的尾调用优化

    文章来源自:http://www.zhufengpeixun.com/qianduanjishuziliao/javaScriptzhuanti/2017-08-08/768.html JavaScr ...

  4. C++中的默认参数规则

    C++中的默认参数规则 C++的默认参数规则其实是一个非常容易掉坑的规则,尤其是当一个函数拥有多个声明的时候,每个声明的默认参数可以各不相同,在调用时又可能与每个声明都不同:这篇博客稍微列举一下C++ ...

  5. 在C语言中函数及其调用过程

    目录 函数 C语言中的变参函数 函数的本质是什么 内存区域的区分技巧 函数的调用过程 栈帧的概念 调用过程细节 按照约定传参 函数 如果一个函数有声明没实现,那么就会出现链接错误: 以上代码会出现链接 ...

  6. JavaScript 中的尾调用

    尾调用(Tail Call) 尾调用是函数式编程里比较重要的一个概念,它的意思是在函数的执行过程中,如果最后一个动作是一个函数的调用,即这个调用的返回值被当前函数直接返回,则称为尾调用,如下所示: f ...

  7. java中包命名常见规则

    做java的都知道java的包.类.接口.枚举.方法.常量.变量等等模型都有一套约定的命名规则! 学习每一种语言都应该学习对应语法和命名规则,以保持一个良好的编码风格.一来显示自己的专业.二来方便阅读 ...

  8. 驱动:中断【2】中断处理程序、中断上下文中处理延时及一些函数的调用规则(调IIC中断驱动有感)

    中断处理程序.中断上下文中处理延时及一些函数的调用规则(调IIC中断驱动有感)http://blog.csdn.net/samantha_sun/article/details/6790492 1,中 ...

  9. java 中使用ajax调用后台方法注意事项

    java 中使用ajax调用后台方法注意事项,后台方法一定要加@ResponseBody jQuery.validator.addMethod("checkRuleName",fu ...

随机推荐

  1. cobbler装机错误--Failed to create kernel channel,-22

    最近使用cobbler安装GPU的机器遇到了一个错误:Failed to create kernel channel,-22 经过各种搜索发现是英伟达的显卡与centos7的默认显卡驱动冲突导致. 网 ...

  2. POJ2374 Fence Obstacle Course

    题意 Language:Default Fence Obstacle Course Time Limit: 3000MS Memory Limit: 65536K Total Submissions: ...

  3. vue项目之webpack打包静态资源路径不准确

    摘自:https://blog.csdn.net/viewyu12345/article/details/83187815 问题 将打包好的项目部署到服务器,发现报错说图片找不到. 静态资源如js访问 ...

  4. Linux下sniffer实现(转)

    转发网址:https://blog.csdn.net/eqiang8271/article/details/8489769 //Example 1. #include <stdio.h> ...

  5. 掉电脉冲映射串口log和dmesg到文件中的log

    1.echo 1 > /mytest/boot_times 2.systemctl enable i2c_dmesg.service root:/mytest# tree . |-- boot_ ...

  6. minio 集群搭建

      具体实际的取舍可以参考官方文档,我使用的是4 node 4 driver 模式 环境机器说明 192.168.31.2 192.168.31.3 192.168.31.4 192.168.31.5 ...

  7. HP-Mercury SiteScope安装及监控Weblogic操作

    1.Mercury SiteScope简介Mercury SiteScope是一款无代理监测解决方案,可确保分布式IT基础架构——如服务器.操作系统.网络设备.网络服务.应用和应用组件的可用性和性能. ...

  8. windows下php7安装redis扩展

    windows下php7安装redis扩展windows下开发用的wamp集成的环境,想装个php-redis扩展.php_redis.dll下载地址:https://pecl.php.net/pac ...

  9. BZOJ1252:序列终结者

    浅谈\(splay\):https://www.cnblogs.com/AKMer/p/9979592.html 浅谈\(fhq\)_\(treap\):https://www.cnblogs.com ...

  10. CentOS 6.5 下keepalived服务的配置

    CentOS 6.5 下keepalived服务的配置 参考网站: http://zhangxugg-163-com.iteye.com/blog/1665419 http://www.2cto.co ...