Aspose.3D FOSS for Java beş 3D dosya formatını destekler: OBJ, STL, glTF, GLB, ve FBX (yalnızca içe aktarım).

Tüm örnekler şunu kullanır com.aspose.threed.* paket:

import com.aspose.threed.*;

Maven bağımlılığı:

<dependency>
    <groupId>com.aspose</groupId>
    <artifactId>aspose-3d-foss</artifactId>
    <version>26.1.0</version>
</dependency>

Biçim Manzarası

İçeriğe girmeden önce, desteklenen dört formatın ve tipik kullanım senaryolarının hızlı bir özetine bir göz atın.

BiçimUzantıİçe AktarDışa AktarMalzeme DesteğiSahne Hiyerarşisi
OBJ.objEvetEvetTemel (MTL dosyaları)Düz
STL.stlEvetEvetYokDüz
glTF 2.0.gltfEvetEvetPBRTam
GLB.glbEvetEvetPBRTam
FBX.fbxEvetHayırZenginTam

OBJ, STL, glTF ve GLB hem içe aktarma hem dışa aktarmayı destekler. FBX ise yalnızca içe aktarma için desteklenir yalnızca içe aktarma. GLB (binary glTF) şu şekilde üretilir GltfSaveOptions ile setContentType(FileContentType.BINARY).

OBJ: Wavefront Object

OBJ, en yaygın desteklenen 3D ağ biçimlerinden biridir. Geometrisini düz metin olarak depolar, isteğe bağlı bir .mtl malzemeler için eşlik dosyası.

OBJ Dosyalarını Yükleme

En basit yaklaşım, dosya yolunu doğrudan geçirmektir:

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

Daha fazla kontrol için, kullanın ObjLoadOptions:

ObjLoadOptions opts = new ObjLoadOptions();
Scene scene = Scene.fromFile("model.obj", opts);

OBJ dosyası bir MTL dosyasına (şu aracılığıyla) başvurduğunda mtllib yönerge), kütüphane otomatik olarak malzeme tanımlarını ondan yüklemeye çalışacaktır. MTL dosyası, OBJ dosyasıyla aynı dizinde ya da yönergede belirtilen yolda bulunmalıdır.

OBJ olarak kaydetme

Scene scene = Scene.fromFile("input.fbx");
scene.save("output.obj");

OBJ Kullanım Durumları

  • Farklı 3D araçları arasında ağ verilerini değiş tokuş etmek.
  • OBJ formatında dağıtan varlık kütüphanelerinden modelleri içe aktarma.
  • Karmaşık sahne hiyerarşileri olmadan geometrinin hızlı incelenmesi.

STL: Stereolithography

STL, 3D baskı için standart formattır. Malzemeler, renkler veya sahne hiyerarşisi olmadan ham üçgenlenmiş geometriyi temsil eder. STL dosyaları iki çeşitte gelir: ASCII (insan tarafından okunabilir) ve ikili (kompakt).

STL Dosyalarını Yükleme

// Simple load
Scene scene = Scene.fromFile("part.stl");

// With explicit options
StlLoadOptions opts = new StlLoadOptions();
Scene scene = Scene.fromFile("part.stl", opts);

STL olarak kaydetme

Scene scene = Scene.fromFile("model.obj");
scene.save("output.stl");

Çıktıyı kontrol etmek için, kullanın StlSaveOptions:

StlSaveOptions opts = new StlSaveOptions();
scene.save("output.stl", opts);

STL Düşünceleri

  • STL dosyaları yalnızca üçgenleştirilmiş geometri içerir. Malzemeler, dokular ve sahne hiyerarşisi dışa aktarma sırasında kaybolur.
  • İkili STL, büyük modeller için ASCII STL’den çok daha küçüktür.
  • Hedef bir 3D yazıcı veya dilimleme yazılımı olduğunda STL tercih edilen formattır.

glTF: GL Transmission Format

glTF, özellikle web ve gerçek zamanlı uygulamalarda 3D içeriğin verimli iletimi ve yüklenmesi için tasarlanmış modern bir formattır. PBR malzemeleri, sahne hiyerarşileri ve animasyonları destekler.

