<aside>

그룹화 관련 코드 설명

</aside>

getWorldPositon() : object의 월드 포지션 좌표를 받아와 ( )에 부여한다.

getWorldQuaternion() : object의 월드 퀀터니언 좌표를 받아와 ( )에 부여한다.

setRotationFromQuaternion() : 퀀터니언에 받아온 로테이션 좌표를 넣어준다.

geometry.computeBoundingBox() : 바운딩박스를 만들고 접근하기 위해 사용한다? (도형에 네모 테두리를 넣는다.)

geometry.boundingBox.getCenter() : 바운딩박스를 기준으로 정가운데 좌표를 가져온다.

Vector3.divideScalar() : 벡터3들의 좌표를

Quaterion.multiply()

Quaterion.premultiply()

useEffect(() => {
    if (clickedChuckInfo.userData && selectRotateChuck) {
      const centerCoordinate = new THREE.Vector3();
      clickedChuckInfo.geometry.computeBoundingBox();
      clickedChuckInfo.geometry.boundingBox.getCenter(centerCoordinate);
      // 바운딩박스에서 정가운데 좌표를 받아온 후 그것을 월드 좌표로 바꿔준다.
      clickedChuckInfo.localToWorld(centerCoordinate);

			// add로 추가하여 백터값을 임의로 조절할 수 있다.
      const adjustVector = new THREE.Vector3(0, 0, 0);
      const centerAxis = new THREE.Vector3()
        .copy(centerCoordinate)
        .add(adjustVector);
      setCustomAxis(centerAxis.normalize());
    }
  }, [clickedChuckInfo, selectRotateChuck]);

<aside>

기록 코드

</aside>

 // 백터 값으로 충돌 범위를 감지함
  
  const collisionCheck = (groupRefA, groupRefB, minDistance) => {
    const collisionObjectA = groupRefA.current.children;
    const collisionObjectB = groupRefB.current.children;

    for (let i = 0; i < collisionObjectA.length; i++) {
      for (let j = i + 1; j < collisionObjectB.length; j++) {
        const objectA = new THREE.Vector3().setFromMatrixPosition(
          collisionObjectA[i].matrixWorld
        );
        const objectB = new THREE.Vector3().setFromMatrixPosition(
          collisionObjectB[j].matrixWorld
        );

        if (objectA.distanceTo(objectB) < minDistance) {
          console.log("충돌 감지");
          return true;
        }
      }
    }
    return false;
  };
  
  // useFrame에 들어가는 코드
  
  else if (
      !stopTriggerRef.current &&
      rotationAngle !== 0 &&
      customAxis &&
      Math.abs(currentRotationAngleRef.current - rotationAngle) <= 0.01 &&
      collisionCheck
    ) {
      const minDistance = 0.5;

      if (collisionCheck(rotateGroupRef, nonRotateGroupRef)) {
        alert("충돌!!임풱");
        setRotationAngle((prevAngle) => prevAngle - 90 * CONSTANTS.DEGREE);
      }

<aside>

이슈 부분

</aside>