@@ -152,7 +152,7 @@ THREE.CollisionSystem.prototype.rayMesh = function( r, me ) {
152
152
var p3 = face instanceof THREE . Face4 ? me . mesh . geometry . vertices [ face . d ] . position : null ;
153
153
154
154
if ( face instanceof THREE . Face3 ) {
155
- var nd = this . rayTriangle ( rt , p0 , p1 , p2 , d , this . collisionNormal ) ;
155
+ var nd = this . rayTriangle ( rt , p0 , p1 , p2 , d , this . collisionNormal , me . mesh . doubleSided ) ;
156
156
157
157
if ( nd < d ) {
158
158
@@ -167,7 +167,7 @@ THREE.CollisionSystem.prototype.rayMesh = function( r, me ) {
167
167
168
168
else if ( face instanceof THREE . Face4 ) {
169
169
170
- var nd = this . rayTriangle ( rt , p0 , p1 , p3 , d , this . collisionNormal ) ;
170
+ var nd = this . rayTriangle ( rt , p0 , p1 , p3 , d , this . collisionNormal , me . mesh . doubleSided ) ;
171
171
172
172
if ( nd < d ) {
173
173
@@ -178,7 +178,7 @@ THREE.CollisionSystem.prototype.rayMesh = function( r, me ) {
178
178
179
179
}
180
180
181
- nd = this . rayTriangle ( rt , p1 , p2 , p3 , d , this . collisionNormal ) ;
181
+ nd = this . rayTriangle ( rt , p1 , p2 , p3 , d , this . collisionNormal , me . mesh . doubleSided ) ;
182
182
183
183
if ( nd < d ) {
184
184
@@ -188,7 +188,7 @@ THREE.CollisionSystem.prototype.rayMesh = function( r, me ) {
188
188
me . normal . normalize ( ) ;
189
189
190
190
}
191
-
191
+
192
192
}
193
193
194
194
}
@@ -197,7 +197,7 @@ THREE.CollisionSystem.prototype.rayMesh = function( r, me ) {
197
197
198
198
} ;
199
199
200
- THREE . CollisionSystem . prototype . rayTriangle = function ( ray , p0 , p1 , p2 , mind , n ) {
200
+ THREE . CollisionSystem . prototype . rayTriangle = function ( ray , p0 , p1 , p2 , mind , n , doubleSided ) {
201
201
202
202
var e1 = THREE . CollisionSystem . __v1 ,
203
203
e2 = THREE . CollisionSystem . __v2 ;
@@ -211,7 +211,20 @@ THREE.CollisionSystem.prototype.rayTriangle = function( ray, p0, p1, p2, mind, n
211
211
n . cross ( e1 , e2 )
212
212
213
213
var dot = n . dot ( ray . direction ) ;
214
- if ( ! ( dot < 0 ) ) return Number . MAX_VALUE ;
214
+ if ( ! ( dot < 0 ) ) {
215
+
216
+ if ( doubleSided ) {
217
+
218
+ n . multiplyScalar ( - 1.0 ) ;
219
+ dot *= - 1.0 ;
220
+
221
+ } else {
222
+
223
+ return Number . MAX_VALUE ;
224
+
225
+ }
226
+
227
+ }
215
228
216
229
var d = n . dot ( p0 ) ;
217
230
var t = d - n . dot ( ray . origin ) ;
0 commit comments