(t)
| 130 | } |
| 131 | |
| 132 | // Per-triangle face normal (unit) + flag for deleted tris |
| 133 | const triNrmX = new Float32Array(triCount); |
| 134 | const triNrmY = new Float32Array(triCount); |
| 135 | const triNrmZ = new Float32Array(triCount); |
| 136 | const triDeleted = new Uint8Array(triCount); |
| 137 | const newParentId = new Int32Array(faceParentId); |
| 138 | |
| 139 | function recomputeFaceNormal(t) { |
| 140 | const a = corners[t*3], b = corners[t*3+1], c = corners[t*3+2]; |
| 141 | const ax = vertX[a], ay = vertY[a], az = vertZ[a]; |
| 142 | const e1x = vertX[b]-ax, e1y = vertY[b]-ay, e1z = vertZ[b]-az; |
| 143 | const e2x = vertX[c]-ax, e2y = vertY[c]-ay, e2z = vertZ[c]-az; |
| 144 | const nx = e1y*e2z - e1z*e2y; |
| 145 | const ny = e1z*e2x - e1x*e2z; |
| 146 | const nz = e1x*e2y - e1y*e2x; |
| 147 | const len = Math.sqrt(nx*nx + ny*ny + nz*nz); |
| 148 | if (len > 0) { |
| 149 | triNrmX[t] = nx/len; triNrmY[t] = ny/len; triNrmZ[t] = nz/len; |
no outgoing calls
no test coverage detected