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变量来计算雾效、混合雾色和立方体颜色等效果。