Kullanıma sunulmasından heyecan duyuyoruz Aspose.3D FOSS for .NET – .NET uygulamalarında 3D dosya formatlarıyla çalışmak için ücretsiz, açık kaynaklı bir kütüphane. Yerel bağımlılıkları olmayan saf bir C# çözümü olarak inşa edildi, kütüphane .NET 10.0 ve üzerini hedefliyor, bu da geniş bir proje ve ortam yelpazesi için erişilebilir olmasını sağlıyor.

Bu gönderi, kütüphanenin neler sunduğunu, nasıl başlanacağını ve bundan sonra nereye gidileceğini anlatıyor.

Aspose.3D FOSS for .NET Nedir?

Aspose.3D FOSS for .NET hafif bir 3D dosya işleme kütüphanesidir ve MIT license. Kütüphane, birkaç yaygın kullanılan formatta 3D modelleri yüklemenizi, incelemenizi, dönüştürmenizi ve kaydetmenizi sağlayan bir sahne grafiği API’si sunar. Kütüphane tamamen C# ile yazılmıştır ve dış yerel ikili dosyalara veya platforma özgü yapılandırmalara ihtiyaç duymaz.

Kaynak kodu GitHub’da mevcuttur: https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-NET

Öne Çıkanlar

  • Saf C# – P/Invoke yok, yerel kütüphane yok, platform kısıtlaması yok.
  • .NET 10.0+ uyumlu.
  • MIT lisanslı – kişisel, ticari veya özel projelerde kısıtlama olmadan kullanabilirsiniz.
  • Sahne grafiği mimarisi – düğümler, ağlar, kameralar ve malzemelerden oluşan tanıdık bir ağaç.
  • Çoklu format desteği – OBJ, STL, glTF 2.0, GLB, FBX, Collada ve 3MF dosyalarını okuyun ve yazın.

Hızlı Başlangıç

NuGet Kurulumu

NuGet paketini projenize ekleyin:

dotnet add package Aspose.3D.Converter --version 1.0.0

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

En basit kullanım senaryosu, bir formatta bir 3B dosyayı yüklemek ve başka bir formatta kaydetmektir. İşte OBJ’den STL’ye iki satırlık bir dönüşüm:

using Aspose.ThreeD;

var scene = new Scene();
scene.Open("cube.obj");
scene.Save("output.stl");

Bu Scene sınıf, merkezi giriş noktasıdır. Çağırın scene.Open() bir dosya yolu ile modeli yüklemek için, ardından çağırın Save() hedef yol ile. Kütüphane formatı dosya uzantısından çıkarır.

Sıfırdan Bir Sahne Oluşturma

Ayrıca sahneleri programlı olarak oluşturabilirsiniz:

using Aspose.ThreeD;
using Aspose.ThreeD.Entities;

var scene = new Scene();
var box = new Box(2, 2, 2);
var node = scene.RootNode.CreateChildNode("Box", box);

node.Transform.Translation = new FVector3(1, 2, 3);

scene.Save("scene.gltf");

Bu, yeni bir sahne oluşturur, kök altında bir kutu ilkelini çocuk düğüm olarak ekler, (1, 2, 3) koordinatlarına konumlandırır ve sonucu bir glTF dosyası olarak dışa aktarır.

Biçim-Özel Seçeneklerle Yükleme

Yükleme sürecinde daha ince bir kontrol gerektiğinde, her format özel bir seçenek sınıfı sunar. Örneğin, açık seçeneklerle bir STL dosyası yüklemek:

using Aspose.ThreeD;
using Aspose.ThreeD.Formats;

var scene = new Scene();
var opts = new StlLoadOptions();
scene.Open("part.stl", opts);

// Inspect the loaded scene
Console.WriteLine("Root children: " + scene.RootNode.ChildNodes.Count);

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

Bu scene.Open() metod, yükleme seçeneği türlerinden herhangi birini kabul eder: ObjLoadOptions, StlLoadOptions, GltfLoadOptions, FbxLoadOptions, ya da TmfLoadOptions.

