우리는 사용 가능성을 발표하는 것을 기쁘게 생각합니다. 3D FOSS Java에 대한 자세한 내용 - Java 응용 프로그램에서 3D 파일 형식으로 작업을위한 무료 오픈 소스 라이브러리. 원주민 중독이없는 순수한 Java 솔루션으로 구축 된, 라이버스는 Java 21 및 이후에 실행되며 다양한 프로젝트와 환경에 접근 할 수 있습니다.

이 게시물은 도서관이 제공하는 것을 통해 진행되며, 어떻게 시작해야하며 여기에서 어디로 가야합니까?.

3D FOSS는 Java에 대해 무엇입니까?

Aspose.3D FOSS for Java는 가벼운 3D 파일 처리 라이브러리입니다. 라이센스.그것은 여러 널리 사용되는 형식에 걸쳐 3D 모델을 로드, 검사, 변환 및 저장할 수있는 장면 그래프 API를 제공합니다.이 도서관은 Java로 완전히 작성되어 외부 원주민 바이너리 또는 플랫폼 특정 구성이 필요하지 않습니다.

이 코드는 GitHub에서 사용할 수 있습니다 : https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-Java에 대한 정보

키 히트리스트

  • 맑은 Java - JNI 없고, 원주민 도서관도 없으며, 플랫폼 제한도 없습니다.
  • 제2차 + 호환되는 것.
  • MIT 면허 - 제한 없이 개인, 상업 또는 소유 프로젝트에서 사용합니다.
  • 장면 - 그래프 아키텍처 - 노드, 메시지, 카메라 및 재료의 잘 알려진 나무.
  • 멀티 포맷 지원 - OBJ, STL, glTF 2.0 및 GLB 파일을 읽고 쓰십시오; FBX 파일.

빠른 시작

Maven 설치

다음 의존성을 당신의 pom.xml:

<dependency>
  <groupId>org.aspose</groupId>
  <artifactId>aspose-3d-foss</artifactId>
  <version>26.5.0</version>
</dependency>

첫 번째 변환

가장 간단한 사용 사례는 하나의 형식으로 3D 파일을 업로드하고 다른 형태로 저장하는 것입니다.이 두 줄 OBJ에서 STL로 변환 :

import com.aspose.threed.*;

public class QuickConvert {
    public static void main(String[] args) throws Exception {
        Scene scene = Scene.fromFile("cube.obj");
        scene.save("output.stl");
    }
}

그들의 Scene 클래스는 중앙 입구점입니다.전화 Scene.fromFile() 파일 경로를 사용하여 모델을 충전하고, 그 다음에 전화합니다. save() 도서관은 파일 확장에서 형식을 입력합니다.

Scratch에서 장면을 만드는 방법

또한, 당신은 프로그래밍으로 장면을 만들 수 있습니다 :

import com.aspose.threed.*;

public class BuildScene {
    public static void main(String[] args) throws Exception {
        Scene scene = new Scene();
        Node node = scene.getRootNode().createChildNode("Box");

        Transform t = node.getTransform();
        t.setTranslation(1, 2, 3);

        scene.save("scene.gltf");
    }
}

이것은 새로운 장면을 만들고, 뿌리 아래에 “박스"라는 이름의 어린이 노드를 추가하고, 그것을 조율로 (1, 2, 3), 결과를 glTF 파일으로 수출합니다.

포맷 특정 옵션으로 충전

충전 과정에 대한 더 나은 통제가 필요할 때 각 형식은 특별한 옵션 클래스를 제공합니다.예를 들어, 명시적인 팁을 가진 STL 파일을 충전에:

import com.aspose.threed.*;

public class LoadWithOptions {
    public static void main(String[] args) throws Exception {
        StlLoadOptions opts = new StlLoadOptions();
        Scene scene = Scene.fromFile("part.stl", opts);

        // Inspect the loaded scene
        System.out.println("Root children: "
            + scene.getRootNode().getChildNodes().size());

        // Re-export as OBJ
        scene.save("part.obj");
    }
}

그들의 Scene.fromFile() 정적 방법은 로드 옵션 유형 중 하나를 받아 들일 수 있습니다 : ObjLoadOptions, StlLoadOptions, GltfLoadOptions,또는 FbxLoadOptions.

장면 그라프를 통과하는 방법

장면이 충전되면 노드 나무를 걷거나 그 내용을 검사하거나 수정할 수 있습니다.:

import com.aspose.threed.*;

public class TraverseScene {
    public static void main(String[] args) throws Exception {
        Scene scene = Scene.fromFile("model.gltf");

        for (Node child : scene.getRootNode().getChildNodes()) {
            System.out.println("Node: " + child.getName());

            Transform t = child.getTransform();
            System.out.println("  Translation: " + t.getTranslation());

            Entity entity = child.getEntity();
            if (entity instanceof Mesh) {
                Mesh mesh = (Mesh) entity;
                System.out.println("  Vertices: "
                    + mesh.getControlPoints().size());
            }
        }
    }
}

이 패턴은 탐색, 모델 콘텐츠에 대한 보고서를 생성하거나 다시 수출하기 전에 장면의 부분을 선택적으로 변경하는 데 유용합니다.

