通常如何存储普通数据?

时间:2014-09-15 14:54:02

标签: opengl mesh lighting normals

这是一个非常基本的问题。我现在正在学习3D图形和光照,我想知道正常数据是如何(通常)存储的。

将此数据保留为任何外部模型的一部分是否合乎规范?您加载到程序中的文件,或者每次加载新模型时从顶点数据重新计算正常数据? 或两种方法都有优势,有时会出于不同的原因使用它们?

3 个答案:

答案 0 :(得分:2)

这与图形一样,取决于。

如果您有一个简单的模型,重新计算法线应该不是问题。那么存储它们基本上就是缓存。

但是,如果使用逐像素照明,法线会在普通(凹凸等)贴图中按像素存储。在这种情况下,它们通常不能在程序上生成(它们是从具有更高多边形数量的模型生成的)。

答案 1 :(得分:1)

opengl在发送到GPU进行处理时允许每个顶点有几个属性,最常用的是位置,法线和纹理映射

所有模型字段中最基本的(obj文件)允许选择是否包含数据。但对于大多数更复杂的模型,法线不是标准的,需要存储在模型文件中

答案 2 :(得分:1)

在一般情况下,这不仅仅是性能考虑因素。法线是模型的一部分,不能丢弃并从顶点位置重新生成。

画出在建模程序中构建形状的典型案例。描述软件形状的内部数据很可能由分析表面组成,例如,样条曲面。将形状导出为基于顶点的格式时,分析曲面将近似为三角形网格。网格的顶点将被写出作为顶点位置,以及定义顶点如何形成网格的连通性信息。将为每个顶点计算顶点位置处分析曲面的法线,并将其与顶点位置一起写出。

如果你有一个没有法线的顶点网格(例如,因为你从未导出法线,或者你丢弃它们),你仍然可以计算表面法线。这通常通过平均与每个顶点相邻的所有面的面法线来完成,可能作为考虑面部的面积或角度的加权平均值。但无论如何计算,结果都是原始分析表面法线的近似

使用原始分析曲面中的精确法线和使用从三角形网格重建的近似法线之间的差异在渲染时非常明显。这在很大程度上取决于曲面细分的精细程度以及使用的照明模型。但在大多数情况下,重建法线不如原始模型的法线好,并且如果使用原始法线,渲染表面看起来会更平滑/更清晰。