首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Three.js法线地图阴影计算照明在切线空间?

Three.js法线地图阴影计算照明在切线空间?
EN

Stack Overflow用户
提问于 2013-07-21 15:34:52
回答 1查看 897关注 0票数 3

我只是想熟悉一下Three.js,发现了一些奇怪的东西,我无法完全理解它。

在我使用过的大多数其他系统(非基于web的系统)中,普通地图的照明是在切线空间中计算的。但在Three.js中,情况就有点不同了。例如,如果您在第2643行考虑WebGLShaders.js中的代码:

代码语言:javascript
复制
"mat3 tsb = mat3( normalize( vTangent ), normalize( vBinormal ), normalize( vNormal ) );",
"vec3 finalNormal = tsb * normalTex;",

建立了正切空间的正交基矩阵,并将其转化为正态分布空间。到目前一切尚好。

问题是..。这似乎是他们把向量转换成切线空间的唯一地方?

因此,它们计算的光方向矢量不转化为切线空间,眼向矢量也不是?这两种方法随后都用于计算2692-2694线的照明:

代码语言:javascript
复制
"vec3 pointHalfVector = normalize( pointVector + viewPosition );",

"float pointDotNormalHalf = max( dot( normal, pointHalfVector ), 0.0 );",

"float pointSpecularWeight = specularTex.r * max( pow( pointDotNormalHalf, uShininess ), 0.0 );",

这是一种与我所习惯的计算镜面略有不同的方法。所以我想知道有没有人能解释他们在做什么?我想知道这个着色器是如何工作的,这样我就可以在输出three.js时正确地转换统一设置。这是我的终极目标。

EN

回答 1

Stack Overflow用户

发布于 2013-07-21 16:41:59

不是的。照明计算是在相机空间进行的。

tsb矩阵可能称为tbn矩阵,它将法线从正切空间转换为摄像机空间。

您可以自己看到:如果normalMap是平坦的,那么normalTex将是( 0, 0, 1 ),当您通过tbn矩阵对其进行转换时,您将得到规范化的vNormal

three.js r.59号

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17773973

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档