glTF Dosyalarını Yükleme

Scene scene = Scene.fromFile("scene.gltf");

// With options
GltfLoadOptions opts = new GltfLoadOptions();
Scene scene = Scene.fromFile("scene.gltf", opts);

glTF Olarak Kaydetme

Temel kaydetme, dosya uzantısını formatı belirlemek için kullanır:

scene.save("output.gltf");

Detaylı kontrol için, kullanın GltfSaveOptions:

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

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

GltfSaveOptions Ayrıntıları

YöntemAmaç
setFlipCoordinateSystem(boolean)Dışa aktarım sırasında koordinat sistemi eksenini ters çevirin. Y‑up’tan Z‑up’a veya tersine dönüştürürken faydalıdır.
setPrettyPrint(boolean)Okunabilirlik için çıktı JSON’ını girintili biçimlendirin. Şu şekilde ayarlayın false üretimde daha küçük dosya boyutu için.

glTF Kullanım Senaryoları

  • Web tabanlı 3D görüntüleyiciler (three.js, Babylon.js).
  • Gerçek zamanlı uygulamalar ve oyun motorları.
  • Araçlar arasında PBR malzeme tanımlarını korumak.

FBX: Filmbox (Yalnızca İçe Aktarım)

FBX, Autodesk tarafından geliştirilen ve oyun geliştirme ile dijital içerik oluşturma alanında yaygın olarak kullanılan bir tescilli formattır. Zengin sahne hiyerarşileri, materyaller ve animasyonları destekler. Aspose.3D FOSS for Java FBX’i destekler. yalnızca içe aktar – FBX’ye dışa aktarma mevcut değil.

FBX Dosyalarını Yükleme

Scene scene = Scene.fromFile("character.fbx");

// With options
FbxLoadOptions opts = new FbxLoadOptions();
Scene scene = Scene.fromFile("character.fbx", opts);

FBX’i Diğer Formatlara Dönüştürme

FBX dışa aktarma desteklenmediği için, içe aktarılan FBX sahnelerini glTF, GLB, OBJ veya STL’ye dönüştürün:

Scene scene = Scene.fromFile("character.fbx");

// Save as GLB
GltfSaveOptions opts = new GltfSaveOptions();
opts.setContentType(FileContentType.BINARY);
scene.save("character.glb", opts);

FBX Kullanım Senaryoları

  • Autodesk araçlarından (Maya, 3ds Max) varlıkları içe aktarma ve diğer formatlara dönüştürme.
  • Riglenmiş karakterler ve animasyonlu sahneler glTF/GLB olarak yeniden dışa aktarma için yükleniyor.

Toplu Dönüştürme

Yaygın bir iş akışı, bir dizindeki tüm dosyaları bir formattan diğerine dönüştürmektir. İşte toplu dönüştürme için bir örnek:

import com.aspose.threed.*;
import java.io.File;

public class BatchConvert {
    public static void main(String[] args) throws Exception {
        File inputDir = new File("models/obj");
        File outputDir = new File("models/gltf");
        outputDir.mkdirs();

        GltfSaveOptions saveOpts = new GltfSaveOptions();
        saveOpts.setPrettyPrint(true);

        File[] objFiles = inputDir.listFiles(
            (dir, name) -> name.toLowerCase().endsWith(".obj")
        );

        if (objFiles == null) return;

        for (File objFile : objFiles) {
            String baseName = objFile.getName()
                .replaceFirst("\\.obj$", "");

            Scene scene = Scene.fromFile(objFile.getAbsolutePath());
            String outPath = new File(outputDir, baseName + ".gltf")
                .getAbsolutePath();

            scene.save(outPath, saveOpts);
            System.out.println("Converted: " + objFile.getName()
                + " -> " + baseName + ".gltf");
        }
    }
}

