`

GLSL语言学习笔记

阅读更多

1、什么是渲染管线?

    渲染管线也称为渲染流水线,是显示芯片内部处理图形信号相互独立的的并行处理单元。

 

2、管线的大致工作流程

    顶点着色器中处理所有定点的位置、颜色,传递给下一阶段组装成精灵、线条和三角形,并根据视截体的可视范围来进行裁剪(抛弃不可见的元素),最后由片段着色器进行光栅化处理,光栅化的片段数量会远远高于顶点的数量。

 

3、着色器的数据类型

    ⑴:顶点着色器

        attribute //用户自定义的,包含每个定点的属性数据,如定点位置、定点颜色等

        uniform //用户自定义的,服务于所有定点的一个统一的值,如变换矩阵、光源位置等

        varying //用户自定义的,用于向片段着色器输出数据

        gl_Position //用户自定义的,用户接受顶点着色器的运算输出结果

        

attribute float size;
attribute vec3 customColor;
attribute float time;
uniform float globalTime; 

varying vec3 vColor;
varying float fAlpha;

void main() {
	
	vColor = customColor;
		
	vec3 pos = position;
		
	float animTime = min(1.4, max(1.0, globalTime - time));
		
	vec3 animated = vec3( pos.x * animTime, pos.y * animTime, pos.z * animTime );
		
	vec4 mvPosition = modelViewMatrix * vec4( animated, 1.0 );
		
	fAlpha = 1.0; + 
		
	gl_PointSize = size * ( 300.0 / length( mvPosition.xyz ) );
	
	gl_Position = projectionMatrix * mvPosition;
		
}

 

 

 

 

     ⑵:片段着色器

        varying//用户自定义的,用于接收由片段着色器发送的数据

        uniform//用户自定义的,服务于所有片段的一个恒定的值,如颜色等

        sampler//用户自定义的,用户纹理操作的一种特殊类型

        gl_FragColor//系统内置变量,用于接收片段着色器的输出结果

        precision mediump float;//精度限定符,声明于片段着色器的起始位置

        

precision mediump float;    // lowp, mediump, highp 
uniform vec3 color;
uniform sampler2D texture;
	
varying vec3 vColor;
varying float fAlpha;
	
void main() {
	
	float depth = gl_FragCoord.z / gl_FragCoord.w;
	float near = 100.0;
	float far = 400.0;
	float fog = 0.0 + smoothstep( near, far, depth );
	
	vec4 outColor = texture2D( texture, gl_PointCoord );
	if ( outColor.a < 0.24 ) discard; 
	
	gl_FragColor = vec4( color * vColor, fAlpha ); 
	gl_FragColor = gl_FragColor * outColor; 
	gl_FragColor = mix( gl_FragColor, vec4( vec3(0.0,0.0,0.0), gl_FragColor.w ), fog );
	
}

 

        

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics