我试图找出图形编程环境中的副标准是什么但是很短,我在一个网站上看到,正常算法被计算为正常和切线之间的交叉积(即交叉(正常) ,tangent)),这是计算副法线的正确方法吗?
答案 0 :(得分:5)
只是指出那完全不是binormal的定义。这是Bi Tangent 的定义。对于由曲面形成的“其他”法线,Binormal是完全不同的。
人们需要学习不要重复这个错误(在正常映射的早期由某人制作)。
答案 1 :(得分:2)
根据mathworld,副法线向量定义为cross(tangent,normal)
,其中tangent
和normal
是单位法向量。
请注意,严格来说,当你选择跨产品时,订单很重要。 cross(tangent,normal)
指向与cross(normal,tangent)
相反的方向。根据您的申请,这可能或不重要。只要您的计算在内部一致,它就没关系。
答案 2 :(得分:1)
正态,正切和副法向量形成orthonormal basis来表示tangent space 切线空间(有时称为纹理空间)用于带有normal maps的每像素照明,以模拟表面细节(想象墙壁或高尔夫球)。
切线和副法线矢量表示等效纹理UV,即平行于表面法线的矢量。
从技术上来说 - 因为它们形成了一个标准正交基础,然后binormal = cross(正切,正常)然而在实践中,因为正规映射和切线是从法线贴图中的UV生成的并且可以是平均的在几个顶点上,它们可能不是严格的正交。
有关该主题的几篇好文章,请阅读
http://www.3dkingdoms.com/weekly/weekly.php?a=37
和
http://www.blacksmith-studios.dk/projects/downloads/bumpmapping_using_cg.php
答案 3 :(得分:1)
实际上,不,有时不是。在3d图形中,至少。
如果纹理被拉伸,那么副法线可能不垂直于法线和切线(尽管它应该是垂直的)。
只需使用出口商计算的任何内容即可。如果导出器同时提供切线和副法线,那就很好。如果只有切线,则将binormal计算为与切线和法线的垂直。
获取一个复杂的对象,同时计算切线和二进制,并在使用binormal时比较光照,这是在将binormal作为交叉乘积计算时得到的光照。会有所不同。
无论如何,我认为正确的方法是在导出器中计算切线和副法线,并使用导出器提供的内容。
答案 4 :(得分:1)
是Binormal或Bitangent是顶点的法线和切线之间的交叉。如果这三个中有任何2个向量,则可以计算另一个向量 例如,如果你有一个正切和一个正常(或比特),你可以计算法线 这是一个可以在正常情况下在GLSL中创建binormal和bitangents的示例:
varying vec3 normal;
varying vec4 vpos;
varying vec3 T,B;
void main()
{
gl_TexCoord[0] = gl_MultiTexCoord0;
normal = normalize(gl_NormalMatrix*gl_Normal);
gl_Position =gl_ProjectionMatrix*gl_ModelViewMatrix*gl_Vertex;
vpos = gl_ProjectionMatrix*gl_ModelViewMatrix*gl_Vertex;
T = cross(normal,vec3(-1,0,0));
B = cross(T,normal);
}
虽然它可能无法得到理想的结果,但它有时会让你到达你想要的地方。