Visual LabINTERACTIVE LEARNING
阶段 1 · 起步入门22 分钟

第一个三角形:完整渲染管线

ShaderModule、RenderPipeline 与 draw()

不使用顶点缓冲区,仅靠 vertex_index 在 WGSL 中生成三角形,走完最小渲染流程。

LEARNING GOALS

先明确本课目标

1

创建 WGSL 着色器模块

2

创建 RenderPipeline

3

理解 draw(3) 如何触发三个顶点调用

MENTAL MODEL · 再建立心智模型

RenderPipeline 是一份提前固定的大配方:顶点阶段如何产生位置,片元阶段如何着色,输出写进什么格式。

MINIMAL EXAMPLE

三个顶点怎样变成屏幕上的三角形?

顶点着色器为每次顶点调用输出裁剪空间位置,光栅化器把三个顶点装配并离散成片元,片元着色器再为每个片元输出颜色。

最小例子wgsl
@vertex
fn vs(@builtin(vertex_index) id: u32)
  -> @builtin(position) vec4f {
  let p = array(vec2f(-0.7, -0.6),
                vec2f( 0.7, -0.6),
                vec2f( 0.0,  0.7));
  return vec4f(p[id], 0.0, 1.0);
}

@fragment
fn fs() -> @location(0) vec4f {
  return vec4f(0.2, 0.9, 0.8, 1.0);
}
  1. draw(3) 触发三次顶点着色器调用,vertex_index 依次为 0、1、2。
  2. position 三个 vec4f 是裁剪空间位置,光栅化器依它们生成三角形覆盖区域。
  3. location(0) 片元返回值写入 Render Pass 的第 0 个颜色附件。

不创建 Vertex Buffer 也能画出三角形,因为位置直接由 vertex_index 在 WGSL 中生成。

本课概念
OPTIONAL · 按需查阅完整术语表与概念边界

遇到陌生术语时再展开,不打断主线实验。

展开⌄
LIVE EXPERIMENT · 先获得反馈

边改边运行

浏览器加载后会激活代码编辑器、独立运行环境与实时输出。

本课挑战

只使用 vertex_index 画出一个矩形,并说明为什么需要 6 个顶点。

DEEP DIVE · 实验之后

回到原理,解释刚才发生了什么

先用结果建立反馈,再按运行流程、核心原理和知识关系逐层深入。

CORE IDEA

核心讲解

01

可编程阶段

顶点着色器至少输出 @builtin(position),片元着色器输出一个或多个颜色目标。光栅化器在两者之间自动生成片元。

02

管线提前验证

WebGPU 把大量状态放进不可变管线,在创建时做验证和编译,换来绘制时更少的隐式工作。

OPTIONAL · 迁移时查阅WebGPU 与 WebGL2 对照

主线实验完成后,再用完整映射处理跨平台或跨 API 迁移。

展开⌄
API COMPARISON

相同的 Vertex → Raster → Fragment,不同的着色器组装与绘制提交方式。

WebGL

分别编译 GLSL 顶点/片元着色器,链接 Program,设置状态后 drawArrays。

WebGPU

WGSL ShaderModule 与固定状态组合为 RenderPipeline,在 RenderPass 中 draw。

RenderPipeline 不只是 WebGLProgram 的改名,它还固定了顶点布局、附件、混合和图元状态。