|
6039 | 6039 |
|
6040 | 6040 | var envmap_vertex = "#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif\n"; |
6041 | 6041 |
|
6042 | | - var fog_vertex = "#ifdef USE_FOG\n\tvFogPosition = mvPosition.xyz;\n#endif\n"; |
| 6042 | + var fog_vertex = "#ifdef USE_FOG\n\tfogDepth = -mvPosition.z;\n#endif\n"; |
6043 | 6043 |
|
6044 | | - var fog_pars_vertex = "#ifdef USE_FOG\n\tvarying vec3 vFogPosition;\n#endif\n"; |
| 6044 | + var fog_pars_vertex = "#ifdef USE_FOG\n\tvarying float fogDepth;\n#endif\n"; |
6045 | 6045 |
|
6046 | | - var fog_fragment = "#ifdef USE_FOG\n\tvec3 fogPositionAbs = abs( vFogPosition );\n\tfloat fogMaxComponent = max( fogPositionAbs.x, max( fogPositionAbs.y, fogPositionAbs.z ) );\n\tfloat fogDepth = length( vFogPosition / fogMaxComponent ) * fogMaxComponent;\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = whiteCompliment( exp2( - fogDensity * fogDensity * fogDepth * fogDepth * LOG2 ) );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif\n"; |
| 6046 | + var fog_fragment = "#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = whiteCompliment( exp2( - fogDensity * fogDensity * fogDepth * fogDepth * LOG2 ) );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif\n"; |
6047 | 6047 |
|
6048 | | - var fog_pars_fragment = "#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying vec3 vFogPosition;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif\n"; |
| 6048 | + var fog_pars_fragment = "#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float fogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif\n"; |
6049 | 6049 |
|
6050 | 6050 | var gradientmap_pars_fragment = "#ifdef TOON\n\tuniform sampler2D gradientMap;\n\tvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\t\tfloat dotNL = dot( normal, lightDirection );\n\t\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t\t#ifdef USE_GRADIENTMAP\n\t\t\treturn texture2D( gradientMap, coord ).rgb;\n\t\t#else\n\t\t\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n\t\t#endif\n\t}\n#endif\n"; |
6051 | 6051 |
|
|
14071 | 14071 |
|
14072 | 14072 | }; |
14073 | 14073 |
|
| 14074 | + }(), |
| 14075 | + |
| 14076 | + getUV: function () { |
| 14077 | + |
| 14078 | + var barycoord = new Vector3(); |
| 14079 | + |
| 14080 | + return function getUV( point, p1, p2, p3, uv1, uv2, uv3, target ) { |
| 14081 | + |
| 14082 | + this.getBarycoord( point, p1, p2, p3, barycoord ); |
| 14083 | + |
| 14084 | + target.set( 0, 0 ); |
| 14085 | + target.addScaledVector( uv1, barycoord.x ); |
| 14086 | + target.addScaledVector( uv2, barycoord.y ); |
| 14087 | + target.addScaledVector( uv3, barycoord.z ); |
| 14088 | + |
| 14089 | + return target; |
| 14090 | + |
| 14091 | + }; |
| 14092 | + |
14074 | 14093 | }() |
14075 | 14094 |
|
14076 | 14095 | } ); |
|
14173 | 14192 |
|
14174 | 14193 | }, |
14175 | 14194 |
|
| 14195 | + getUV: function ( point, uv1, uv2, uv3, result ) { |
| 14196 | + |
| 14197 | + return Triangle.getUV( point, this.a, this.b, this.c, uv1, uv2, uv3, result ); |
| 14198 | + |
| 14199 | + }, |
| 14200 | + |
14176 | 14201 | intersectsBox: function ( box ) { |
14177 | 14202 |
|
14178 | 14203 | return box.intersectsTriangle( this ); |
|
14415 | 14440 | var uvB = new Vector2(); |
14416 | 14441 | var uvC = new Vector2(); |
14417 | 14442 |
|
14418 | | - var barycoord = new Vector3(); |
14419 | | - |
14420 | 14443 | var intersectionPoint = new Vector3(); |
14421 | 14444 | var intersectionPointWorld = new Vector3(); |
14422 | 14445 |
|
14423 | | - function uvIntersection( point, p1, p2, p3, uv1, uv2, uv3 ) { |
14424 | | - |
14425 | | - Triangle.getBarycoord( point, p1, p2, p3, barycoord ); |
14426 | | - |
14427 | | - uv1.multiplyScalar( barycoord.x ); |
14428 | | - uv2.multiplyScalar( barycoord.y ); |
14429 | | - uv3.multiplyScalar( barycoord.z ); |
14430 | | - |
14431 | | - uv1.add( uv2 ).add( uv3 ); |
14432 | | - |
14433 | | - return uv1.clone(); |
14434 | | - |
14435 | | - } |
14436 | | - |
14437 | 14446 | function checkIntersection( object, material, raycaster, ray, pA, pB, pC, point ) { |
14438 | 14447 |
|
14439 | 14448 | var intersect; |
|
14481 | 14490 | uvB.fromBufferAttribute( uv, b ); |
14482 | 14491 | uvC.fromBufferAttribute( uv, c ); |
14483 | 14492 |
|
14484 | | - intersection.uv = uvIntersection( intersectionPoint, vA, vB, vC, uvA, uvB, uvC ); |
| 14493 | + intersection.uv = Triangle.getUV( intersectionPoint, vA, vB, vC, uvA, uvB, uvC, new Vector2() ); |
14485 | 14494 |
|
14486 | 14495 | } |
14487 | 14496 |
|
|
14723 | 14732 | uvB.copy( uvs_f[ 1 ] ); |
14724 | 14733 | uvC.copy( uvs_f[ 2 ] ); |
14725 | 14734 |
|
14726 | | - intersection.uv = uvIntersection( intersectionPoint, fvA, fvB, fvC, uvA, uvB, uvC ); |
| 14735 | + intersection.uv = Triangle.getUV( intersectionPoint, fvA, fvB, fvC, uvA, uvB, uvC, new Vector2() ); |
14727 | 14736 |
|
14728 | 14737 | } |
14729 | 14738 |
|
|
24982 | 24991 | var vB = new Vector3(); |
24983 | 24992 | var vC = new Vector3(); |
24984 | 24993 |
|
| 24994 | + var uvA = new Vector2(); |
| 24995 | + var uvB = new Vector2(); |
| 24996 | + var uvC = new Vector2(); |
| 24997 | + |
24985 | 24998 | function transformVertex( vertexPosition, mvPosition, center, scale, sin, cos ) { |
24986 | 24999 |
|
24987 | 25000 | // compute position in camera space |
@@ -25030,13 +25043,19 @@ |
25030 | 25043 | transformVertex( vB.set( 0.5, - 0.5, 0 ), mvPosition, center, worldScale, sin, cos ); |
25031 | 25044 | transformVertex( vC.set( 0.5, 0.5, 0 ), mvPosition, center, worldScale, sin, cos ); |
25032 | 25045 |
|
| 25046 | + uvA.set( 0, 0 ); |
| 25047 | + uvB.set( 1, 0 ); |
| 25048 | + uvC.set( 1, 1 ); |
| 25049 | + |
25033 | 25050 | // check first triangle |
25034 | 25051 | var intersect = raycaster.ray.intersectTriangle( vA, vB, vC, false, intersectPoint ); |
25035 | 25052 |
|
25036 | 25053 | if ( intersect === null ) { |
25037 | 25054 |
|
25038 | 25055 | // check second triangle |
25039 | 25056 | transformVertex( vB.set( - 0.5, 0.5, 0 ), mvPosition, center, worldScale, sin, cos ); |
| 25057 | + uvB.set( 0, 1 ); |
| 25058 | + |
25040 | 25059 | intersect = raycaster.ray.intersectTriangle( vA, vC, vB, false, intersectPoint ); |
25041 | 25060 | if ( intersect === null ) { |
25042 | 25061 |
|
|
25054 | 25073 |
|
25055 | 25074 | distance: distance, |
25056 | 25075 | point: intersectPoint.clone(), |
| 25076 | + uv: Triangle.getUV( intersectPoint, vA, vB, vC, uvA, uvB, uvC, new Vector2() ), |
25057 | 25077 | face: null, |
25058 | 25078 | object: this |
25059 | 25079 |
|
@@ -41148,15 +41168,15 @@ |
41148 | 41168 | // determine versioning scheme |
41149 | 41169 | var versioning = this.Versioning.None; |
41150 | 41170 |
|
| 41171 | + this.targetObject = targetObject; |
| 41172 | + |
41151 | 41173 | if ( targetObject.needsUpdate !== undefined ) { // material |
41152 | 41174 |
|
41153 | 41175 | versioning = this.Versioning.NeedsUpdate; |
41154 | | - this.targetObject = targetObject; |
41155 | 41176 |
|
41156 | 41177 | } else if ( targetObject.matrixWorldNeedsUpdate !== undefined ) { // node transform |
41157 | 41178 |
|
41158 | 41179 | versioning = this.Versioning.MatrixWorldNeedsUpdate; |
41159 | | - this.targetObject = targetObject; |
41160 | 41180 |
|
41161 | 41181 | } |
41162 | 41182 |
|
|
0 commit comments