javascript - Three.js 病态切线与病态 VertexTangentsHelper

标签 javascript three.js

我注意到,当我在 THREE.js 中的各种几何体上启用“vertexTangentsHelper”时,我得到的切线形状不正确。

切线计算是否错误(我怀疑它们是基于我的某些着色器输出),或者“vertexTangentsHelper”是否有缺陷?

据我了解,顶点的切向量应该沿着“uv”贴图的“u”方向指向,并垂直于该顶点的法线和双切线。我在下面发布了一些屏幕截图来说明我的问题:

correct tangents

上图展示了使用“THREE.PlaneGeometry”创建的网格上显示的正确切线。网格点的所有切线均沿同一方向。 (网格尺寸为 40 x 40,有 4 个高度段和 4 个宽度段。切线长 10 个单位。)

incorrect tangents

上图说明了使用“THREE.BoxGeometry”创建的网格上显示的不正确切线。沿边缘的切线未与其相关面的切线对齐。 (网格尺寸为 40 x 40 x 40,每个面有 4 个高度段和 4 个宽度段。切线长 10 个单位。)

什么可以解释这种不一致?问题是在“computeTangents”代码中还是在“VertexTangentsHelper”代码中?还是还有什么我没有考虑到的?我使用的是 Three.js re70。

最佳答案

THREE.VertexTangentsHelper没有任何问题.

要计算单个顶点的切向量,Geometry.computeTangents()对共享该顶点的每个三 Angular 形计算的切向量进行平均。

最简单的BoxGeometry有 8 个顶点,但有 12 个面。应用于 BoxGeometry 时它能正常工作的唯一方法如果盒子每个 Angular 的顶点都是重复的,而不是共享的,就会出现这种情况。

三.js r.70

关于javascript - Three.js 病态切线与病态 VertexTangentsHelper,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28373189/

相关文章:

javascript - Unity - 我的空闲动画不会循环

javascript - 从 Three.js json 文件中删除点

javascript - 在远程主机上导入所有模块时的包裹构建问题

javascript - FB.Canvas.setAutoGrow() 不工作并创建高度变化的无限循环

javascript - Google 脚本 - 将 Gmail 中的数据获取到表格中

javascript - 自定义着色器 - Three.js

javascript - 使用 three.js 循环浏览 Material onclick

javascript - VIVE 耳机上的 THREE.js(Steam 中的 JS/浏览器/WebGL)

javascript - 如何在 Alexa Skills 中使用特定于 session 的变量?

javascript - WebStorm 会将 '.' 解析为 './index.js',但不会解析 './'