Biz bu konunun mevcut olduğunu duyurmak için heyecanlıyız. 3D FOSS için Java Java uygulamalarında 3D dosya biçimleri ile çalışmak için ücretsiz, açık kaynaklı bir kütüphane. yerli bağımlılıkları olmayan saf Java çözümü olarak inşa edilmiştir, kütüphanesi Java 21 ve daha sonra çalışır, geniş bir proje ve ortamlara erişilebilir hale getirir.

Bu yazı kütüphanenin ne sunduğunu, nasıl başlatılacağını ve buradan nereye gideceğini anlatıyor.

Java için 3D FOSS nedir?

Aspose.3D FOSS for Java, aşağıda yayınlanan hafif 3D dosya işleme kütüphanesidir. lisansım.3D modellerini yüklemenize, incelemenize ve çeşitli yaygın olarak kullanılan biçimlerde kaydetmenize olanak tanıyan bir sahne grafik API sağlar. kütüphane tamamen Java’da yazılmıştır ve dış yerli ikili veya platform özel yapılandırmalar gerektirmez.

Kaynak kodu GitHub’da mevcuttur: HTTPS://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-Java için

Anahtar Yükselişler

  • Temiz Java - Hiçbir JNI, hiçbir yerli kütüphane, platform kısıtlamaları yok.
  • Java 21+ İndirme uyumlu olmak.
  • lisanslı - Kişisel, ticari veya mülkiyet projelerinde kısıtlamalar olmaksızın kullanılır.
  • Scene-Graph Arşivi - tanıdık bir ağaç düğümler, mesheler, kameralar ve malzemeler.
  • Çok Formatlı Destek - OBJ, STL, glTF 2.0 ve GLB dosyalarını okuyun ve yazın; FBX dosyasını oku.

Hızlı Başlangıç

Maven kurulum

Aşağıdaki bağımlılığı sizin için ekleyin. pom.xml:

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

İlk dönüşümünüzü

En basit kullanım durumunda, bir formatta 3D dosyasını yüklemek ve başka bir biçimde kaydetmektir.:

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");
    }
}

O zamanlar Scene Sınıf, merkez giriş noktasıdır. çağrı Scene.fromFile() bir dosya yolu ile bir model yüklemek için, sonra arama save() Kütüphane dosya uzantısından format içerir.

Scratch’ten bir sahne oluşturmak

Ayrıca programlı olarak sahneler oluşturabilirsiniz:

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");
    }
}

Bu yeni bir sahne oluşturur, kökün altında “Kutu” adı verilen bir çocuk düğmesi eklenir, koordinatlarda yerleştirilir (1, 2, 3), ve sonuç glTF dosyası olarak ihraç edilir.

Format-Specific Options ile Yükleme

Yükleme sürecinin daha iyi kontrolüne ihtiyacınız olduğunda, her biçim özel bir seçenek sınıfı sağlar. Örneğin, açık seçeneği olan STL dosyasını yüklemek:

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");
    }
}

O zamanlar Scene.fromFile() statik yöntem yük seçeneği türlerinden herhangi birini kabul eder: ObjLoadOptions, StlLoadOptions, GltfLoadOptions,veya FbxLoadOptions.

Sahne Graph’i geçmek

Bir sahne yüklendiğinde, içeriğini kontrol etmek veya değiştirmek için düğüm ağacına yürüyebilirsiniz:

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());
            }
        }
    }
}

Bu desen, debugging için yararlıdır, model içeriği hakkında raporlar oluşturur veya yeniden ihraç edilmeden önce bir sahnenin parçalarını seçici olarak değiştirir.

Transformasyonlar Uygulaması

3D alanında yerleştirme düğümleri, Transform Her nesne üzerinde 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");
    }
}

Transformler standart ebeveyn-çocuk miras modeli takip eder: bir çocuğun dünya-uzay pozisyonu yerel dönüşümünün kombinasyonudur ve tüm atalar köküne kadar dönüşür.

Ne içeriyor

