|
311 | 311 | var s = c*offset
|
312 | 312 | for (var i=0; i<offset; i++) {
|
313 | 313 | var inext = (i+1) % offset
|
314 |
| - var cnext = (c+1) % NC |
315 | 314 | var v0 = shape[i]
|
316 | 315 | m.pos.push( v0.x,v0.y,v0.z )
|
317 | 316 |
|
|
355 | 354 | var x=0, z=R2, newx, newz
|
356 | 355 | //var k = 1/Math.cos(dphi/2) // multiply z by k to stretch along the joint; only 1.00121, so approximate by 1
|
357 | 356 | var shape = [] // list of x,z points in the xz plane representing the shape at a joint
|
358 |
| - for (var i=0; i<N; i++) { |
| 357 | + for (var i=0; i<N+1; i++) { |
359 | 358 | //shape.push(vec(x,0,k*z-k*R2))
|
360 | 359 | shape.push(vec(x,0,z-R2)) // oval starts at outer edge of ring
|
361 | 360 | newx = x*cosd + z*sind
|
|
367 | 366 | var y=0, z=0.5, newy, newz
|
368 | 367 | var pts = []
|
369 | 368 | var normals = []
|
370 |
| - for (var c=0; c<NC; c++) { |
| 369 | + for (var c=0; c<NC+1; c++) { |
371 | 370 | var r = vec(0, y*size.y, z*size.z) // vector from origin to outer edge of oval cross section
|
372 | 371 | var n = vec(0, y, z).norm() // outward-going normal to cross section
|
373 | 372 | var center = r.sub(n.multiply(R2)) // center of cross section
|
374 |
| - for (var i=0; i<N; i++) { |
| 373 | + for (var i=0; i<N+1; i++) { |
375 | 374 | var xc = shape[i].x
|
376 | 375 | var zc = shape[i].z
|
377 | 376 | var p = vec(xc,0,0).add(n.multiply(zc)).add(r)
|
|
385 | 384 | }
|
386 | 385 |
|
387 | 386 | var m = new Mesh()
|
388 |
| - for (var c=0; c<NC; c++) { |
389 |
| - for (var i=0; i<N; i++) { |
390 |
| - var inext = (i+1) % N |
| 387 | + var offset = N+1 |
| 388 | + for (var c=0; c<NC+1; c++) { |
| 389 | + var s = c*offset |
| 390 | + for (var i=0; i<offset; i++) { |
| 391 | + var inext = (i+1) % offset |
391 | 392 | var cnext = (c+1) % NC
|
392 |
| - var v0 = pts[c*N+i] |
| 393 | + var v0 = pts[s+i] |
393 | 394 | m.pos.push( v0.x,v0.y,v0.z )
|
394 | 395 |
|
395 |
| - v0 = normals[c*N+i] |
| 396 | + v0 = normals[s+i] |
396 | 397 | m.normal.push( v0.x,v0.y,v0.z )
|
397 | 398 |
|
398 | 399 | m.color.push( 1, 1, 1 )
|
|
402 | 403 |
|
403 | 404 | m.texpos.push( i/N, c/NC )
|
404 | 405 |
|
405 |
| - v0 = pts[c*N+inext].sub(pts[c*N+i]) |
| 406 | + v0 = pts[s+inext].sub(pts[s+i]) |
406 | 407 | m.bumpaxis.push( v0.x,v0.y,v0.z )
|
407 | 408 |
|
408 |
| - m.index.push( N*c+i,N*cnext+i,N*cnext+inext, N*c+i,N*cnext+inext,N*c+inext ) |
| 409 | + m.index.push( s+i,s+i+offset,s+i+offset+1, s+i,s+i+offset+1,s+i+1 ) |
409 | 410 | }
|
| 411 | + m.index.length -= 6 // discard last set of indices |
410 | 412 | }
|
| 413 | + m.index.length -= 6*(offset-1) // discard entire last band of indices |
411 | 414 | return m
|
412 | 415 | },
|
413 | 416 |
|
|
0 commit comments