上一节采用 分形算法生成地形的高度值, 接着我们需要生成每个顶点的法向量。
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。
接着在setMeshBuffers 中为这些buffer赋值, 根据每个独立的面都有将(n+1)*(n+1)个定点值写入到 4*n*n的顶点数组中去,
用户自己定义的属性,如果按照点绑

本文介绍如何在three.js中为分形算法生成的地形计算顶点法向量,以实现更真实的光照效果。讲解了PlaneGeometry的法向量类型及其在平滑着色与非平滑着色下的应用。通过分析引擎处理平面几何体的过程,提出构建(n+1)*(n+1)大小的shader属性,并计算每个顶点的法向量。最后,展示了法向量在世界坐标系中的转换以及在光照计算中的作用。
最低0.47元/天 解锁文章
557

被折叠的 条评论
为什么被折叠?



