上一节采用 分形算法生成地形的高度值, 接着我们需要生成每个顶点的法向量。
three.js 的PlaneGeometry 自带有法向量, 法向量分为两种 即 平面法向量 和 平面每个定点法向量。
因此一个n*n 块组成的平面, 有n*n 个平面法向量, 有4*n*n 个顶点法向量。
这两种法向量区别是, 如果材质的shading属性是THREE.SmoothShading 则采用顶点法向量, 如果不是则采用平面法向量, 平面法向量 导致整个面上的法向量处处相同,所以光照可能不够真实。
平面几何体的顶点数组是(n+1)*(n+1)的长度, 因此其法向量数组长度也应该是(n+1)*(n+1) 才合适, 而如果遍历面 将会产生4*n*n个向量, 如何修正这个问题呢?
平面几何体在绘制的过程中, 由sortFacesByMaterial 函数处理生成几何体组。
首先根据材质对几何体分组,
材质编号_当前材质几何体组编号 作为几何体组的标识。
接着将相应的平面块 压入到对应的几何体组中。
控制每个几何体组的定点个数 小于 65535.
为几何体组编全局id号, 并将几何体组压入到 几何体组的List中
geometry.geometryGroups----->map形式访问几何体组
geometry.geometryGroupList-----> 数组形式访问几何体组
首先构建顶点 法向量 tangent, 颜色, 纹理坐标, 面, 线 等buffer。
接着初始化这些buffers。
接