You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GLSL 1.20中ftransform()与指定矩阵运算表达式功能是否等价?

Minecraft着色器中ftransform()与自定义矩阵计算的功能对比

在学习Minecraft着色器时接触到ftransform()函数,顶点着色器(.vsh)中的使用示例如下:

gl_Position = ftransform(); 
TexCoords = gl_MultiTexCoord0.st;

GLSL 1.20的官方文档未提供该函数的实现细节,这里明确回答:上述代码与下面这段代码功能完全不一致。

对比代码:

gl_Position = mat3(gbufferModelViewInverse) * (gl_NormalMatrix * gl_Normal); 
TexCoords = gl_MultiTexCoord0.st;

核心差异说明

  • ftransform()的本质是完成标准顶点变换流水线:将模型空间的顶点gl_Vertex,依次通过gl_ModelViewMatrix(模型转视图空间)和gl_ProjectionMatrix(视图转裁剪空间)变换,最终得到裁剪空间位置赋值给gl_Position,这是顶点着色器中确定顶点屏幕位置的标准操作。
  • 第二段代码的逻辑是法线空间转换:先用gl_NormalMatrix(gl_ModelViewMatrix的逆转置)把模型空间法线gl_Normal转到视图空间,再通过gbufferModelViewInverse的3x3矩阵部分转回到模型空间,最终得到的是模型空间的法线向量,完全不是顶点的裁剪空间位置。把这个结果赋值给gl_Position会导致顶点位置完全错误,渲染出的画面必然异常。

内容的提问来源于stack exchange,提问作者Colluk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 14:35:13