computeIntersections method
void
computeIntersections(
- Raycaster raycaster,
- List<
Intersection> intersects, - dynamic rayLocalSpace
inherited
Implementation
void computeIntersections(Raycaster raycaster, List<Intersection> intersects, rayLocalSpace ) {
Intersection? intersection;
final geometry = this.geometry;
final material = this.material;
final index = geometry!.index;
final position = geometry.attributes['position'];
final uv = geometry.attributes['uv'];
final uv1 = geometry.attributes['uv1'];
final normal = geometry.attributes['normal'];
final groups = geometry.groups;
final drawRange = geometry.drawRange;
if ( index != null ) {
if (material is GroupMaterial) {
for (int i = 0, il = groups.length; i < il; i ++ ) {
final group = groups[ i ];
final groupMaterial = material.children[ group['materialIndex'] ];
final start = math.max<int>( group['start'], drawRange['start']! );
final end = math.min<int>( index.count, math.min( ( group['start'] + group['count'] ), ( drawRange['start']! + drawRange['count']! ) ) );
for (int j = start, jl = end; j < jl; j += 3 ) {
final a = index.getX( j )!.toInt();
final b = index.getX( j + 1 )!.toInt();
final c = index.getX( j + 2 )!.toInt();
intersection = checkGeometryIntersection( this, groupMaterial, raycaster, rayLocalSpace, uv, uv1, normal, a, b, c );
if ( intersection != null) {
intersection.faceIndex = ( j / 3 ).floor(); // triangle number in indexed buffer semantics
intersection.face?.materialIndex = group['materialIndex'];
intersects.add( intersection );
}
}
}
}
else {
final start = math.max<int>( 0, drawRange['start']! );
final end = math.min( index.count, ( drawRange['start']! + drawRange['count']! ) );
for (int i = start, il = end; i < il; i += 3 ) {
final a = index.getX( i )!.toInt();
final b = index.getX( i + 1 )!.toInt();
final c = index.getX( i + 2 )!.toInt();
intersection = checkGeometryIntersection( this, material, raycaster, rayLocalSpace, uv, uv1, normal, a, b, c );
if ( intersection != null) {
intersection.faceIndex = ( i / 3 ).floor(); // triangle number in indexed buffer semantics
intersects.add( intersection );
}
}
}
}
else if ( position != null ) {
if (material is GroupMaterial) {
for (int i = 0, il = groups.length; i < il; i ++ ) {
final group = groups[ i ];
final groupMaterial = material.children[ group['materialIndex'] ];
final start = math.max<int>( group['start'], drawRange['start']! );
final end = math.min<int>( position.count, math.min<int>( ( group['start'] + group['count'] ), ( drawRange['start']! + drawRange['count']! ) ) );
for (int j = start, jl = end; j < jl; j += 3 ) {
final a = j;
final b = j + 1;
final c = j + 2;
intersection = checkGeometryIntersection( this, groupMaterial, raycaster, rayLocalSpace, uv, uv1, normal, a, b, c );
if ( intersection != null) {
intersection.faceIndex = ( j / 3 ).floor(); // triangle number in non-indexed buffer semantics
intersection.face?.materialIndex = group['materialIndex'];
intersects.add( intersection );
}
}
}
}
else {
final start = math.max<int>( 0, drawRange['start']! );
final end = math.min<int>( position.count, ( drawRange['start']! + drawRange['count']! ) );
for (int i = start, il = end; i < il; i += 3 ) {
final a = i;
final b = i + 1;
final c = i + 2;
intersection = checkGeometryIntersection( this, material, raycaster, rayLocalSpace, uv, uv1, normal, a, b, c );
if ( intersection != null) {
intersection.faceIndex = ( i / 3 ).floor(); // triangle number in non-indexed buffer semantics
intersects.add( intersection );
}
}
}
}
}