代码之家  ›  专栏  ›  技术社区  ›  Robomoo

通常如何存储正常数据?

  •  3
  • Robomoo  · 技术社区  · 11 年前

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

    将此数据作为加载到程序中的任何外部“模型”文件的一部分保留,还是每次加载新模型时从顶点数据重新计算正常数据? 或者,这两种方法都有优点,而且它们有时被用于不同的原因?

    3 回复  |  直到 11 年前
        1
  •  2
  •   Bartek Banachewicz    11 年前

    这取决于图形。

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

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

        2
  •  1
  •   ratchet freak    11 年前

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

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

        3
  •  1
  •   Reto Koradi    11 年前

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

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

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

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