Learning WebGL

该博客介绍WebGL Lesson 8,涉及深度缓冲、透明度和混合内容。阐述了WebGL渲染过程,包括运行顶点着色器确定位置、线性插值确定需绘制的片段、运行片段着色器确定颜色并写入帧缓冲区。还给出详细代码查看地址及Canvas和WebGL的规范链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

WebGL Lesson 8 – the depth buffer, transparency and blending

 

WebGL rendering process:

  1. Runs the vertex shader on all of the vertices to work out where everything is.
  2. Linearly interpolates between the vertices, which tells it which fragments (which for the moment you can treat as being the same as pixels) need to be painted.
  3. For each fragment, run the fragment shader on it to work out its colour.
  4. Write it to the frame buffer(color buffer).

 

For detail,  check the source code at http://learningwebgl.com/lessons/lesson08/index.html.

Canvas SPEC

http://www.w3.org/TR/html5/the-canvas-element.html

WebGL SPEC

http://www.khronos.org/registry/webgl/specs/latest/

 

转载于:https://www.cnblogs.com/jalenwang/archive/2012/09/05/webgl-blending.html

### WebGL 2.0 的特性 WebGL 2.0 是基于 OpenGL ES 3.0 构建的标准,提供了许多增强的功能和性能改进。以下是其主要特性: - **着色器支持**:从 WebGL 2.0 开始,OpenGL 支持可编程着色器方法,允许开发者通过 GLSL(OpenGL Shading Language)编写顶点和片段着色器程序[^3]。 - **多重渲染目标 (MRT)**:支持在一个绘制调用中写入多个颜色缓冲区,这对于实现复杂的效果非常有用。 - **纹理压缩扩展**:引入了更多的纹理格式和压缩技术,从而减少内存占用并提高加载速度。 - **查询对象**:可以通过 `WebGLQuery` 对象测量绘图命令的时间消耗或其他统计信息[^1]。 ### 学习资源与教程 对于初学者来说,可以从基础概念入手逐步深入学习 WebGL 技术。以下是一些推荐的学习资料: - **官方文档**:MDN 提供了详尽的 [WebGL 2.0 文档](https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API),涵盖了 API 使用说明以及最佳实践。 - **在线课程**:Khan Academy 和 WebGL Fundamentals 都是非常受欢迎的选择,适合新手快速掌握基础知识[^4]。 - **书籍阅读**:《Learning WebGL》系列书籍由 Tony Parisi 编写,全面介绍了如何使用 WebGL 进行开发。 ### 示例代码展示 下面给出一段简单的 WebGL 2.0 绘制三角形的例子: ```javascript // 获取 WebGL 上下文 const canvas = document.getElementById('canvas'); const gl = canvas.getContext('webgl2'); if (!gl) { console.error('WebGL 2.0 is not supported by your browser.'); } // 定义顶点数据 const vertices = new Float32Array([ 0.0, 1.0, -1.0, -1.0, 1.0, -1.0]); // 创建缓冲区并将数据传递给 GPU const vertexBuffer = gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer); gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW); // 设置着色器源码 const vertexShaderSource = ` attribute vec2 a_position; void main() { gl_Position = vec4(a_position, 0.0, 1.0); }`; const fragmentShaderSource = ` precision mediump float; uniform vec4 u_color; void main() { gl_FragColor = u_color; }`; function createShader(type, source) { const shader = gl.createShader(type); gl.shaderSource(shader, source); gl.compileShader(shader); if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) { throw 'Error compiling shader: ' + gl.getShaderInfoLog(shader); } return shader; } // 初始化着色器程序 const program = gl.createProgram(); const vertexShader = createShader(gl.VERTEX_SHADER, vertexShaderSource); const fragmentShader = createShader(gl.FRAGMENT_SHADER, fragmentShaderSource); gl.attachShader(program, vertexShader); gl.attachShader(program, fragmentShader); gl.linkProgram(program); if (!gl.getProgramParameter(program, gl.LINK_STATUS)) { throw 'Error linking program.'; } gl.useProgram(program); // 关联属性变量到缓冲区 const positionAttributeLocation = gl.getAttribLocation(program, 'a_position'); gl.enableVertexAttribArray(positionAttributeLocation); gl.vertexAttribPointer( positionAttributeLocation, 2, gl.FLOAT, false, 0, 0); // 渲染场景 gl.clearColor(0.75, 0.85, 0.9, 1.0); // 背景颜色设置为浅蓝色 gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); gl.drawArrays(gl.TRIANGLES, 0, 3); ``` 此代码展示了如何初始化 WebGL 2.0 环境、定义几何形状并通过自定义着色器呈现它们。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值