我正在尝试在opengl中加载md2文件,但我注意到大多数示例程序仅使用
预编译的法线列表。像这样的东西.....
//table of precalculated normals
{ -0.525731f, 0.000000f, 0.850651f },
{ -0.442863f, 0.238856f, 0.864188f },
{ -0.295242f, 0.000000f, 0.955423f },
{ -0.309017f, 0.500000f, 0.809017f },
...
...
好的,听起来有些愚蠢,但是我认为每个模型都是由不同的三角形组成的,那么怎么可能使用一组预编译的法线来渲染所有模型呢?
似乎有些奇怪,任何想法都将不胜感激。
最佳答案
您可以使用预编译的法线表,并使用查找表为特定情况选择一个“足够好”的表。每个三角形都在一个不同的平面上,并且该平面具有法线,而不是三角形本身。
例如,假设我们有一个观点。出于讨论的目的,将这一点扩展到一个领域,这使得在概念上更容易掌握。如果您在y
轴上围绕该球体绘制一个完美的圆,然后每次在x
轴上旋转该圆1度,最终将得到360个圆。如果沿每个圆以1度的间隔进行法线测量,最终将得到360 ** 2
点。从那里开始,法线是从球体中心到球体上该点的 vector ,并且是切线构造的平面指向球体上的法线。如果为该球体上的每个点计算这两个,最终将得到一个预先计算的法线表,几乎可以肯定,对于大多数情况而言,这已经足够了。现在,您只需要为该数据设计一个查找方案(平面->法线)。