ما خوشحالیم که در دسترس بودن این 3D FOSS برای جاوا – یک کتابخانه رایگان و منبع باز برای کار با فرمت های فایل 3D در برنامه های جاوا ساخته شده به عنوان یک راه حل خالص جاو بدون وابستگی های بومی، این کتابچه بر روی جاوات 21 و بعد از آن اجرا می شود، آن را قابل دسترس برای طیف گسترده ای از پروژه ها و محیط ها.
این پست از طریق آنچه که کتابخانه ارائه می دهد، چگونه شروع کنید و از کجا بروید.
3D FOSS برای جاوا چیست؟?
Aspose.3D FOSS برای جاوا یک کتابخانه پردازش فایل 3D سبک است که در زیر… مجوز MIT.این یک API صحنه گراف فراهم می کند که به شما اجازه می دهد تا مدل های 3D را در چندین فرمت به طور گسترده ای بارگذاری، بررسی، تبدیل و ذخیره کنید. کتابخانه کاملاً در جاوا نوشته شده است و نیازی به تنظیمات باینری یا پلتفرم خاص خارجی ندارد.
کد منبع در GitHub موجود است: https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-Java
برجسته ها
- جاوا خالص - هیچ JNI، هیچ کتابخانه های بومی، محدودیت های پلت فرم.
- جاوا 21+ سازگار است.
- مجوز می باشد استفاده از آن در پروژه های شخصی، تجاری یا مالکیت بدون محدودیت.
- معماری صحنه گراف - یک درخت آشنا از گره ها، چوب ها و دوربین ها.
- پشتیبانی چند فرمت – خواندن و نوشتن فایل های OBJ، STL، glTF 2.0، و GLB؛ خوانده شده فایل FBX.
سریع شروع
Maven نصب
این اعتیاد را به خودتان اضافه کنید. pom.xml:
<dependency>
<groupId>org.aspose</groupId>
<artifactId>aspose-3d-foss</artifactId>
<version>26.5.0</version>
</dependency>اولین تبدیل شما
ساده ترین مورد استفاده این است که یک فایل 3D را در یک فرمت بارگذاری کنید و آن را به فرستنده دیگری ذخیره کنید.در اینجا یک تبدیل دو خط از OBJ به STL:
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");
}
}
و این Scene کلاس، نقطه ورودی اصلی است. تماس Scene.fromFile() با یک مسیر فایل برای بارگذاری یک مدل، سپس تماس بگیرید save() با مسیر هدف، کتابخانه فرمت را از افزونه فایل وارد می کند.
ساختن صحنه از Scratch
شما همچنین می توانید صحنه ها را به صورت برنامه نویسی بسازید:
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");
}
}
این صحنه جدیدی را ایجاد می کند، یک گره کودک به نام “صندوق” زیر ریشه اضافه می شود، آن را در هماهنگی ها قرار می دهد (1، 2، 3) و نتیجه را به عنوان یک فایل glTF صادر می کنند.
با گزینه های خاص فرمت
هنگامی که شما نیاز به کنترل دقیق تر در فرآیند بارگذاری، هر فرمت ارائه می دهد یک کلاس گزینه اختصاص داده شده.به عنوان مثال، بارگیری یک فایل STL با گزینه های صریح:
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");
}
}
و این Scene.fromFile() روش استاتیک هر یک از انواع گزینه های بار را می پذیرد: ObjLoadOptions, StlLoadOptions, GltfLoadOptions,یا FbxLoadOptions.
عبور از صحنه گراف
هنگامی که یک صحنه بارگذاری می شود، شما می توانید درخت گره را برای بررسی یا تغییر محتوا آن راه بروید:
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());
}
}
}
}
این الگوی برای تخلیه، تولید گزارش های مربوط به محتوای مدل یا تغییر انتخابی بخش هایی از صحنه قبل از صادرات مجدد مفید است.
استفاده از Transforms
قرار دادن گره ها در فضای 3D از طریق Transform موضوع در هر 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");
}
}
تحولات از الگوی معمولی میراث پدر و فرزند پیروی می کنند: موقعیت جهانی یک کودک ترکیبی از تحول محلی آن است و همه اجداد تا ریشه تبدیل می شوند.
چه چیزی شامل می شود
کتابخانه کشتی با مجموعه ای متمرکز از توانایی های طراحی شده در اطراف مدل صحنه-گرافیک 3D.
صحنه گراف
نمودار صحنه پشتیبان API است.هر فایل 3D به عنوان یک ساختار درخت نشان داده شده است:
| کلاس ها | نقش |
|---|---|
Scene | کانتینر سطح بالا؛ ریشه از نمودار صحنه |
Node | موقعیت نامیده شده در درخت؛ نگه داشتن انتقال و گره های کودک |
Entity | پایه های خلاصه برای اشیاء بصری که به گره ها متصل می شوند |
Mesh | جغرافیای چندگانه - چشمان، عمودی ها و عادی ها |
Camera | تعریف دوربین مجازی |
Transform | ترجمه محلی، چرخش و مقیاس برای یک گره |
GlobalTransform | تحول جهانی محاسباتی |
مواد
کتابخانه یک مدل مواد PBR (Rendering مبتنی بر فیزیکی) ارائه می دهد:
- PbrMaterial – فیزیکی مبتنی بر رندر مواد با آلبیدو، فلزیت، سختی، رنگ انتشار و شفافیت.این تنها کلاس مواد مادی در دسترس در نسخه جاوا است.
ریاضیات مفید
و این com.aspose.threed این مجموعه شامل اصول اولیه ریاضیات است:
- وکتور 3 3-تولید کننده سه عنصر برای موقعیت ها، جهت ها و رنگ ها.
- ماتریس 4 4x4 ماتریس تبدیل.
- ۴۴۴ - نمایندگی چرخشی.
- BoundingBox - جعبه محدود محور برای پرسش های فضایی.
Vector3 a = new Vector3(1, 0, 0);
Vector3 b = new Vector3(0, 1, 0);
Vector3 c = Vector3.add(a, b); // (1, 1, 0)
گزینه های ذخیره و شارژ
هر فرمت دارای کلاس های گزینه اختصاص داده شده است که به شما اجازه می دهد تا رفتار واردات و صادرات را کنترل کنید:
| فرمول | گزینه های بارگذاری | ذخیره گزینه ها |
|---|---|---|
| OBJ | ObjLoadOptions | ObjSaveOptions |
| STL | StlLoadOptions | StlSaveOptions |
| GLTF / GLB | GltfLoadOptions | GltfSaveOptions |
| FBX | FbxLoadOptions | (فقط واردات می شود) |
به عنوان مثال، برای صادرات glTF با JSON پرینت و یک سیستم هماهنگی فلیپ:
GltfSaveOptions opts = new GltfSaveOptions();
opts.setFlipCoordinateSystem(true);
opts.setPrettyPrint(true);
scene.save("output.gltf", opts);
فرمت های پشتیبانی شده
جدول زیر شامل فرمت هایی است که Aspose.3D FOSS برای جاوا می تواند بخواند و بنویسد.
| فرمول | تمدید | واردات | صادرات | یادداشت ها |
|---|---|---|---|---|
| OBJ | .obj | بله | بله | با مواد MTL |
| STL | .stl | بله | بله | دوگانه + ASCII |
| GTTF 2.0 | .gltf | بله | بله | فرمت JSON |
| GLB | .glb | بله | بله | GTTF با استفاده از GltfSaveOptions |
| FBX | .fbx | بله | نه | واردات فقط |
OBJ، STL، glTF و GLB از هر دو شارژ و صرفه جویی پشتیبانی می کنند. FBX برای واردات تنها پشتیبانی شده است.
راهنمای انتخاب فرم
انتخاب فرم مناسب بستگی به مورد استفاده شما دارد:
- OBJ ایده آل است که در صورت نیاز به حداکثر سازگاری از طریق ابزارهای 3D. تقریبا هر برنامه مدل سازی می تواند OBJ را بخواند و بنویسد. آن را خوب برای تبادل داده های ماساژ کار می کند اما تنها اطلاعات اساسی مواد را از روی فایل های MTL همراه حمل می کنند.
- STL این فرمت انتخاب برای جریان های کار چاپ 3D است. آن را ذخیره ژئومتری سه گانه خام بدون مواد و یا سلسله مراتبی صحنه، که دقیقا همان چیزی است که نرم افزار اسلایدر انتظار می رود. اگر خط لوله شما در یک پرینتر 3d به پایان می رسد، STL انتخاب ساده است.
- GTTF این استاندارد مدرن برای وب و زمان واقعی 3D است. آن را پشتیبانی از مواد PBR، سلسله مراتب صحنه کامل، و طراحی شده برای انتقال موثر است استفاده از glTF در هنگام ساختن مخاطبان مبتنی بر وب، کار با three.js یا Babylon.JS، یا هدف قرار دادن هر خط لوله رندر در زمان واقع.
- FBX این به طور عمیق در توسعه بازی و جریان های کار ایجاد محتوای دیجیتال ادغام شده است. آن را پشتیبانی از داده های صحنه غنی از جمله سلسله مراتب و مواد. Aspose.3D FOSS برای جاوا پشتیبانی FBX واردات فقط – از آن برای بارگذاری دارایی های FBX استفاده کنید و آنها را به فرمت های دیگر تبدیل کنید.
محدودیت های شناخته شده
مهم است که توجه داشته باشیم که Scene.render() است حمایت نمی شود در این مقاله به عنوان مثال، با استفاده از این روش، یک UnsupportedOperationException.کتابخانه برای پردازش 3D مبتنی بر فایل طراحی شده است - بارگذاری، دستکاری، تبدیل و ذخیره سازی مدل ها - به جای ارائه در زمان واقعی به یک صفحه نمایش.
منبع باز و مجوز
Aspose.3D FOSS برای جاوا منتشر می شود زیر مجوز MIT.این بدان معناست که شما آزاد هستید:
- استفاده از کتابخانه در برنامه های تجاری و خصوصی.
- کد منبع را تغییر دهید تا نیازهای شما را برآورده کند.
- کتابخانه را به عنوان بخشی از نرم افزار خود توزیع کنید.
هیچ هزینه ای برای پاداش، محدودیت های استفاده و هیچ الزامی برای اعطای فراتر از آنچه که مجوز MIT مشخص می کند وجود ندارد.
کد منبع کامل در GitHub میزبانی شده است و مشارکت ها خوش آمدید: https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-Java
سیستم مورد نیاز
| نیازها | جزئیات |
|---|---|
| نسخه جاوا | 21 or later |
| اعتیاد | هیچ (Java خالص) |
| پلتفرم ها | هر پلتفرم که یک JVM را اجرا می کند |
| ساخت ابزار | مایل ( توصیه شده ) |
شروع می شود
در اینجا منابع برای کمک به شما بالا رفتن و اجرا:
- مستندات – راهنمای جامع و پیاده روی API در دسترس هستند در صفحه اصلی » آرشیو برچسب ها: Aspose.3D Documentation Site.
- پایه دانش - روش های عملی برای مقالات و راهنمایی های حل مشکلات در… 3D KB.
- آتش نشانی - در مورد روش و روش های مطالعه به صورت دقیق در Aspose.3D API ارجاع.
- کد منبع - مرور و کمک به GitHub.
- مرکز Maven - این بسته به عنوان
org.aspose:aspose-3d-foss:26.5.0در مرکز شهر ماوین.
موارد استفاده مشترک
در اینجا برخی از سناریوهای عملی که در آن Aspose.3D FOSS برای جاوا مناسب است:
فرمت تبدیل لوله ها
بسیاری از تیم ها دارایی های 3D را در یک فرمت دریافت می کنند اما به آنها نیاز دارند.یک تیم طراحی ممکن است در FBX کار کند در حالی که تیم وب نیاز به glTF دارد.کتابخانه اجازه می دهد تا شما بتوانید لوله های تبدیل خودکار بسازید:
// 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
قبل از ادغام یک دارایی 3D در برنامه شما، ممکن است بخواهید محتوای آن را تأیید کنید – چک کردن شمارش گره ها، بررسی ژئومتری یا تایید اینکه عناصر مورد انتظار وجود دارد:
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");
}
}
مجمع صحنه ای
شما می توانید چندین مدل را بارگذاری کنید و آنها را به یک صحنه ترکیب کنید:
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");
بعدی چه چیزی است
در پست های بعدی، ما شامل:
- یک غوطه وری عمیق در ویژگی های کلیدی API صحنه گراف، مواد و ابزار ریاضی.
- راهنمای عملی برای کار با هر فرمت 3D پشتیبانی شده - OBJ، STL، glTF و FBX - از جمله گزینه های بار / ذخیره سازی و الگوهای تبدیل بسته.
با دقت بمانید و احساس آزادی کنید تا کتابخانه را بررسی کنید و بازخورد خود را در GitHub به اشتراک بگذارید.