From a9f43b83b9ac50b5eea047fa0c2359f79ef9c2a3 Mon Sep 17 00:00:00 2001 From: WestLangley Date: Thu, 26 Dec 2019 19:44:12 -0500 Subject: [PATCH] Improve readability of computeTangents() --- examples/js/utils/BufferGeometryUtils.js | 40 +++++------------------ examples/jsm/utils/BufferGeometryUtils.js | 40 +++++------------------ 2 files changed, 18 insertions(+), 62 deletions(-) diff --git a/examples/js/utils/BufferGeometryUtils.js b/examples/js/utils/BufferGeometryUtils.js index 7e9e861a8b9a91..e44309a182b454 100644 --- a/examples/js/utils/BufferGeometryUtils.js +++ b/examples/js/utils/BufferGeometryUtils.js @@ -67,42 +67,20 @@ THREE.BufferGeometryUtils = { uvB.fromArray( uvs, b * 2 ); uvC.fromArray( uvs, c * 2 ); - var x1 = vB.x - vA.x; - var x2 = vC.x - vA.x; + vB.sub( vA ); + vC.sub( vA ); - var y1 = vB.y - vA.y; - var y2 = vC.y - vA.y; + uvB.sub( uvA ); + uvC.sub( uvA ); - var z1 = vB.z - vA.z; - var z2 = vC.z - vA.z; + var r = 1.0 / ( uvB.x * uvC.y - uvC.x * uvB.y ); - var s1 = uvB.x - uvA.x; - var s2 = uvC.x - uvA.x; + // silently ignore degenerate uv triangles having coincident or colinear vertices - var t1 = uvB.y - uvA.y; - var t2 = uvC.y - uvA.y; + if ( ! isFinite( r ) ) return; - var r = 1.0 / ( s1 * t2 - s2 * t1 ); - - sdir.set( - ( t2 * x1 - t1 * x2 ) * r, - ( t2 * y1 - t1 * y2 ) * r, - ( t2 * z1 - t1 * z2 ) * r - ); - - tdir.set( - ( s1 * x2 - s2 * x1 ) * r, - ( s1 * y2 - s2 * y1 ) * r, - ( s1 * z2 - s2 * z1 ) * r - ); - - // silently ignore degenerate uvs/triangles that yield NaN/Infinite intermediary values - if ( ! ( isFinite( sdir.x ) && isFinite( sdir.y ) && isFinite( sdir.z ) && - isFinite( tdir.x ) && isFinite( tdir.y ) && isFinite( tdir.z ) ) ) { - - return; - - } + sdir.copy( vB ).multiplyScalar( uvC.y ).addScaledVector( vC, - uvB.y ).multiplyScalar( r ); + tdir.copy( vC ).multiplyScalar( uvB.x ).addScaledVector( vB, - uvC.x ).multiplyScalar( r ); tan1[ a ].add( sdir ); tan1[ b ].add( sdir ); diff --git a/examples/jsm/utils/BufferGeometryUtils.js b/examples/jsm/utils/BufferGeometryUtils.js index bdf3e661630ff1..474b2a31b1265f 100644 --- a/examples/jsm/utils/BufferGeometryUtils.js +++ b/examples/jsm/utils/BufferGeometryUtils.js @@ -79,42 +79,20 @@ var BufferGeometryUtils = { uvB.fromArray( uvs, b * 2 ); uvC.fromArray( uvs, c * 2 ); - var x1 = vB.x - vA.x; - var x2 = vC.x - vA.x; + vB.sub( vA ); + vC.sub( vA ); - var y1 = vB.y - vA.y; - var y2 = vC.y - vA.y; + uvB.sub( uvA ); + uvC.sub( uvA ); - var z1 = vB.z - vA.z; - var z2 = vC.z - vA.z; + var r = 1.0 / ( uvB.x * uvC.y - uvC.x * uvB.y ); - var s1 = uvB.x - uvA.x; - var s2 = uvC.x - uvA.x; + // silently ignore degenerate uv triangles having coincident or colinear vertices - var t1 = uvB.y - uvA.y; - var t2 = uvC.y - uvA.y; + if ( ! isFinite( r ) ) return; - var r = 1.0 / ( s1 * t2 - s2 * t1 ); - - sdir.set( - ( t2 * x1 - t1 * x2 ) * r, - ( t2 * y1 - t1 * y2 ) * r, - ( t2 * z1 - t1 * z2 ) * r - ); - - tdir.set( - ( s1 * x2 - s2 * x1 ) * r, - ( s1 * y2 - s2 * y1 ) * r, - ( s1 * z2 - s2 * z1 ) * r - ); - - // silently ignore degenerate uvs/triangles that yield NaN/Infinite intermediary values - if ( ! ( isFinite( sdir.x ) && isFinite( sdir.y ) && isFinite( sdir.z ) && - isFinite( tdir.x ) && isFinite( tdir.y ) && isFinite( tdir.z ) ) ) { - - return; - - } + sdir.copy( vB ).multiplyScalar( uvC.y ).addScaledVector( vC, - uvB.y ).multiplyScalar( r ); + tdir.copy( vC ).multiplyScalar( uvB.x ).addScaledVector( vB, - uvC.x ).multiplyScalar( r ); tan1[ a ].add( sdir ); tan1[ b ].add( sdir );