我在网上看了很长时间,找不到这个问题的答案。为简单起见,让我们假设我需要完全平滑一组连接面的法线。我想找到一组向量之间的实际几何平分线,忽略重复的法线并保持三角形汤的准确性。基本上,它需要:
我似乎找到的最常见的法线平滑公式是,通过将法线向量相加并除以三来简单地平均它们;例子:
normalize((A + B + C) / 3);
Run Code Online (Sandbox Code Playgroud)
当然除以三是没有用的,这已经代表了人们提出的天真、自以为是的蛮力平均法的氛围;与此有关的问题还在于,即使是三角形汤和平行法线,它也会把时间弄得一团糟。
我似乎发现的另一个评论是保留初始“面”法线,因为它们来自生成它们的常见交叉乘法运算,因为这样它们(有点)相对于三角形的面积加权。在某些情况下,这可能是您想要做的事情,但是我需要纯平分线,因此面积不能影响公式,即使考虑到它,它仍然会被三角汤弄乱。
我看到了一个提到的方法,它说对相邻面之间的角度进行加权,但我似乎无法正确实施该公式 - 要么是那样,要么不是我想要的。然而,这对我来说很难说,因为我找不到一个简洁的解释,而且我的头脑因所有这些浪费的头脑风暴而变得麻木。
有人知道通用公式吗?如果有任何帮助,我正在使用 C++ 和 DirectX11。
编辑:这里有一些类似的问题,描述了一些方法;
还有这篇文章:http : //www.bytehazard.com/articles/vertnorm.html
不幸的是,我尝试的实现不起作用,我找不到关于哪个公式实际上是我需要的一个清晰、简洁的声明。经过反复试验,我终于发现按角度加权是正确的方法,只是我无法正确实现它;因为它现在似乎正在工作,所以我将在下面添加我的实现作为答案。
据我了解,由于Windows XP支持被正式删除,由于不兼容,Chrome和IE在WinXP上无法访问某些网站中使用的最新版本的SSL证书.但是,Firefox显然仍支持Windows XP,可以自由访问这些网站.
我不太明白SSL证书兼容性如何工作,如何在Chrome和IE上完全切换到新的操作系统,但只是使用不同的浏览器时不需要?如果Firefox可以支持,为什么简单的社区开发人员不能为Chrome和IE创建"补丁"?浏览器和操作系统之间的联系是什么?我在哪里划线?
假设我有一个单一for loop功能;是最好的选择return还是break没有机械相关的偏好?还是完全一样?
void function()
{
for (int i; i<foo; i++)
{
if (something)
// return? break?
}
// nothing else after this
}
Run Code Online (Sandbox Code Playgroud)