GLSL语言内置变量

本文介绍了GLSL语言中的内置变量,包括顶点属性(attribute)、一致变量(uniform)、易变变量(varying)和常量(const)。顶点属性如顶点颜色、法线、坐标等;一致变量用于传递数据,如矩阵状态、光源参数、材质参数等;易变变量在顶点和片元着色器间传递,如颜色、纹理坐标;常量则描述了显卡的渲染能力。
摘要由CSDN通过智能技术生成

GLSL语言内置的变量,包括内置的顶点属性(attribute)、一致变量(uniform)、易变变量(varying)以及常量(const),一方面加深印象,另一方面今天的文章可以为以后的编程做查询之用。

顶点属性——指顶点的信息,OpenGL据此绘制各个图元,对于传统的顶点属性包括坐标、纹理坐标、颜色等GLSL都会设置一个内置变量与之对应,以便在需要时可以在顶点或片元着色器中直接引用,这也体现了GLSL与HLSL的一个最大的不同,HLSL里顶点的属性是通过语义来定义的,而GLSL充分考虑了OpenGL是个状态机这一事实,将顶点属性设为一个状态变量。GLSL中内置的顶点属性包括以下几个:

// 顶点属性

attribute vec4 gl_Color;              // 顶点颜色

attribute vec4 gl_SecondaryColor;     // 辅助顶点颜色

attribute vec3 gl_Normal;             // 顶点法线

attribute vec4 gl_Vertex;             // 顶点物体空间坐标(未变换)

attribute vec4 gl_MultiTexCoord[0-N]; // 顶点纹理坐标(N = gl_MaxTextureCoords)

attribute float gl_FogCoord;          // 顶点雾坐标

值得一提的是用户可以调用glVertexAttrib设置自己的顶点属性(当然个数是有限制的)

一致变量——就是常说的Uniform,这是用户向GLSL传递自己数据的最常用方法,比如光源位置等等。之所以称为一致变量,是为了与易变变量相区别。不同于顶点属性在每个顶点有其自己的值,也不同于易变变量由顶点程序向片元程序插值传递,一致变量在一个图元的绘制过程中是不会改变的,而且可以在顶点shader和片元shader间共享。这部分变量主要用来描述OpenGL的状态,可以看作OpenGL状态机的复制。GLSL内置的一致变量包括:

// 矩阵状态

uniform mat4 gl_ModelViewMatrix;                // 模型视图变换矩阵

uniform mat4 gl_ProjectMatrix;                  // 投影矩阵

uniform mat4 gl_ModelViewProjectMatrix;         // 模型视图投影变换矩阵(ftransform())

uniform mat3 gl_NormalMatrix;                   // 法向量变换到视空间矩阵

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值