차례:
비디오: 3D 게임 16강. 슈팅 게임 만들기[2] (2/4) 2024
JavaFX는 사실적인 3D 모델링을 기본적으로 지원합니다. 실제로 JavaFX 장면 그래프는 본질적으로 3 차원입니다. 대부분의 JavaFX 프로그램은 x 좌표와 y 좌표 만 지정하는 두 가지 차원에서 작동합니다. 그러나 3 차원으로 들어가려면 장면 그래프의 노드를 3 차원 공간에 배치하기 위해 z 좌표를 지정하면됩니다.
JavaFX에는 3D 세계에서 3D 객체를 만들고 시각화하는 풍부한 클래스 세트가 포함되어 있습니다. 큐브 및 실린더와 같은 3 차원 도형을 만들 수 있습니다. 3D 공간 내에서 가상 카메라를 움직여 3D 앵글과 다른 시각에서 3D 오브젝트를 볼 수 있습니다.
그리고 광원을 추가하여 가상 세계의 최종 모습을 조심스럽게 제어 할 수도 있습니다. 즉, JavaFX는 놀라운 3D 장면을 생성 할 수 있습니다.
Java 세계에 3D 상자 추가
이 단계에서는 객체를 3D 세계에 추가합니다.이 경우 상자 클래스는 Box 클래스로 표시됩니다. 코드는 다음과 같습니다.
상자 상자 = 새 상자 (100, 100, 100); 상자. setMaterial (blueStuff); 상자. setTranslateX (150); 상자. setTranslateY (-100); 상자. setTranslateZ (-100); 뿌리. getChildren (). 추가 (상자);
Box 생성자는 상자의 너비, 높이 및 깊이를 나타내는 세 개의 인수를 허용합니다. 이 예제에서는 세 가지 모두 100으로 설정됩니다. 따라서 상자는 각면이 100 단위 인 정육면체로 그려집니다.
상자는 원통과 동일한 재질로되어 있습니다. 그 다음에는 3 축 모두에서 번역되어 상자의 투시도를 볼 수 있습니다. 그림은 렌더링 할 때 상자가 어떻게 나타나는지 보여줍니다. 보시다시피 상자의 왼쪽과 아래쪽면이 보입니다. 왜냐하면 상자의 위치를 오른쪽으로 이동하여 카메라가 일부 원근감을 갖기 때문입니다.
3D 상자 회전
이 단계에서 상자를 회전하면 더 재미있는 투시도가 생성됩니다. 3D 객체를 회전하는 데는 두 가지 방법이 있습니다. 가장 간단한 방법은 객체의 setRotate 메소드를 호출하고 회전 각도:
상자를 제공하는 것입니다. setRotate (25);
기본적으로이 명령은 z 축에서 오브젝트를 회전시킵니다. 시각화가 어렵다면, z 축에 평행 한 긴 스틱으로 물체를 꼬치 꼬치로 잡는 것을 상상해보십시오. 그런 다음 꼬챙이에 물건을 회전시킵니다.
다른 축을 따라 객체를 회전하려면 먼저 setRotationAxis를 호출합니다. 예를 들어, X 축에서 객체를 회전하려면
상자를 사용합니다. setRotationAxis (Rotate. X_AXIS); 상자. setRotate (25);
꼬치를 x 축에 평행 한 꼬챙이로 상자를 통과시킨 다음 상자를 25도 회전시키는 것을 상상해보십시오.
setRotate 메소드를 사용하여 3D 객체를 회전하는 유일한 문제는 한 번에 한 축에서만 작동한다는 것입니다. 예를 들어, z 축과 x 축 모두에서 상자를 25도 회전하려고한다고 가정합니다. 다음 코드는 이 작업을 수행하지 않습니다: 상자. setRotationAxis (Rotate. X_AXIS); 상자. setRotate (25); 상자. setRotationAxis (회전.Z_AXIS); 상자. setRotate (25); setRotate 메소드가 두 번째로 호출되어 z 축의 상자를 회전하면 x 축 회전이 재설정됩니다.
두 개 이상의 축을 회전하려면 회전 클래스를 사용해야합니다. 객체를 회전하려는 각 축에 대해 별도의 Rotate 인스턴스를 만든 다음 getTransforms ()를 통해 모든 Rotate 인스턴스를 객체의 Transforms 컬렉션에 추가합니다. addAll 메소드:
Rotate rxBox = new Rotate (0, 0, 0, 0, Rotate. X_AXIS); 회전 ryBox = new 회전 (0, 0, 0, 0, 회전.Y_AXIS); 회전 rzBox = new 회전 (0, 0, 0, 0, 회전.Z_AXIS); rxBox. setAngle (30); ryBox. setAngle (50); rzBox. setAngle (30); 상자. getTransforms (). addAll (rxBox, ryBox, rzBox);
Rotate 생성자는 네 개의 매개 변수를 허용합니다. 처음 세 개는 회전 축이 통과 할 객체 내의 점의 x, y 및 z 좌표입니다. 일반적으로이 매개 변수에 대해 0을 지정하여 객체를 중심점 주위로 회전시킵니다. 네 번째 매개 변수는 회전 축을 지정합니다.
이 그림은 회전 한 후 상자가 어떻게 나타나는지 보여줍니다.
상자가 회전 된 후.