Aspose.3D FOSS for Java beş 3D dosya biçimini destekler: OBJ, STL, GTTF, GLB,ve FBX Bu yazı, her birini nasıl yüklediğini ve kaydettiğini, hangi seçenekleri mevcuttur ve aralarında nasıl dönüştürüldüğünü gösteren pratik, format-by-format rehberi.

Tüm örnekler kullanılır com.aspose.threed.* Paket için :

import com.aspose.threed.*;

Maven Bağımlılığı :

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

Tasarımlar Landscape

İçine dalmadan önce, burada dört desteklenen biçim ve tipik kullanım durumları hakkında hızlı bir genel bakış.

Format YapılarıGenişletmeİthalatihracatMalzeme DesteğiSahne Hierarşisi
OBJ.objEvetEvetTemel (MTL dosyaları )Yumuşak
STL.stlEvetEvetHiçbirYumuşak
GTTF 2.0 için.gltfEvetEvetPBRTamamlı
GLB.glbEvetEvetPBRTamamlı
FBX.fbxEvetHayırzenginTamamlı

OBJ, STL, glTF ve GLB hem ithalat hem de ihracat için destekler. Sadece ithalat.GLB (binary glTF) ile üretilir. GltfSaveOptions ile setContentType(FileContentType.BINARY).

OBJ: Wavefront nesnesi

OBJ en yaygın olarak desteklenen 3D mesh biçimlerinden biridir. geometri düz metin olarak depolamaktadır, seçmeli bir .mtl Malzeme için eşlik dosyası.

OBJ Dosyaları Yükleme

En basit yöntem dosya yolu doğrudan geçmektir:

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

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

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

Bir MBD dosyası bir MTL dosyasını (a) referans verirse, mtllib Kütüphane, materyal tanımlarını otomatik olarak yüklemeye çalışacaktır.MTL dosyası, OBJ dosyasının veya direktifte belirtilen yolda olduğu aynı dizinde olmalıdır.

OJ olarak tasarruf

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

OBJ Kullanım Şartları

  • Farklı 3D araçlar arasında mesh verilerini değiştirmek.
  • OBJ biçiminde dağıtılan varlık kütüphanelerinden modelleri ithal etmek.
  • Geometri, karmaşık sahne hierarşileri olmadan hızlı bir şekilde incelenir.

Etiket: stereolithography

STL 3D baskı için standart biçimdir. malzeme, renk veya sahne hiyerarşisi olmadan toprak üçgen geometri temsil eder. STl dosyaları iki çeşittir: ASCII (insan okunabilir) ve ikili (kompak).

STL dosyaları 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 tasarruf

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

Üretimi kontrol etmek için, kullanmak StlSaveOptions:

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

STL görüşleri

  • STL sadece üçgen geometri depolamaktadır. malzemeler, dokular ve sahne hiyerarşisi desteklenmez ve ihraç edilmektedir.
  • STL ihracat yapıyor Hayır Binary STL, her poligon yüzünün ilk 3 dikeyini yazar; quad ve n-gon yüzleri sessizce çürümüştür. ASCII ST L tüm dikiş göstergelerini yüz başına yazır, üçgen olmayan yüzler için bozuk bir çıkış üretir. Her zaman STl’e ihraç ederken önü üçlü mesheler (tüm üçgeni yüz) kullanın.
  • Binary STL büyük modeller için ASCII STl’den önemli ölçüde daha küçüktür.
  • STL, hedef 3D yazıcı veya slicer yazılımı olduğunda seçimin biçimidir.

GLTF: GL Transmission Format İndirme Formatı

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

GLTF Dosyaları Yükleme

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

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

GTTF olarak tasarruf

Temel kaydetme, dosya uzantısını kullanarak biçimi belirler:

scene.save("output.gltf");

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

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

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

GltfSaveOptions Detayları

YöntemlerAmaçları
setFlipCoordinateSystem(boolean)Y-up’tan Z-Up’a dönüştürülürken veya tersine kullanılır.
setPrettyPrint(boolean)JSON çıkışını okuma için indentasyon ile biçimlendirin. false Üretimde küçük dosya boyutları için.

GTTF Kullanım Şartları

  • Web tabanlı 3D izleyiciler (three.js, Babylon.js).
  • Gerçek zamanlı uygulamalar ve oyun motorları.
  • PBR malzeme tanımlarını araçlar arasında korumak.

FBX: Filmbox (Sadece İthalat)

FBX, oyun geliştirme ve dijital içerik oluşturma alanında yaygın olarak kullanılan Autodesk’in özel bir biçimidir. Aspose.3D FOSS for Java, FBx’i destekler. Sadece ithalat FBX’e ihracat yapılmamıştır.

