Browse our Products

Aspose.3D for Java 22.4 Notes de Libération

Améliorations et changements

CléRésuméCatégorie
THREEDNET-1116La confusion d’EulerAngle du nœud conduit à une mauvaise position après la rotation du modèleCorrection de bogue
THREEDNET-1137LayeredTexture importé de FBX peut générer un fichier GLTF non valideCorrection de bogue
THREEDNET-1119Prise en charge des attributs du sommet personnalisés GLTFNouvelle caractéristique
THREEDNET-1129GLB à U3D La conversion a entraîné une mauvaise orientationNouvelle caractéristique
THREEDNET-1121Point de support d’exportation cloud en USD/USDZNouvelle caractéristique
THREEDNET-1122Support d’importation de nuage de points en USD/USDZNouvelle caractéristique
THREEDNET-1113Modèle chargé OBJ coordonnées de texture perdue vtCorrection de bogue
THREEDNET-1107La licence ne peut pas être chargée lorsque l’application est construite comme un seul exécutable.Correction de bogue

API changements

Toutes les modifications du API dans cette version sont nécessaires pour exporter les données utilisateur en glTF à TriMesh, les données utilisateur en Mesh et VertexElementUserData seront prises en charge dans la prochaine version.

Méthode ajoutée AddField dans la classe 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);

Le nouvel AddField a ajouté un nouveau paramterAliasPour spécifier le nom alias du champ, il fonctionne exactement de la même manière que le nouveau constructeur ajouté de SemanticAttribut.

Membres ajoutés à la classe com.aspose.threed.VertexField:

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

Extrait de code pour exporter des données personnalisées vers 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}
}


 
 Français