Bu, her birini yükler .obj dosyayı bir dizinde, her birini güzel biçimlendirilmiş çıktı ile glTF’ye dönüştürür ve sonuçları kaydeder. Bu deseni herhangi bir kaynak ve hedef format kombinasyonu için uyarlayabilirsiniz.

Çapraz Format Dönüştürme Referansı

Aşağıdaki tablo, formatlar arasında dönüştürürken ne bekleyeceğinizi gösterir.

KaynakHedefGeometriMateryallerHiyerarşiNotlar
OBJSTLKorunmuşKayıpN/ASTL’de malzeme desteği yok
OBJglTF/GLBKorunmuşPBR’ye dönüştürüldüDüzMümkün olduğunda MTL malzemeleri eşlendi
STLOBJKorunmuşYokN/AKaynakta malzeme yok
STLglTF/GLBKorunmuşVarsayılanDüzVarsayılan malzeme uygulandı
glTFOBJKorunmuşBasitleştirilmişDüzleştirilmişPBR’den temel malzemeye
glTFSTLKorunmuşKayıpDüzleştirilmişYalnızca geometri
FBXOBJKorunmuşBasitleştirilmişDüzleştirilmişMalzeme basitleştirme
FBXSTLKorunmuşKayıpDüzleştirilmişYalnızca geometri
FBXglTF/GLBKorunmuşPBR’ye dönüştürülmüşKorunmuşİyi doğruluk

Genel Dönüştürme Kılavuzları

  • Geometri tüm format çiftleri arasında her zaman korunur.
  • Malzemeler glTF ve FBX arasında en iyi şekilde ayakta kalır, ikisi de zengin malzeme modellerini destekler. STL’ye dönüştürmek her zaman malzemeleri atar. OBJ’ye dönüştürmek ise malzemeleri temel MTL modeline basitleştirir.
  • Sahne hiyerarşisi glTF ve FBX arasında korunur. OBJ ve STL düz yapılar üretir.

Hepsini Bir Araya Getirmek

İşte bir OBJ dosyasını yükleyen, düğümlerini inceleyen ve hem glTF hem de GLB’ye dışa aktaran tam bir örnek:

import com.aspose.threed.*;

public class FormatWorkflow {
    public static void main(String[] args) throws Exception {
        // Load
        Scene scene = Scene.fromFile("input.obj");

        // Inspect
        System.out.println("Nodes in scene:");
        for (Node child : scene.getRootNode().getChildNodes()) {
            System.out.println("  " + child.getName());
            Transform t = child.getTransform();
            System.out.println("    Translation: "
                + t.getTranslation());
        }

        // Export to glTF with options
        GltfSaveOptions gltfOpts = new GltfSaveOptions();
        gltfOpts.setPrettyPrint(true);
        scene.save("output.gltf", gltfOpts);

        // Export to GLB (binary glTF)
        GltfSaveOptions glbOpts = new GltfSaveOptions();
        glbOpts.setContentType(FileContentType.BINARY);
        scene.save("output.glb", glbOpts);

        System.out.println("Export complete.");
    }
}

Özet

Aspose.3D FOSS for Java size birden fazla formatta tutarlı bir API sağlar. Ana noktalar:

  • OBJ – temel malzemelerle basit ağ değişimi.
  • STL – 3D baskı hatları için yalnızca geometri formatı.
  • glTF / GLB – web ve gerçek zamanlı kullanım için modern PBR yetenekli format. Kullan GltfSaveOptions ile setContentType(FileContentType.BINARY) GLB çıktısı için.
  • FBX – yalnızca içe aktarım; oyun motorlarından ve DCC araçlarından varlıkları yüklemek için zengin format.

Biçim‑özel yükleme ve kaydetme seçenek sınıflarını kullanın (ObjLoadOptions, StlLoadOptions, StlSaveOptions, GltfLoadOptions, GltfSaveOptions, FbxLoadOptions) içe aktarma veya dışa aktarma sürecinde ayrıntılı kontrol gerektiğinde.

Daha fazla ayrıntı için, şu adresi ziyaret edin Aspose.3D belgelendirmesi veya kaynak koduna göz atın GitHub.