首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >quake 2 md2文件格式(理论)

quake 2 md2文件格式(理论)
EN

Stack Overflow用户
提问于 2009-11-19 05:58:06
回答 3查看 2.2K关注 0票数 6

我试图在opengl中加载md2文件,但我注意到大多数示例程序只使用

预编译的法线列表。像这样的东西……

代码语言:javascript
复制
//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 },   
...  
... 

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-11-19 06:05:49

您可以使用预编译法线表,并使用查找表为特定情况选择一个“足够好”的表。每个三角形都在一个不同的平面上,它是有法线的平面,而不是三角形本身。

例如,让我们假设我们有一个点。为了讨论的目的,将这一点扩展到一个范围内,使其在概念上更容易掌握。如果在y轴上围绕球体绘制一个完美的圆,然后每次将该圆在x轴上旋转1度,则最终将得到360个圆。如果你沿着每个圆以1度的间隔取法线,你最终会得到360 ** 2点。从那里开始,您的法线是从球体中心到球体上该点的向量,并且它是与球体上的点相切的平面的法线。如果你为球面上的每个点计算这两个点,你最终得到的是一个预先计算的法线表,对于大多数情况来说,这几乎肯定是足够好的。现在您只需要为该数据设计一个查找方案(plane -> normal)。

票数 9
EN

Stack Overflow用户

发布于 2009-11-19 08:05:20

这个问题已经得到了回答,但我想更多地说明一下。

该表包含相当均匀地覆盖单位球体表面的向量。这组162个向量似乎是subdivided icosahedron的边角。这样做是为了将单位长度的3D矢量有损压缩为索引(8位),请参阅vector quantization。为了存储任意的法向量,您可以在表中搜索最接近的匹配项,并存储此匹配项的索引。有了这个包含162个均匀分布的向量的表,原始向量和近似向量之间的角度预计将低于11°,这对于Quake2引擎来说似乎足够好了。

票数 6
EN

Stack Overflow用户

发布于 2009-11-19 07:53:41

MD2 file format指定每个顶点都有一个“正常索引”,这是对well-known table of normals的查找。我假设这些法线分布在一个球体周围。大概,构建模型的工具为每个顶点选择了这些法线中最合适的。

关于第一个答案:如果您想要一个非常多面的模型(如立方体),那么每个多边形确实有其自己的法线,并且组成该多边形的每个顶点都应该使用相同的法线向量。但是,如果需要平滑着色(如躯干),多边形中的每个顶点通常具有不同的法线向量。这允许照明在多边形中变化,这在逐顶点和逐像素照明方案中都很有用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1759397

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档