我们很高兴能宣布可用性。 Aspose3D FOSS for Java 用途 作为一个纯粹的Java解决方案,没有原生依赖性,图书馆运行在Jav 21和以后,使其可访问广泛的项目和环境。.

此帖子讲述了图书馆提供的内容,如何开始以及从这里去哪里。.

什么是3D FOSS为Java?

Aspose.3D FOSS for Java 是一本轻量级 3D 文件处理图书馆,在下方发布。 许可证.它提供一个场景图形API,允许您在多个广泛使用的格式上加载、检查、转换和保存3D模型。.

源代码在GitHub上可用: 首頁 / 電視節目 / HTTPS://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-Java

关键突出点

  • 清洁Java 没有JNI,没有本地图书馆,也没有平台限制。.
  • 雅各 21+ 兼容。.
  • 许可的MIT 使用它在个人、商业或所有项目中,无限制。.
  • 舞台图形建筑 熟悉的树,由节点、板块、摄像机和材料组成。.
  • 多格式支持 阅读和写作OBJ、STL、glTF 2.0和GLB文件;阅读 FBX文件。.

快速开始

马文安装

加入下列依赖性到您的 pom.xml:

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

你的第一次转换

最简单的使用案例是将一个3D文件加载到一个格式,并将其保存到另一个。:

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

此模式可用于解析、产生模型内容的报告或在重新出口之前选择性地修改场景部分。.

应用转型

通过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(物理基于流动)材料模型:

  • PbrMaterial 物理上基于的呈现材料,含有 albedo、金属性、粗糙度、排放色彩和透明度。.

数学用途

那是 com.aspose.threed 包包含基本数学原始物质:

  • 维克托3 对位置、方向和颜色的3组 vector。.
  • 马特里克4 4×4 转型矩阵。.
  • 四角形 旋转代表性。.
  • BoundingBox 轴合并的边界盒用于空间查询。.
Vector3 a = new Vector3(1, 0, 0);
Vector3 b = new Vector3(0, 1, 0);
Vector3 c = Vector3.add(a, b); // (1, 1, 0)

加载和保存选项

每个格式都有专门的选项类,允许您控制进口和出口行为:

格式化充电选项保存选项
OBJObjLoadOptionsObjSaveOptions
STLStlLoadOptionsStlSaveOptions
格拉特 / GLBGltfLoadOptionsGltfSaveOptions
FBXFbxLoadOptions(仅进口)

例如,以优雅印刷的 JSON 和一套粘贴式坐标系统出口 glTF:

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

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

支持的格式

下表总结了 Aspose.3D FOSS for Java 可以阅读和写的格式。.

格式化延伸进口出口笔记
OBJ.obj是的是的用MTL材料
STL.stl是的是的二元 + ASCII
格拉特 2.0.gltf是的是的JSON 格式
GLB.glb是的是的二进制 glTF 通过 GltfSaveOptions
FBX.fbx是的仅进口

OBJ、STL、glTF 和 GLB 支持充电和储蓄。.

格式选项指南

选择正确的格式取决于您的使用情况:

  • OBJ 理想的是,当您需要在3D工具中最大兼容性时,几乎每个模型应用程序都可以阅读和写作OBJ. 它适用于交换数据的机密,但仅通过伴侣MTL文件提供基本材料信息。.
  • STL 它存储了无材料或场景层的原始三角形地质,这正是滑板软件所期望的。 如果您的管道在3D打印机上结束,STL是简单的选择。.
  • 格拉特F 它支持PBR材料,全场地形序列,并为高效传输而设计。使用glTF在构建基于Web的观众时,与三.js或Babylon.js合作,或者针对任何实时播放管道。.
  • FBX 深度融入游戏开发和数字内容创建工作流,支持丰富的场景数据包括层次和材料。 Aspose.3D FOSS for Java 支持 FBX 仅进口 使用它来加载 FBX 资产并将其转换为其他格式。.

已知限制

重要的是要注意, Scene.render() 是的 未支持 此时此刻,在FOSS版中,称之为这个方法将扔一根 UnsupportedOperationException.图书馆是为基于文件的3D处理 - 加载,操纵,转换和储存模型 - 而不是实时向显示器播放。.

开源和许可证

Aspose.3D FOSS for Java 发布在下方的 许可证MIT.因此,你可以自由:

  • 使用图书馆在商业和属性应用。.
  • 修改源代码以满足您的需求。.
  • 将图书馆作为您自己的软件的一部分分发。.

没有王位费用,没有使用限制,也没有授权要求超越MIT许可证所规定的。.

完整的源代码在GitHub上托管,并欢迎您的贡献: 首頁 / 電視節目 / HTTPS://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-Java

系统要求

要求细节
Java 版本21 or later
依赖性无(纯 Java )
平台任何运行JVM的平台
构建工具马文(推荐)

开始的

下面是帮助你站起来跑步的资源:

常用案例

以下是一些实用的场景,在那里 Aspose.3D FOSS for Java 适合:

转型管道

许多团队在一个格式中获得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上分享您的反馈。.