【发布时间】:2018-04-21 14:32:48
【问题描述】:
我正在尝试从网格的细分计算法线贴图,有 2 个网格,一个包含四边形和三角形的 UV 展开基础网格,以及一个仅包含四边形的细分网格。
假设我有一个四边形,其中包含对象空间和 UV 空间中所有顶点的坐标(四边形不平坦),四边形的面法线和一个像素及其在 UV 空间中的位置。
我可以计算给定四边形的 TBN 矩阵并将颜色写入像素,如果可以,那么四边形是否不同?
我问这个是因为我找不到任何计算四边形的 TBN 矩阵的例子,只有三角形?
【问题讨论】:
-
我不确定是否可以为一般四边形计算一致的切线空间。在blender source code 和documentation 中有一点解释,但它们将四边形拆分为三角形进行计算。问题是,必须在整个四边形上插入一致的切线框架,这意味着它必须是连续的。但据我了解,情况并非如此。
-
为了完整性:现代 OpenGL 不再支持四边形。如果您不是绝对受限于古代版本,请使用三角形网格。
-
我认为 tbn 是通过使用 2 点之间的 deltaUV 和 deltaPos 求解方程来计算的。对于您的四边形,您有 3 个可用点。我建议避免像搅拌机那样为非平面四边形选择对角的点。
-
在openGL中,四边形必须是共面的: 四个顶点应该是共面的;不这样做可能会导致不确定的结果。四边形通常被光栅化为一对三角形。这不是 GL 规范定义的,但它是允许的。由于顶点/几何着色器输出在 2 个生成的三角形上的插值方式,这可能会导致一些伪影。 (khronos.org/opengl/wiki/Primitive)
-
我将使用另一个 3'rd 网格,它是细分网格的三角版本,来计算良好的法线,而不是进行不精确的计算。
标签: c++ opengl graphics 3d geometry