변환을 적용하는 방법

3D 공간에서 노드를 위치하는 것은 Transform 각각의 객체에 대하여 Node:

import com.aspose.threed.*;

public class TransformExample {
    public static void main(String[] args) throws Exception {
        Scene scene = new Scene();

        Node parent = scene.getRootNode().createChildNode("Parent");
        parent.getTransform().setTranslation(10, 0, 0);

        Node child = parent.createChildNode("Child");
        child.getTransform().setTranslation(5, 0, 0);
        child.getTransform().setScale(2, 2, 2);

        // Child's world position is (15, 0, 0) due to
        // parent-child transform inheritance

        scene.save("transformed.gltf");
    }
}

변형은 부모-아동 유산의 표준 모델을 따릅니다 : 어린이의 세계 공간 위치는 지역 변환의 조합이며 모든 조상이 뿌리까지 변화를합니다.

무엇이 포함되어 있는가

도서관은 3D 장면 그래픽 모델 주위에 설계된 능력의 집중 된 세트를 갖춘 선박입니다.

장면 그라프

스케치 그래프는 API의 뒷면입니다.모든 3D 파일은 나무 구조로 표현됩니다 :

클래스역할
Scene최고 수준의 컨테이너; 장면 그래프의 뿌리
Node나무에 이름을 붙인 위치; 변형과 어린이 노드를 유지합니다.
Entity노드에 붙어있는 시각적 개체를위한 추상 기반
Mesh폴리구니 지질학 - 수직, 얼굴, 정상
Camera가상 카메라 정의
Transform현지 번역, 회전 및 노드의 규모
GlobalTransform컴퓨터 세계 공간 변환

재료

도서관은 PBR (물리적으로 기반 렌더링) 자료 모델을 제공합니다 :

  • PbrMaterial - 물리적으로 기반한 렌더링 재료는 알베도, 금속성, 무지함, 배출 색상 및 투명성을 가지고 있습니다.이것은 Java 에디션에서 사용할 수있는 유일한 콘크리트 재질 클래스입니다.

수학용 유틸리티

그들의 com.aspose.threed 패키지에는 필수 수학 원시가 포함되어 있습니다 :

  • 빅토리아3 - 위치, 방향 및 색상에 대한 3 구성 요소 벡터.
  • 마트릭스4 - 4x4 변환 매트릭스.
  • 쿼터리 - 회전성 대표를 위한.
  • BoundingBox - 공간 쿼리에 대한 좌석 합성 상자.
Vector3 a = new Vector3(1, 0, 0);
Vector3 b = new Vector3(0, 1, 0);
Vector3 c = Vector3.add(a, b); // (1, 1, 0)

옵션을 충전하고 저장합니다.

각 형식은 수입 및 수출 행동을 제어 할 수있는 옵션 클래스를 갖추고 있습니다 :

형식옵션 충전옵션을 저장하기
OBJObjLoadOptionsObjSaveOptions
STLStlLoadOptionsStlSaveOptions
GLT / GLB의 발음을 GLF [en]GltfLoadOptionsGltfSaveOptions
FBXFbxLoadOptions(수입만 하는 경우)

예를 들어, 깔끔하게 인쇄 된 JSON과 융합된 조율 시스템을 사용하여 glTF를 수출하려면:

GltfSaveOptions opts = new GltfSaveOptions();
opts.setFlipCoordinateSystem(true);
opts.setPrettyPrint(true);

scene.save("output.gltf", opts);

지원되는 형식

다음 테이블은 Aspose.3D FOSS for Java가 읽고 쓰는 형식을 요약합니다.

형식확장수입수출노트
OBJ.obj예 예예 예MTL 재료를 사용하여
STL.stl예 예예 예바이너리 + ASCII
GST 2.0의 숫자.gltf예 예예 예JSON 형식
GLB.glb예 예예 예GltfSaveOptions를 통해 바이너리 glTF
FBX.fbx예 예아니오오직 수입만으로도

OBJ, STL, glTF 및 GLB는 충전과 저축을 지원합니다. FBX는 수입만 지원됩니다.

선택 가이드 형식

올바른 형식을 선택하는 것은 사용 사례에 달려 있습니다 :

  • OBJ 3D 도구를 통해 최대한의 호환성이 필요할 때 이상적입니다. 거의 모든 모델링 응용 프로그램은 OBJ를 읽고 쓰 수 있습니다. 메쉬 데이터 교환을 위해 잘 작동하지만 동반 MTL 파일을 통해 기본 자료 정보를 제공합니다.
  • STL 3D 인쇄 작업 흐름을위한 선택의 형식입니다. 그것은 재료 또는 장면 이라크없이 원료 삼각형 지메트리를 저장, 이것은 정확히 슬라이더 소프트웨어가 기대하는 것입니다. 당신의 파이프 라인이 3d 프린터로 끝나면 STL는 간단한 옵션입니다.
  • GSTF 그것은 PBR 재료, 전체 장면 히어로시를 지원하고 효율적인 전송을 위해 설계되었습니다. glTF를 사용하여 웹 기반 시청자를 구축 할 때, three.js 또는 Babylon.j와 함께 작업하거나 실제 시간의 순서 파이프라인을 대상으로합니다.
  • FBX 게임 개발 및 디지털 콘텐츠 창조 작업 흐름에 깊이 통합되어 있습니다. 그것은 풍부한 장면 데이터를 지원합니다, 이와 같은 계층과 자료. Aspose.3D FOSS for Java는 FBX를 지지합니다. 오직 수입만으로도 - FBX 자산을 충전하고 다른 형식으로 변환하는 데 사용합니다.

