正常矢量是归一化切向量和归一化法向量的交叉乘积,反之亦然?
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
答案 0 :(得分:1)
在Right-Handed Coordinate System中(另见Right-hand rule)
Binormal Vector由下式计算:
B = N x T
在Left-Handed Coordinate System
中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/'