您的位置:首页 > 编程语言 > Java开发

3D开发学习-着色语言 Shading Language基础(二) 特殊内建变量

2017-02-15 17:11 381 查看
着色器代码的开发中会用到很多的变量,其中大部分可能是由开发人员根据需求自定义的,但是,着色器语言也提供了一些用来满足特定需求的内建变量.内建变量不需要声明就可以直接使用,一般用来实现渲染管线固定功能部分和自定义顶点或片元着色器之间的信息交互.

内建变量根据信息传递方向可以分为两类:

1.输入变量:负责将渲染管线中固定功能部分产生的信息传递进着色器.

2.输出变量:负责将着色器产生的信息传递给渲染管线中固定功能.

第一:顶点着色器中的内建变量.

顶点着色器中的内建变量主要是输出变量,包括gl_Position , gl_PointSize等.在顶点着色器中应该根据需要对这些内建变量赋值,以便由渲染管线中的片元与光栅化等后续固定功能阶段进行进一步处理.

gl_Position : 顶点着色器从应用程序中获得原始的顶点位置数据,这些原始的顶点数据在顶点着色器中的经过平移,旋转,缩放等数学变换后,生成新的顶点位置.新的顶点位置通过在顶点着色器中写入gl_Position 传递到渲染管线的后继阶段继续处理.gl_Position 的类型是vec4,输入的请保持类型一致.

gl_PointSize : 顶点着色器中可以计算一个点的大小,单位是像素,并将其赋值给gl_PointSize , 标量是float类型,传递给渲染管线.默认值1. gl_PointSize的值只有采用了点绘制方式才有意义.

第二:片元着色器内建变量.

片元着色器内建变量分为输入变量以及输出变量两种.

1.内建输入变量:

片元着色器中的内建输入变量主要有gl_FragCoord以及gl_FrontFacing.这两个变量都是只读的.

gl_FragCoord是vec4类型,含有当前片元相对于窗口位置的坐标x,y,z和1/w . 

gl_FrontFacing是一个布尔型的内建变量,通过读取该内建变量可以判断正在处理的片元是否属于在光栅化阶段生成此片元的对应图元的正面.正面为true.生成的图元中,默认值为true.

2.内建输出变量:

片元着色器中的内建输出变量主要有gl_fragColor和gl_FragData , 

gl_fragColor是vec4类型,用来由片元着色器写入计算完成的片元颜色值,此颜色值将锄地给渲染管线的后继阶段处理.

gl_FragData 内建变量也是vec4类型,写入时要给出下标.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