checkBufferGeometryIntersection function
Intersection?
checkBufferGeometryIntersection(
- Object3D object,
- Material material,
- Raycaster raycaster,
- Ray ray,
- BufferAttribute<NativeArray<num>> position,
- dynamic morphPosition,
- dynamic morphTargetsRelative,
- dynamic uv,
- dynamic uv2,
- int a,
- int b,
- int c,
)
Implementation
Intersection? checkBufferGeometryIntersection(
Object3D object,
Material material,
Raycaster raycaster,
Ray ray,
BufferAttribute position,
morphPosition,
morphTargetsRelative,
uv,
uv2,
int a,
int b,
int c) {
_vA.fromBufferAttribute(position, a);
_vB.fromBufferAttribute(position, b);
_vC.fromBufferAttribute(position, c);
var morphInfluences = object.morphTargetInfluences;
if (morphPosition != null && morphInfluences != null) {
_morphA.set(0, 0, 0);
_morphB.set(0, 0, 0);
_morphC.set(0, 0, 0);
for (var i = 0, il = morphPosition.length; i < il; i++) {
var influence = morphInfluences[i];
var morphAttribute = morphPosition[i];
if (influence == 0) continue;
_tempA.fromBufferAttribute(morphAttribute, a);
_tempB.fromBufferAttribute(morphAttribute, b);
_tempC.fromBufferAttribute(morphAttribute, c);
if (morphTargetsRelative) {
_morphA.addScaledVector(_tempA, influence);
_morphB.addScaledVector(_tempB, influence);
_morphC.addScaledVector(_tempC, influence);
} else {
_morphA.addScaledVector(_tempA.sub(_vA), influence);
_morphB.addScaledVector(_tempB.sub(_vB), influence);
_morphC.addScaledVector(_tempC.sub(_vC), influence);
}
}
_vA.add(_morphA);
_vB.add(_morphB);
_vC.add(_morphC);
}
if (object is SkinnedMesh) {
object.boneTransform(a, _vA);
object.boneTransform(b, _vB);
object.boneTransform(c, _vC);
}
var intersection = checkIntersection(
object, material, raycaster, ray, _vA, _vB, _vC, _intersectionPoint);
if (intersection != null) {
if (uv != null) {
_uvA.fromBufferAttribute(uv, a);
_uvB.fromBufferAttribute(uv, b);
_uvC.fromBufferAttribute(uv, c);
intersection.uv = Triangle.static_getUV(_intersectionPoint, _vA, _vB, _vC,
_uvA, _uvB, _uvC, Vector2(null, null));
}
if (uv2 != null) {
_uvA.fromBufferAttribute(uv2, a);
_uvB.fromBufferAttribute(uv2, b);
_uvC.fromBufferAttribute(uv2, c);
intersection.uv2 = Triangle.static_getUV(_intersectionPoint, _vA, _vB,
_vC, _uvA, _uvB, _uvC, Vector2(null, null));
}
var face = Face.fromJSON(
{"a": a, "b": b, "c": c, "normal": Vector3(), "materialIndex": 0});
Triangle.static_getNormal(_vA, _vB, _vC, face.normal);
intersection.face = face;
}
return intersection;
}