WebGL中文网
WebGL中文网是一个专注于WebGL技术学习和开发的社区,提供丰富的WebGL教程、示例代码和资源分享。通过WebGL技术,开发者可以轻松地在浏览器中实现高性能的三维图形渲染。
示例代码
下面是一个简单的WebGL着色器程序,用于渲染一个带有纹理的立方体。代码主要分为两个部分:顶点着色器和片段着色器。
varying vec2 vUv;
void main() {
vUv = uv;
gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
}
uniform sampler2D map; // 纹理采样器
uniform vec3 fogColor; // 雾的颜色
uniform float fogNear; // 近雾距离
uniform float fogFar; // 远雾距离
varying vec2 vUv; // 纹理坐标
void main() {
float depth = gl_FragCoord.z / gl_FragCoord.w; // 计算深度值
float fogFactor = smoothstep( fogNear, fogFar, depth ); // 根据深度计算雾效比例
gl_FragColor = texture2D( map, vUv ); // 从纹理中采样颜色
gl_FragColor.w *= pow( gl_FragCoord.z, 20.0 ); // 增强颜色的亮度
gl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor ); // 根据雾效比例混合雾色和立方体颜色
}
这段代码首先定义了一个varying
变量vUv
,用于存储纹理坐标。在main()
函数中,我们将uv
赋值给vUv
,然后根据投影矩阵、模型视图矩阵和位置信息计算顶点的位置。接着,我们定义了一些uniform变量,如纹理采样器map
、雾的颜色fogColor
、近雾距离fogNear
和远雾距离fogFar
。在片段着色器的main()
函数中,我们根据这些uniform变量来计算雾效、混合雾色和立方体颜色等效果。