计算二元向量

时间:2017-11-05 00:39:17

标签: vector shader

正常矢量是归一化切向量和归一化法向量的交叉乘积,反之亦然?

Binormal_vector = cross(normalize(tangent_vector), normalize(normal_vector))

Binormal_vector = cross(normalize(normal_vector), normalize(tangent_vector))

像这样的许多资源(http://mathonline.wikidot.com/method-for-calculating-unit-normal-and-unit-binormal-vectors)将Binormal vector定义为

B = T X N

但是在大​​多数着色器代码中,Binormal向量被定义为

Binormal_vector = cross(normalize(normal_vector), normalize(tangent_vector)) * handedness 

B = N X T

1 个答案:

答案 0 :(得分:1)

Right-Handed Coordinate System中(另见Right-hand rule

right handed TBN

Binormal Vector由下式计算:

B = N x T

Left-Handed Coordinate System

left handed TBN

Binormal Vector由下式计算:

B = T x N


在OpenGL中常用Right-Handed Coordinate System,但这取决于用户选择的规范和定义。


此外,如果系统是镜像的,则它从一个系统变为另一个系统。如果从背面镜像或查看纹理,则可能会发生这种情况。 请注意,在上面的代码中,这是由handedness补偿的,Binormal_vector = cross(normalize(normal_vector), normalize(tangent_vector)) * handedness 是副法向量的“符号”,1.0或-1.0。

DEBUG=False
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATIC_URL = '/static/'