位置: 编程技术 - 正文
推荐整理分享GLSL语言内置变量(glsl编译),希望有所帮助,仅作参考,欢迎阅读内容。
文章相关热门搜索词:glsl语言教程,glsl文件,glsl语言教程,glsl内置函数,glsl内置函数,glsl内置函数,glsl语言开发工具,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; // 法向量变换到视空间矩阵
uniform mat4 gl_TextureMatrix[gl_MatTextureCoords]; // 各纹理变换矩阵
// 普通缩放因子
uniform float gl_NormalScale;
// 窗口坐标深度范围
struct gl_DepthRangeParameters
{
float near;
float far;
float diff; // far-near
};
uniform gl_DepthRangeParameters gl_DepthRange;
// 裁剪平面
uniform vec4 gl_ClipPlane[gl_MaxClipPlanes];
// 点属性
struct gl_PointParameters
{
float size;
float sizeMin;
float sizeMax;
float fadeThresholdSize;
float distanceConstantAttenuation;
float distanceLinearAttenuation;
float distanceQuadraticAttenuation;
};
uniform gl_PointParameters gl_Point;
// 材质
struct gl_MaterialParameters
{
vec4 emission; // 自身光照Ecm
vec4 ambient; // 环境光吸收系数Acm
vec4 diffuse; // 漫反射吸收系数Dcm
vec4 specular; // 镜面反射吸收系数Scm
float shininess; // Srm
};
uniform gl_MaterialParameters gl_FrontMaterial; // 正面材质
uniform gl_MaterialParameters gl_BackMaterial; // 反面材质
// 光源性质,参数性质就不解释了,和OpenGL的三种光源性质是一样的
struct gl_LightSourceParameters
{
vec4 ambient; // Acii
vec4 diffuse; // Dcii
vec4 specular; // Scii
vec4 position; // Ppii
vec4 halfVector; // Hi
vec3 spotDirection; // Sdli
float spotExponent; // Srli
float spotCutoff; // Crli
float spotCosCutoff; // cos(Crli)
float constantAttenuation; // K0
float linearAttenuation; // K1
float quadraticAttenuation; // K2
};
uniform gl_LightSourceParameters gl_LightSource[gl_MaxLights];
struct gl_LightModelParameters
{
vec4 ambient; // Acs
};
uniform gl_LightModelParameters gl_LightModel;
// 光照和材质的派生状态
struct gl_LightModelProducts
{
vec4 sceneColor; // EcmAcm*Acs
};
uniform gl_LightModelProducts gl_FrontLightModelProduct;
uniform gl_LightModelProducts gl_BackLightModelProduct;
struct gl_LightProducts
{
vec4 ambient; // Acm * Acli
vec4 diffuse; // Dcm * Dcli
vec4 specular; // Scm * Scli
};
uniform gl_LightProducts gl_FrontLightProduct[gl_MaxLights];
uniform gl_LightProducts gl_BackLightProduct[gl_MaxLights];
// 纹理环境和生成
unifrom vec4 gl_TextureEnvColor[gl_MaxTextureImageUnits];
unifrom vec4 gl_EyePlaneS[gl_MaxTextureCoords];
unifrom vec4 gl_EyePlaneT[gl_MaxTextureCoords];
unifrom vec4 gl_EyePlaneR[gl_MaxTextureCoords];
unifrom vec4 gl_EyePlaneQ[gl_MaxTextureCoords];
unifrom vec4 gl_ObjectPlaneS[gl_MaxTextureCoords];
unifrom vec4 gl_ObjectPlaneT[gl_MaxTextureCoords];
unifrom vec4 gl_ObjectPlaneR[gl_MaxTextureCoords];
unifrom vec4 gl_ObjectPlaneQ[gl_MaxTextureCoords];
// 雾参数
struct gl_FogParameters
{
vec4 color;
float density;
float start;
float end;
float scale; // 1/(end-start)
};
uniform gl_FogParameters gl_Fog;
易变变量——易变变量只能在顶点shader和片元shader间传递,这期间实际上经过了一个光栅化的过程。内置的易变变量比较少,如下:
varying vec4 gl_Color;
varying vec4 gl_SecondaryColor;
varying vec4 gl_TexCoord[gl_MaxTextureCoords];
varying float gl_FogFragCoord;
熟悉图形管线的话可以自己描绘出这些易变变量是如何在顶点和片元程序间进行传递的。
内置常量——内置常量描述了显卡的渲染能力,依据各个显卡而定,这里就不一一列举了,如果想要查询的话可以用OpenGL的glGet函数获取MAX/MIN一族的常量,这些和内置变量的是一致的。
图形学实验二:画个火柴人 由于接下来的实验要实现火柴人的动作,所以实验要求要采用分层设计,如下图所示:这样转动hip(臀部),整个火柴人就整体转动。比如如果要动左
openGL光照(illumination) 在复习图形学illumination时,偶然看到网上将光照的博客,觉得挺好,就转了下~链接:
OpenGl学习之坐标变换(上) 坐标变换是深入理解三维世界的基础,非常重要。学习这部分首先要清楚几个概念:视点变换、模型变换、投影变换、视口变换。在现实世界中,所有
标签: glsl编译
本文链接地址:https://www.jiuchutong.com/biancheng/373193.html 转载请保留说明!友情链接: 武汉网站建设