Просмотрите наши продукты

Aspose.3D for Java 22,4 Примечания к выпуску

Улучшения и изменения

КлючСводкаКатегория
THREEDNET-1116Путаница в EulerAngle узла приводит к неправильному положению после вращения моделиИсправление ошибок
THREEDNET-1137LayeredTexture, импортированная из FBX, может генерировать недопустимый файл GLTFИсправление ошибок
THREEDNET-1119Поддержка пользовательских атрибутов vertex GLTFНовая функция
THREEDNET-1129GLB в U3D Преобразование привело к неправильной ориентацииНовая функция
THREEDNET-1121Поддержка экспорта облака точек в USD/USDZНовая функция
THREEDNET-1122Поддержка импорта облака точек в USD/USDZНовая функция
THREEDNET-1113Загружено OBJ модель потерянных координат текстуры vtИсправление ошибок
THREEDNET-1107Лицензия не может быть загружена, когда приложение построено как единый исполняемый файл.Исправление ошибок

API изменения

Все изменения API в этой версии необходимы для экспорта пользовательских данных в glTF-TriMesh, пользовательские данные в Mesh и VertexElementUserData будут поддерживаться в следующей версии.

Добавлен метод AddField в классе com.aspose.threed.VertexDeclaration:

    /**
     * Add a new vertex field
     * @param dataType The data type of the vertex field
     * @param semantic How will this field used for
     * @param index The index for same field semantic, -1 for auto-generation
     * @param alias The alias name of the field
     */
    public VertexField addField(int dataType, VertexFieldSemantic semantic, int index, String alias);

В новый AddField добавлен новый парамтерПсевдонимЧтобы указать псевдоним поля, он работает точно так же, как и новый добавленный конструктор SemanticAttribute.

Добавлены члены в класс com.aspose.threed.VertexField:

    /**
     * Field's alias 
     */
    public String getAlias();

Кодовый фрагмент для экспорта пользовательских данных в glTF

private static void writeVertex(DataOutputStream writer,
                                float px, float py, float pz,
                                float nx, float ny, float nz,
                                float u, float v,
                                float batchId)
        throws IOException
{
        writer.writeFloat(px);
        writer.writeFloat(py);
        writer.writeFloat(pz);

        writer.writeFloat(nx);
        writer.writeFloat(ny);
        writer.writeFloat(nz);

        writer.writeFloat(u);
        writer.writeFloat(v);

        writer.writeFloat(batchId);
}

private static void exportCustomFieldToGLTF()
        throws Exception
{
        byte[] verticesInBytes;
        try(var os = new ByteArrayOutputStream())
        {
            try(var writer = new DataOutputStream(os)) {
                writeVertex(writer, 1, 0, 0, 0, 1, 0, 0, 0, 1);
                writeVertex(writer, 1, 1, 0, 0, 1, 0, 0, 1, 2);
                writeVertex(writer, 0, 1, 0, 0, 1, 0, 1, 0, 3);
                writeVertex(writer, 0, 1, 1, 0, 1, 0, 1, 1, 4);
            }
            verticesInBytes = os.toByteArray();
        }
        var indices = new int[]
        {
                0, 1, 2,
                1, 2, 3
        };
        //create a vertex declaration
        VertexDeclaration vd = new VertexDeclaration();
        vd.addField(VertexFieldDataType.F_VECTOR3, VertexFieldSemantic.POSITION);
        vd.addField(VertexFieldDataType.F_VECTOR3, VertexFieldSemantic.NORMAL);
        vd.addField(VertexFieldDataType.F_VECTOR2, VertexFieldSemantic.UV);
        vd.addField(VertexFieldDataType.FLOAT, VertexFieldSemantic.USER_DATA, -1, "_BATCH_ID");
        //construct a TriMesh from raw bytes of vertices and indices
        var mesh = TriMesh.fromRawData(vd, verticesInBytes, indices, false);
        //create a scene with the mesh
        var scene = new Scene(mesh);
        //export the scene to a binary glTF file
        scene.save("test.glb", FileFormat.GLTF2_BINARY);
        // The GLTF primitive generated in the test.glb will be:
        // {"attributes" : {"POSITION" : 1, "NORMAL" : 3, "TEXCOORD_0" : 2, "_BATCH_ID" : 4}, "mode" : 4}
}


 
 Русский