Kütüphane, 3D sahne-grafik modeli etrafında tasarlanan odaklanmış bir yetenek seti ile gemiler.

sahne grafiği

Sahne grafikleri API’nin arka planıdır. her 3D dosyası bir ağaç yapısı olarak temsil edilir:

SınıfıRolü
Sceneüst düzey konteyner; sahne grafiklerinin kökü
NodeAğaçta bir isim pozisyonu; dönüşümleri ve çocuk düğmeleri tutar
EntityNode’lara bağlı görsel nesneler için abstrak taban
MeshPolygonal geometri - dikeyler, yüzler ve normal
CameraVirtual Camera Definition Özellikleri
TransformYerel çeviri, dönüş ve bir düğüm için ölçek
GlobalTransformBilgisayar Dünya-Uzay Dönüşümleri

Malzeme

Kütüphane, PBR (Fiziksel Temel Rendering) malzeme modeli sunar:

  • PbrMaterial - fiziksel olarak albed, metallik, sertlik ve emisyonlu renk ile render malzemesi. bu Java baskısında mevcut olan tek beton malzeme sınıfıdır.

Matematiksel Kullanımlar

O zamanlar com.aspose.threed Paket temel matematik ilkeleri içerir:

  • Vektör 3 - pozisyonlar, yönler ve renkler için 3 bileşenli vektör.
  • Matrix 4 Yorumları 4x4 dönüşüm matrisini kullanır.
  • Quaternion Çevre • Rotasyon temsilciliği.
  • BoundingBox - Uzay soruları için eksenli bir sınır kutusu.
Vector3 a = new Vector3(1, 0, 0);
Vector3 b = new Vector3(0, 1, 0);
Vector3 c = Vector3.add(a, b); // (1, 1, 0)

Yükleme ve kaydetme seçenekleri

Her format, ithalat ve ihracat davranışlarını kontrol etmenizi sağlayan özel seçenek sınıfları içerir:

Format YapılarıYükleme seçenekleriSeçenekleri kurtarmak
OBJObjLoadOptionsObjSaveOptions
STLStlLoadOptionsStlSaveOptions
GTT / GLBGltfLoadOptionsGltfSaveOptions
FBXFbxLoadOptions(Sadece İthalat için)

Örneğin, glTF’yi güzel basılmış JSON ve bir koordinasyon sistemi ile ihraç etmek için:

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

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

Desteklenen Formatlar

Aşağıdaki tablo Aspose.3D FOSS for Java’nın okuduğu ve yazabileceği biçimleri özetler.

Format YapılarıGenişletmeİthalatihracatNotlar
OBJ.objEvetEvetMTL malzemeleri ile
STL.stlEvetEvetBinary + ASCII
GTTF 2.0 için.gltfEvetEvetJSON formatında
GLB.glbEvetEvetBinary GlTF ile GltfSaveOptions
FBX.fbxEvetHayırSadece ithalat

OBJ, STL, glTF ve GLB hem yükleme hem de tasarruf desteği. FBX sadece ithalat için desteklenir.

Format Seçim Rehberi

Doğru formatı seçmek kullanım durumuna bağlıdır:

  • OBJ 3D araçlar arasında maksimum uyumluluk gerektirdiğinde ideal. neredeyse her model uygulama okuyacak ve yazabilir OBJ. Mesh veri değişimi için iyi çalışır ama sadece ortak MTL dosyaları aracılığıyla temel materyal bilgileri taşır.
  • STL 3D baskı çalışma akışları için seçenek biçimi. malzeme veya sahne hiyerarşisi olmadan toprak üçgen geometri depolamaktadır, bu tam olarak kaydırıcı yazılımı bekliyor. Eğer boru hattı bir 3d yazıcı ile sona eriyorsa, STL basit bir seçimdir.
  • GTTF Web ve gerçek zamanlı 3D için modern standart. PBR malzemeleri, tam sahne hiyerarşileri destekler ve verimli iletim için tasarlanmıştır. web tabanlı izleyiciler inşa ederken glTF kullanın, three.js veya Babylon.j ile çalışın ya da herhangi bir gerçek saat rendering boru hattını hedeflemek.
  • FBX Oyun geliştirme ve dijital içerik oluşturma çalışma akışlarına derinlemesine entegre edilmiştir. zengin sahne verilerini, hierarşileri ve materyalleri de dahil olmak üzere destekler. Aspose.3D FOSS for Java FBX desteği Sadece ithalat - FBX varlıklarını yüklemek ve diğer biçimlere dönüştürmek için kullanın.