Sahne Grafiğini Gezinme

Bir sahne yüklendikten sonra, içeriğini incelemek veya değiştirmek için düğüm ağacında dolaşabilirsiniz:

using Aspose.ThreeD;
using Aspose.ThreeD.Entities;

var scene = new Scene();
scene.Open("model.gltf");

foreach (var child in scene.RootNode.ChildNodes)
{
    Console.WriteLine("Node: " + child.Name);
    Console.WriteLine("  Translation: " + child.Transform.Translation);

    if (child.Entity is Mesh mesh)
    {
        Console.WriteLine("  Vertices: " + mesh.ControlPoints.Count);
    }
}

Bu desen, hata ayıklama, model içeriği hakkında raporlar oluşturma veya yeniden dışa aktarmadan önce bir sahnenin bölümlerini seçici olarak değiştirme için faydalıdır.

Dönüşümler

3B uzayda düğümlerin konumlandırılması şunun aracılığıyla yapılır Transform her birindeki özellik Node:

using Aspose.ThreeD;
using Aspose.ThreeD.Entities;

var scene = new Scene();

var parent = scene.RootNode.CreateChildNode("Parent");
parent.Transform.Translation = new FVector3(10, 0, 0);

var child = parent.CreateChildNode("Child");
child.Transform.Translation = new FVector3(5, 0, 0);
child.Transform.Scale = new FVector3(2, 2, 2);

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

scene.Save("transformed.gltf");

Transformlar, standart ebeveyn-çocuk kalıtım modelini izler: bir çocuğun dünya uzayındaki konumu, yerel transformu ile köke kadar olan tüm ata transformlarının birleşimidir.

Neler Dahildir

Kütüphane, 3B sahne-graf modeli etrafında tasarlanmış odaklanmış bir yetenek setiyle birlikte gelir.

Sahne Grafiği

Sahne grafiği API’nin omurgasını oluşturur. Her 3D dosyası bir ağaç yapısı olarak temsil edilir:

SınıfRol
SceneÜst düzey kapsayıcı; sahne grafiğinin kökü
NodeAğaçta adlandırılmış bir konum; dönüşümleri ve alt düğümleri tutar
EntityDüğümlere eklenen görsel nesneler için soyut temel
MeshPoligonal geometri – köşeler, yüzeyler, normaller
CameraSanal kamera tanımı
TransformBir düğüm için yerel çeviri, dönüş ve ölçek
GlobalTransformHesaplanmış dünya-uzayı dönüşümü

Yerleşik Primitifler

.NET sürümü, düğümlere doğrudan eklenebilen veya şuna dönüştürülebilen parametrik şekil sınıflarını içerir Mesh:

  • Kutu – eksen hizalı kutu, ayarlanabilir genişlik, yükseklik ve derinlik.
  • Küre – parametrik küre, ayarlanabilir yarıçap.
  • Silindir – yapılandırılabilir yarıçap ve yüksekliğe sahip parametrik silindir.
var sphere = new Sphere(1);
var mesh = sphere.ToMesh();
Console.WriteLine("Vertices: " + mesh.ControlPoints.Count);

Materyaller

Kütüphane birden fazla malzeme türü sunar:

  • LambertMaterial – klasik sadece difüz malzeme, ambient, diffuse, emissive ve reflective renk bileşenleriyle.
  • PhongMaterial – Lambert’ı speküler vurgular ve parlaklıkla genişletir.
  • PbrMaterial – temel renk, metalik, pürüzlülük, örtüşme ve doku yuvalarına sahip fiziksel tabanlı render malzemesi.

Matematik Araçları

Bu Aspose.ThreeD namespace, temel matematik ilkel tiplerini içerir:

  • FVector3 – konumlar, yönler ve ölçek için tek duyarlıklı 3 bileşenli vektör. Şu tarafından kullanılır: Transform.Translation ve Transform.Scale.
  • Vector4 – kontrol noktaları ve normaller için tek duyarlıklı 4 bileşenli vektör.
  • Matrix4 – 4x4 dönüşüm matrisi.
  • Quaternion – dönüşüm temsili. Şu tarafından kullanılır: Transform.Rotation.
  • BoundingBox – uzamsal sorgular için eksen hizalı sınırlayıcı kutu.
