地震2 md2文件格式(理论)

Dr *_*Deo 6 c c++ opengl

我试图在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 },   
...  
... 
Run Code Online (Sandbox Code Playgroud)

好吧这可能听起来很愚蠢,但我认为每个模型都是由不同的三角形组成,那么你怎么可能使用一组预编译法线来渲染所有模型呢?这看起来很奇怪,任何想法都会受到赞赏.

Mat*_*ley 9

您可以使用预编译的法线表,并使用查找表来选择对于特定情况"足够好"的表.每个三角形都在一个不同的平面上,而那个平面有一个法线,而不是三角形本身.

例如,让我们想象一下我们有一个观点.为了讨论的目的,将该点扩展为一个球体,使其在概念上更容易掌握.如果您在y轴上围绕该球体绘制一个完美的圆,那么x每次将该圆旋转轴1度,最终会得到360个圆.如果沿着每个圆圈以1度的间隔取正常值,你最终360 ** 2得分.从那里,你正常的是从球体对球体点中心的载体,它是一个正常的构造相切的球面点的平面.你到底是什么了,如果你计算这两个对这一领域的每一点是法线预先计算表,几乎可以肯定是在大多数情况下足够了.现在您只需要为该数据设计查找方案(平面 - >正常).


sel*_*tze 6

它已经得到了回答,但我想对此有所了解.

该表包含非常均匀地覆盖单位球体表面的向量.似乎162个向量的集合是细分的 二十面体的角落.这样做是为了将单位长度的3D矢量有损压缩到索引(8比特),参见矢量量化.对于存储任意法向量,您可以在表中搜索最接近的匹配,并存储该匹配的索引.使用这个162个分布均匀的矢量表,原始矢量和近似矢量之间的角度预计低于11°,这似乎对Quake2引擎来说足够好.