1
1
import * as THREE from 'three' ;
2
2
3
+ export function getBufferIndexSize ( segments , noSkirt ) {
4
+ const triangles = ( segments ) * ( segments ) * 2 + ( noSkirt ? 0 : 4 * segments * 2 ) ;
5
+ return triangles * 3 ;
6
+ }
7
+
3
8
export default function computeBuffers ( params ) {
4
9
// Create output buffers.
5
10
const outBuffers = {
@@ -26,7 +31,7 @@ export default function computeBuffers(params) {
26
31
const computeUvs = [ ] ;
27
32
28
33
const builder = params . builder ;
29
- const nSeg = params . segment || 8 ;
34
+ const nSeg = params . segments ;
30
35
// segments count :
31
36
// Tile : (nSeg + 1) * (nSeg + 1)
32
37
// Skirt : 8 * (nSeg - 1)
@@ -35,8 +40,6 @@ export default function computeBuffers(params) {
35
40
throw new Error ( 'Tile segments count is too big' ) ;
36
41
}
37
42
38
- const triangles = ( nSeg ) * ( nSeg ) * 2 + ( params . disableSkirt ? 0 : 4 * nSeg * 2 ) ;
39
-
40
43
outBuffers . position = new Float32Array ( nVertex * 3 ) ;
41
44
outBuffers . normal = new Float32Array ( nVertex * 3 ) ;
42
45
@@ -46,13 +49,14 @@ export default function computeBuffers(params) {
46
49
}
47
50
48
51
computeUvs [ 0 ] = ( ) => { } ;
52
+ const bufferIndexSize = getBufferIndexSize ( nSeg , params . disableSkirt ) ;
49
53
if ( params . buildIndexAndUv_0 ) {
50
54
if ( nVertex < 2 ** 8 ) {
51
- outBuffers . index = new Uint8Array ( triangles * 3 ) ;
55
+ outBuffers . index = new Uint8Array ( bufferIndexSize ) ;
52
56
} else if ( nVertex < 2 ** 16 ) {
53
- outBuffers . index = new Uint16Array ( triangles * 3 ) ;
57
+ outBuffers . index = new Uint16Array ( bufferIndexSize ) ;
54
58
} else if ( nVertex < 2 ** 32 ) {
55
- outBuffers . index = new Uint32Array ( triangles * 3 ) ;
59
+ outBuffers . index = new Uint32Array ( bufferIndexSize ) ;
56
60
}
57
61
outBuffers . uvs [ 0 ] = new Float32Array ( nVertex * 2 ) ;
58
62
computeUvs [ 0 ] = ( id , u , v ) => {
0 commit comments