var a = new FVector3(1, 0, 0);
var b = new FVector3(0, 1, 0);
// Vector operations for spatial computations

Yükleme ve Kaydetme Seçenekleri

Her formatın, içe ve dışa aktarma davranışını kontrol etmenizi sağlayan özel seçenek sınıfları vardır:

BiçimYükleme SeçenekleriKaydetme Seçenekleri
OBJObjLoadOptionsObjSaveOptions
STLStlLoadOptionsStlSaveOptions
glTF / GLBGltfLoadOptionsGltfSaveOptions
FBXFbxLoadOptionsFbxSaveOptions
3MFTmfLoadOptionsTmfSaveOptions

Örneğin, koordinat çevirme ve normal normalleştirme ile bir OBJ dosyasını yüklemek için:

var opts = new ObjLoadOptions();
opts.FlipCoordinateSystem = true;
opts.NormalizeNormal = true;

scene.Open("model.obj", opts);

Desteklenen Biçimler

Aşağıdaki tablo, Aspose.3D FOSS for .NET’ın okuyup yazabildiği biçimleri özetlemektedir.

BiçimUzantıİçe AktarDışa AktarNotlar
OBJ.objEvetEvetMTL malzemeleriyle
STL.stlEvetEvetİkili + ASCII
glTF 2.0.gltfEvetEvetJSON formatı
GLB.glbEvetEvetİkili glTF
FBX.fbxEvetEvetASCII ve ikili modlar
Collada.daeEvetEvet
3MF.3mfEvetEvetZIP-tabanlı 3D üretim formatı

Biçim Seçim Kılavuzu

Doğru biçimi seçmek kullanım durumunuza bağlıdır:

  • OBJ 3D araçları arasında en yüksek uyumluluğa ihtiyacınız olduğunda idealdir. Neredeyse her modelleme uygulaması OBJ’yi okuyup yazabilir. Ağ veri alışverişi için iyi çalışır ancak yalnızca eşlik eden MTL dosyaları aracılığıyla temel malzeme bilgilerini taşır.
  • STL 3D baskı iş akışları için tercih edilen formattır. Malzeme veya sahne hiyerarşisi olmadan ham üçgenlenmiş geometriyi depolar, bu da dilimleyici yazılımının tam olarak beklediği şeydir.
  • glTF web ve gerçek zamanlı 3D için modern standarttır. PBR malzemeleri, tam sahne hiyerarşilerini destekler ve verimli iletim için tasarlanmıştır. Web tabanlı görüntüleyiciler oluştururken veya herhangi bir gerçek zamanlı renderleme hattını hedeflerken glTF’yi kullanın.
  • FBX oyun geliştirme ve dijital içerik oluşturma iş akışlarına derinlemesine entegre edilmiştir. Hiyerarşiler ve malzemeler dahil zengin sahne verilerini destekler. Aspose.3D FOSS for .NET supports FBX içe ve dışa aktarım hem ASCII hem de ikili modlarda.
  • 3MF zengin meta verileri, malzemeleri ve tek bir ZIP-tabanlı pakette çoklu nesne sahnelerini destekleyen modern bir 3D baskı formatıdır.

Bilinen Sınırlamalar

Scene.Render() dır desteklenmiyor FOSS sürümünde. Bu yöntemi çağırmak bir NotImplementedException. Kütüphane, dosya tabanlı 3D işleme – yükleme, manipülasyon, dönüştürme ve modelleri kaydetme – için tasarlanmıştır; gerçek zamanlı bir ekrana render etmeye göre değil.

Açık Kaynak ve Lisanslama

