* Adds geometry from the renderer's immediate mode into the builder's * combined geometry.
(geometry, shapeMode, { validateFaces = false } = {})
| 125 | * combined geometry. |
| 126 | */ |
| 127 | addImmediate(geometry, shapeMode, { validateFaces = false } = {}) { |
| 128 | const faces = []; |
| 129 | |
| 130 | if (this.renderer.states.fillColor) { |
| 131 | if ( |
| 132 | shapeMode === constants.TRIANGLE_STRIP || |
| 133 | shapeMode === constants.QUAD_STRIP |
| 134 | ) { |
| 135 | for (let i = 2; i < geometry.vertices.length; i++) { |
| 136 | if (i % 2 === 0) { |
| 137 | faces.push([i, i - 1, i - 2]); |
| 138 | } else { |
| 139 | faces.push([i, i - 2, i - 1]); |
| 140 | } |
| 141 | } |
| 142 | } else if (shapeMode === constants.TRIANGLE_FAN) { |
| 143 | for (let i = 2; i < geometry.vertices.length; i++) { |
| 144 | faces.push([0, i - 1, i]); |
| 145 | } |
| 146 | } else if (shapeMode === constants.TRIANGLES) { |
| 147 | for (let i = 0; i < geometry.vertices.length; i += 3) { |
| 148 | if ( |
| 149 | !validateFaces || |
| 150 | geometry.vertices[i].copy().sub(geometry.vertices[i+1]) |
| 151 | .cross(geometry.vertices[i].copy().sub(geometry.vertices[i+2])) |
| 152 | .magSq() > 0 |
| 153 | ) { |
| 154 | faces.push([i, i + 1, i + 2]); |
| 155 | } |
| 156 | } |
| 157 | } |
| 158 | } |
| 159 | this.addGeometry(Object.assign({}, geometry, { faces })); |
| 160 | } |
| 161 | |
| 162 | /** |
| 163 | * Adds geometry from the renderer's retained mode into the builder's |