Sadece biner fbx. FBX ithalatçı sadece ikili FBx dosyalarını okuyor. bir ASCII FB X dosyasını geçerek atıyor ImportException("ASCII FBX format not yet supported - only binary FBX is supported"). FBX’ten düğüm hierarşisi ve madde çıkarımı tam olarak doğrulanmamıştır; karmaşık FB X sahneleri tamamen yüklemeyebilir. Animasyonlar ve çarpışma uygulanmaz.

FBX Dosyaları 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 Formatlar’a Dönüştürmek

FBX ihracatı desteklenmemiş olduğundan, ithal edilen FBx sahneleri 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 Şartları

  • Autodesk araçlarından (Maya, 3ds Max) statik mesh varlıkları ithal etmek ve diğer biçimlere dönüştürmek.
  • İkili FBX geometri yükleme ve glTF/GLB, OBJ veya STL’ye yeniden ihraç.

Batch Dönüşüm

Bir iş akışı, bir formattan diğerine tüm dosya dizinlerini dönüştürmektir.Burada batch dönüşüm için bir desen:

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 bir dizin dosyası, her biri güzel basılmış çıkış ile glTF dönüştürür ve sonuçları kaydeder. bu desen herhangi bir kaynak ve hedef format kombinasyonu için ayarlanabilir.

Cross-Format Dönüşüm Referansı

Aşağıdaki tablo, biçimler arasındaki dönüşümde ne bekleyeceğinizi gösterir.

-deniçinGeometriMalzemeHierarşizmNotlar
OBJSTLsaklıkaybolanN/ASTL’nin maddi desteği yok
OBJGTTF / GLBsaklıPBR’ye dönüştürülmüşYumuşakMHP’nin mümkün olduğunca karıştırılması
STLOBJsaklıHiçbirN/AKaynakta hiçbir malzeme yok
STLGTTF / GLBsaklıŞifrelemedüzDefault malzeme uygulama
GLTFOBJKorunanbasitleştirilmişYumuşakPBR Temel Malzeme
GLTFSTLKorunankaybolanYumuşakGeometre sadece
FBXOBJsaklıbasitleştirilmişYumuşakMalzeme Basitleştirme
FBXSTLsaklıkaybolanYumuşakGeometre sadece
FBXGTTF / GLBsaklıPBR’ye dönüştürülmüşsaklıİyi sadakat

Genel Dönüşüm Kılavuzu

  • Geometri Genel olarak, bir önemli istisna ile format çiftleri arasında korunur: STL’ye ihraç ederken, meshler tamamen üçgen yüzlerinden oluşmalıdır. biner ST L sessizce çeyrek ve n-gon yüzlerini ilk 3 yöne sürükler; ASCII STl üçgeni olmayan yüzler için bozuk çıkış üretir.
  • Malzeme GTTF ve FBX ithalat sahneler arasında en iyi hayatta kalmak. madde verilerini içeren. STL’ye dönüştürmek her zaman malzemeyi kaybeder. OBJ’e dönüşüm, temel MTL modeline malzemeleri basitleştirir.
  • Sahne hierarşisi GTTF format dosyaları arasında korunur. OBJ ve STL düz yapıları üretir. FBX ierarşisi ve malzeme çıkarımı bu versiyonda tam olarak doğrulanmamıştır.

hepsini bir araya getirmek

İşte bir OBJ dosyasını yükleme, düğümlerini inceleyen ve hem glTF hem de GLB’ye ihraç eden 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.");
    }
}

Özetle

Aspose.3D FOSS for Java size birden fazla biçimde tutarlı bir API sağlar.:

  • OBJ - Basit malzemelerle basit mesh değişimi.
  • STL - Geometri-sadece 3D baskı boru için biçimlendirilir.
  • GTT / GLB - Web ve gerçek zamanlı kullanım için modern PBR-kapalı biçim. GltfSaveOptions ile setContentType(FileContentType.BINARY) GLB üretimi için.
  • FBX - Sadece ithal; oyun motorlarından ve DCC araçlardan yükleme varlıkları için zengin bir format.

(Satın ve kurtarma seçenekleri ile ilgili sorularınızı yanıtlayın)ObjLoadOptions, StlLoadOptions, StlSaveOptions, GltfLoadOptions, GltfSaveOptions, FbxLoadOptionsİthalat veya ihracat sürecinin kontrolü için ince tahıl gerektirir.

Daha fazla bilgi için, ziyaret edin Aspose.3D Belgelendirme veya kaynağı inceleyin GitHub.