Aspose.3D FOSS for .NET şu lisans altında yayınlanmıştır MIT Lisansı. Bu, şunları yapabileceğiniz anlamına gelir:

  • Kütüphaneyi ticari ve tescilli uygulamalarda kullanmak.
  • Kaynak kodu ihtiyaçlarınıza göre değiştirmek.
  • Kütüphaneyi kendi yazılımınızın bir parçası olarak dağıtın.

MIT lisansının belirttiği şartların ötesinde hiçbir telif ücreti, kullanım sınırı ve atıf gereksinimi yoktur.

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

Sistem Gereksinimleri

GereksinimAyrıntı
.NET sürümü10.0 or later
BağımlılıklarYok (saf C#)
Platformlar.NET çalıştıran herhangi bir platform
Paket yöneticisiNuGet

Başlarken

Başlamanıza yardımcı olacak kaynaklar şunlardır:

  • Dokümantasyon – kapsamlı kılavuzlar ve API yürütmeleri şurada mevcuttur: Aspose.3D dokümantasyon sitesi.
  • Bilgi Tabanı – pratik nasıl yapılır makaleleri ve sorun giderme ipuçları Aspose.3D KB.
  • API Referansı – ayrıntılı sınıf ve yöntem referansı Aspose.3D API Referansı.
  • Kaynak Kodu – gözat ve katkıda bulunun GitHub.
  • NuGet – paket şu şekilde yayınlanır Aspose.3D.Converter NuGet üzerinde.

Yaygın Kullanım Senaryoları

İşte Aspose.3D FOSS for .NET’in iyi uyduğu bazı pratik senaryolar:

Biçim Dönüştürme Boru Hatları

Birçok ekip 3D varlıkları bir formatta alır ancak başka bir formatta ihtiyaç duyar. Tasarım ekibi FBX ile çalışırken web ekibi glTF’ye ihtiyaç duyabilir. Kütüphane, otomatik dönüşüm boru hatları oluşturmanıza olanak tanır:

using Aspose.ThreeD;
using Aspose.ThreeD.Formats;

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

scene.Save("asset.glb");

3D Model Inspection and Validation

Uygulamanıza bir 3D varlık entegre etmeden önce, içeriğini doğrulamak isteyebilirsiniz – düğüm sayılarını kontrol etmek, geometriyi doğrulamak veya beklenen öğelerin mevcut olduğunu onaylamak:

using Aspose.ThreeD;
using Aspose.ThreeD.Entities;

var scene = new Scene();
scene.Open("model.obj");

int nodeCount = scene.RootNode.ChildNodes.Count;
Console.WriteLine("Top-level nodes: " + nodeCount);

foreach (var child in scene.RootNode.ChildNodes)
{
    if (child.Entity is Mesh mesh)
    {
        Console.WriteLine(child.Name + ": "
            + mesh.ControlPoints.Count + " vertices");
    }
}

Sahne Montajı

Birden fazla modeli yükleyebilir ve tek bir sahnede birleştirebilirsiniz:

using Aspose.ThreeD;

var scene = new Scene();

var part1 = new Scene();
part1.Open("chassis.obj");

var part2 = new Scene();
part2.Open("wheels.obj");

// Add nodes from each part into the combined scene
foreach (var child in part1.RootNode.ChildNodes)
{
    scene.RootNode.ChildNodes.Add(child);
}
foreach (var child in part2.RootNode.ChildNodes)
{
    scene.RootNode.ChildNodes.Add(child);
}

scene.Save("assembled.gltf");

Sırada Ne Var?

Gelecek gönderilerde şunları ele alacağız:

  • scene-graph API’sinin, malzemelerin ve matematik yardımcı programlarının temel özelliklerine derinlemesine bir bakış.
  • Desteklenen her 3D formatı – OBJ, STL, glTF, FBX ve 3MF – ile çalışmaya yönelik pratik bir rehber; yükleme/kaydetme seçenekleri ve toplu dönüşüm desenlerini içerir.

Takipte kalın ve kütüphaneyi keşfetmekten çekinmeyin; geri bildirimlerinizi GitHub’ta paylaşabilirsiniz.