WebGL空间变换
局部坐标系——》世界坐标系——》相机坐标系——》剪裁坐标系——》规范化设备坐标系——》屏幕坐标系
- 模型变换:world.xyzw = modelMatrix * position.xyzw;
- 视图变换::eye.xyzw = viewMaterix * world.xyzw;
- 投影变换:clip.xyzw = projectMatrix * eye.xyzw;
- 透视除法(w归1化):ndc.xyzw = clip.xyzw / clip.w;
- 视口变换:screen.xy = (ndc.xy + 1.0)/2.0 * viewport.wh;
- screen.z = (zFar - zNear)/2.0 * ndc.z + (zFar + zNear)/2.0;
其中zNear、zFar是通过gl.depthRange指定的从规范化设备坐标哦到屏幕坐标的深度范围映射值,默认为[0.0, 1.0].
gl_FragCoord
含义:片元在帧缓冲画面的相对位置,其中gl_FragCoord.xy是片元的窗口坐标,注意它们的小数部分恒为0.5,[x-0.5, y-0.5]位于[0, viewport.wh]之间,viewport.wh以像素为单位,是通过gl.viewport