Kullanıma sunulacağını duyurmaktan 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 sonrasını 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. Sahne grafiği API’si sunar; bu sayede birkaç yaygın formatta 3D modelleri yükleyebilir, inceleyebilir, dönüştürebilir ve kaydedebilirsiniz. Kütüphane tamamen C# ile yazılmıştır ve dış yerel ikili dosyalara ya da platforma özgü yapılandırmalara ihtiyaç duymaz.

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

Ana Özellikler

  • Saf C# – P/Invoke yok, yerel kütüphane yok, platform kısıtlaması yok.
  • .NET 10.0+ uyumlu.
  • MIT licensed – kişisel, ticari veya tescilli 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 --version 26.1.0

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

En basit kullanım senaryosu, bir formatta bir 3D dosyasını 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 tahmin eder.

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, veya 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 sahneyi yeniden dışa aktarmadan önce belirli bölümlerini seçerek değiştirme için faydalıdır.

Dönüşümler Uygulama

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

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

Neler Dahildir

Kütüphane, 3B sahne grafiği 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ğacın içinde adlandırılmış bir konum; dönüşümler 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 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 modelini speküler vurgular ve parlaklıkla genişletir.
  • PbrMaterial – fiziksel tabanlı render malzemesi, base color, metallic, roughness, occlusion ve texture slotlarıyla.

Matematik Yardımcı Araçları

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

  • FVector3 – single-precision 3 bileşenli vektör, konumlar, yönler ve ölçek için. Şu tarafından kullanılır: Transform.Translation ve Transform.Scale.
  • Vector4 – single-precision 4 bileşenli vektör, kontrol noktaları ve normaller için.
  • Matrix4 – 4x4 dönüşüm matrisi.
  • Quaternion – rotasyon 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 Formatlar

Aşağıdaki tablo, Aspose.3D FOSS for .NET tarafından okunup yazılabilen formatları özetlemektedir.

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

Format Seçim Kılavuzu

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

  • OBJ en fazla uyumluluğa ihtiyaç duyduğunuzda 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 üçgenleştirilmiş geometriyi depolar; bu da dilimleyici yazılımı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 üst veri, malzemeler 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 – model yükleme, manipülasyon, dönüştürme ve kaydetme – için tasarlanmıştır; gerçek zamanlı bir ekrana render etmek yerine.

Açık Kaynak ve Lisanslama

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

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

MIT lisansının belirttiği dışında 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ırabilen herhangi bir platform
Paket yöneticisiNuGet

Başlarken

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

  • Dokümantasyon – kapsamlı rehberler ve API yürütmeleri aşağıdaki yerde 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ı adresinde Aspose.3D API Referansı.
  • Kaynak Kodu – gözatın ve katkıda bulunun GitHub.
  • NuGet – paket şu şekilde yayınlanmıştır Aspose.3D NuGet üzerinde.

Yaygın Kullanım Senaryoları

İşte Aspose.3D FOSS for .NET’nin 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ışabilirken web ekibi glTF’ye ihtiyaç duyabilir. Kütüphane, otomatik dönüşüm 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

Bir 3D varlığı uygulamanıza entegre etmeden önce, içeriğini doğrulamak isteyebilirsiniz — düğüm sayısını kontrol etmek, geometrileri 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ıradaki

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

  • Sahne grafiği 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 desenleri dahil.

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