알려진 제한

중요한 것은 그들이 주목하는 Scene.render() 이건 지원되지 않음 이 방법을 사용하면, 이 메뉴를 던질 수 있습니다. UnsupportedOperationException.도서관은 실시간으로 디스플레이에 전달하는 대신 파일 기반 3D 처리 - 로딩, 조작, 변환 및 저장 모델을 위해 설계되었습니다.

오픈소스 및 라이센스

Aspose.3D FOSS for Java는 아래에서 출시됩니다. MIT 라이센스.즉, 당신은 자유롭게 :

  • 도서관을 상업적 및 소유 응용 프로그램에서 사용하십시오.
  • 소스 코드를 변경하여 필요에 맞게 합니다.
  • 도서관을 자신의 소프트웨어의 일부로 배포하십시오.

로얄티 요금, 사용 제한 및 MIT 라이센스에 명시된 것 이외의 할당 요구 사항은 없습니다.

전체 소스 코드는 GitHub에서 호스트되며, 기여는 환영됩니다 : https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-Java에 대한 정보

시스템 요구 사항

요구사항세부 사항
Java 버전21 or later
의존성푸른 Java (Pure Java)
플랫폼JVM을 실행하는 모든 플랫폼
건설 도구마이클 ( 추천하는 것)

시작하기 시작하는 것

다음은 당신이 일어나서 실행하는 데 도움이되는 자원입니다 :

  • 문서화 - 포괄적 인 가이드 및 API 도로가 제공됩니다. Aspose.3D 문서 사이트.
  • 지식 기반 - 실용적인 방법에 대한 기사 및 문제 해결 팁에서 아스포세3D KB.
  • API 참조 - 자세한 클래스 및 방법 참조에 대한 ASPOSE.3D API 참조.
  • 출처 코드 - 브라우징 및 기여에 대한 GitHub.
  • 중앙 마이브 - 패키지는 다음과 같이 발표됩니다. org.aspose:aspose-3d-foss:26.5.0 중앙에 있는 마이브.

일반 사용 사례

여기에 Java를위한 Aspose.3D FOSS가 잘 맞는 몇 가지 실용적인 시나리오가 있습니다.:

변환형 파이프리드

많은 팀이 하나의 형식으로 3D 자산을 받지만 다른 형태로 필요합니다. 디자인 팀은 FBX에서 작업 할 수 있지만 웹 팀에는 glTF가 필요 합니다. 도서관에서는 자동 변환 파이프라인을 구축할 수 있습니다.:

// Convert all incoming FBX assets to GLB for the web team
Scene scene = Scene.fromFile("asset.fbx");

GltfSaveOptions opts = new GltfSaveOptions();
opts.setContentType(FileContentType.BINARY);

scene.save("asset.glb", opts);

3D Model Inspection and Validation

3D 자산을 응용 프로그램에 통합하기 전에, 당신은 그것의 내용을 확인하려면 - 노드 계산, 지질학 검사 또는 예상 요소가 존재한다는 것을 확인합니다 :

Scene scene = Scene.fromFile("model.obj");

int nodeCount = scene.getRootNode().getChildNodes().size();
System.out.println("Top-level nodes: " + nodeCount);

for (Node child : scene.getRootNode().getChildNodes()) {
    if (child.getEntity() instanceof Mesh) {
        Mesh mesh = (Mesh) child.getEntity();
        System.out.println(child.getName() + ": "
            + mesh.getControlPoints().size() + " vertices");
    }
}

장면 모임

여러 모델을 충전하고 하나의 장면으로 결합할 수 있습니다.:

Scene scene = new Scene();

Scene part1 = Scene.fromFile("chassis.obj");
Scene part2 = Scene.fromFile("wheels.obj");

// Add nodes from each part into the combined scene
for (Node child : part1.getRootNode().getChildNodes()) {
    scene.getRootNode().getChildNodes().add(child);
}
for (Node child : part2.getRootNode().getChildNodes()) {
    scene.getRootNode().getChildNodes().add(child);
}

scene.save("assembled.gltf");

다음은 무엇인가

다음 포스팅에서는 다음을 다루게 될 것입니다:

  • 장면 그래프 API, 재료 및 수학 도구의 핵심 기능에 깊은 몰입.
  • 모든 지원되는 3D 형식 - OBJ, STL, glTF 및 FBX와 함께 작업하는 실용적인 가이드 - 로드 / 저장 옵션과 배치 변환 패턴을 포함합니다.

튼튼하게 유지하고 도서관을 탐험하고 GitHub에서 리뷰를 공유 할 수있는 자유롭게 느끼십시오.