Bilinen Sınırlamalar

Önemli olan bu konuda dikkat edilmesi, Scene.render() Onu Destekleme yok bu ilanı beğen Eki 14 Calling this method will throw a UnsupportedOperationException.Kütüphane, dosya tabanlı 3D işleme - yükleme, manipülasyon, dönüşüm ve tasarruf modellerine - gerçek zamanlı bir ekran görüntüleme yerine.

Açık Kaynak ve Lisans

Aspose.3D FOSS for Java aşağıda yayınlanır Mİ lisansı.Bu, özgür olduğunuz anlamına gelir:

  • Kütüphaneyi ticari ve mülkiyet uygulamalarında kullanın.
  • İhtiyaçlarınıza uygun olarak kaynak kodunu değiştirin.
  • Kütüphanenin kendi yazılımınızın bir parçası olarak dağıtın.

Ücretler, kullanım sınırları ve MIT lisansının belirttiği dışındaki atama gereksinimleri yoktur.

Tam kaynak kodu GitHub’da barındırılır ve katkıları memnuniyetle karşılanır: HTTPS://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-Java için

Sistem Gereksinimleri

İhtiyaçlarDetaylı
Java versiyonu21 or later
BağımlılıklarTemiz Java (Tam Java)
PlatformlarJVM’yi çalışan herhangi bir platform
Yapım AracıMaven ( tavsiye edilen )

Başlamaya başlar

İşte yukarı çıkmanıza ve çalışmanızamanıza yardımcı olacak kaynaklar:

  • Dokümanlık - kapsamlı rehberler ve API yürüyüş yolları mevcuttur Aspose.3D belgesel sitesi.
  • Bilgi Temeli - makaleler ve sorun çözme ipuçları ile ilgili pratik nasıl- 3D KB için.
  • API Referansları - ayrıntılı sınıf ve yöntem referansı ile Aspose.3D API Referansları.
  • Kaynak Kodu - Browse ve katkıda bulunmak için GitHub.
  • Maven Merkez - Paket yayınlanır, org.aspose:aspose-3d-foss:26.5.0 Maven merkezinde.

Ortak Kullanım Olayları

İşte Aspose.3D FOSS for Java’nın iyi uyuduğu bazı pratik senaryolar:

Konversiyon Pipelinleri

Birçok takım bir formatda 3D varlıkları alır, ancak başka bir formatta ihtiyaç duyar. bir tasarım ekibi FBX’te çalışabilir ve web ekibinin glTF’ye ihtiyacı vardır. kütüphane otomatik dönüşüm borularını oluşturmanıza olanak tanır:

// 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

Bir 3D varlığını uygulamaya entegre etmeden önce, içeriğini doğrulamak isteyebilirsiniz - düğüm sayımlarını kontrol etmek, geometri doğrulaymak veya beklenen öğelerin mevcut olduğunu doğruladı:

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");
    }
}

Sahne Toplantısı

Birden fazla model yüklemek ve bunları tek bir sahneye birleştirmek mümkündür:

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");

Next Ne Olur

Gelecekteki yazılarımızda şunları kapsayacağız:

  • Bir derin dalış sahne-grafik API, malzeme ve matematik araçları anahtar özelliklerine.
  • Her desteklenen 3D format - OBJ, STL, glTF ve FBX - ile çalışmak için pratik bir rehber, yük / kaydetme seçenekleri ve batch dönüşüm desenleri de dahil olmak üzere.

Sıkı kalın ve kütüphanesini keşfetmek ve geri bildiriminizi GitHub’da paylaşmak için özgür hissedin.