Crea effetti 3D nelle presentazioni usando Java

Panoramica

Aspose.Slides for Java può creare, modificare, conservare e renderizzare formattazione 3D in stile PowerPoint per forme e testo. Questo articolo copre gli effetti 3D come rotazione, estrusione, smussi, illuminazione, materiale, riempimenti a gradiente o immagine e testo 3D.

Concetti di Formattazione 3D

Utilizza il metodo IShape.getThreeDFormat per applicare la formattazione 3D a una forma. Il metodo restituisce IThreeDFormat, che controlla la scena 3D per quella forma.

Per il testo, utilizza il metodo ITextFrameFormat.getThreeDFormat . Questo applica la formattazione 3D al riquadro di testo invece che al corpo della forma.

Le API più importanti sono:

Membri API Cosa controlla Quando usarlo
getCamera Punto di vista, tipo di fotocamera predefinita, rotazione, zoom e prospettiva. Ruota l’oggetto nello spazio 3D o corrispondi a un preset di rotazione 3D di PowerPoint.
getLightRig Impostazione predefinita della luce, direzione e rotazione della luce. Modifica come appaiono le luci e le ombre sulla superficie 3D.
getMaterial e setMaterial Materiale della superficie, come piatto, opaco, plastica o metallo. Far apparire la stessa geometria più piatta, più morbida, lucida o metallica.
getExtrusionHeight e setExtrusionHeight Quanto la forma si estende all’indietro dalla sua faccia anteriore. Trasforma una forma piatta in un oggetto 3D visibilmente spesso.
getExtrusionColor Colore delle facce estruse. Rende visibile la profondità o coordina il colore laterale con il riempimento frontale.
getDepth e setDepth Profondità 3D aggiuntiva usata dalla formattazione 3D di PowerPoint. Regola finemente la profondità per forme o testo, soprattutto in combinazione con impostazioni di smusso e materiale.
getBevelTop e getBevelBottom Bordi rialzati o arrotondati sulle facce anteriore e posteriore. Aggiunge un bordo smussato o modellato invece di una faccia piatta e affilata.
getContourColor e getContourWidth e setContourWidth Contorno attorno all’oggetto 3D. Evidenzia il bordo dell’oggetto nel risultato renderizzato.

Crea una Forma 3D

Una forma di solito necessita di quattro tipi di impostazioni prima di apparire convincente in 3D:

  • Impostazioni della fotocamera, perché la vista frontale predefinuta può nascondere l’estrusione.
  • Impostazioni della luce, perché l’illuminazione rende le facce e i lati leggibili.
  • Impostazioni del materiale, perché la superficie influenza il modo in cui la luce viene resa.
  • Impostazioni di estrusione o profondità, perché una forma piatta necessita di spessore.

L’esempio seguente crea un rettangolo, aggiunge testo alla sua faccia frontale e applica la formattazione 3D. I valori di rotazione della fotocamera sono in gradi, e l’altezza di estrusione è 100 punti. L’esempio renderizza la diapositiva in un’immagine PNG alle doppie dimensioni predefinite e salva la presentazione come PPTX.

import com.aspose.slides.*;
import java.awt.Color;

final float imageScale = 2;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    IAutoShape shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 200, 150, 200, 200);

    shape.getTextFrame().setText("3D");
    shape.getTextFrame().getParagraphs().get_Item(0).getParagraphFormat().getDefaultPortionFormat().setFontHeight(64);

    shape.getFillFormat().setFillType(FillType.Solid);
    shape.getFillFormat().getSolidFillColor().setColor(new Color(100, 149, 237));

    shape.getThreeDFormat().getCamera().setCameraType(CameraPresetType.OrthographicFront);
    shape.getThreeDFormat().getCamera().setRotation(20, 30, 40);
    shape.getThreeDFormat().getLightRig().setLightType(LightRigPresetType.Flat);
    shape.getThreeDFormat().getLightRig().setDirection(LightingDirection.Top);
    shape.getThreeDFormat().setMaterial(MaterialPresetType.Flat);
    shape.getThreeDFormat().setExtrusionHeight(100);
    shape.getThreeDFormat().getExtrusionColor().setColor(Color.BLUE);

    IImage thumbnail = slide.getImage(imageScale, imageScale);
    try {
        thumbnail.save("shape_3d.png", ImageFormat.Png);
    } finally {
        thumbnail.dispose();
    }

    presentation.save("shape_3d.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

L’immagine della diapositiva renderizzata mostra il rettangolo come un blocco 3D spesso:

Rettangolo 3D blu renderizzato con testo 3D bianco sulla faccia frontale

Ruota una Forma con la Fotocamera

In PowerPoint, la rotazione 3D è configurata dal riquadro Rotazione 3-D. I valori di rotazione X, Y e Z corrispondono alla rotazione impostata tramite l’API della fotocamera.

Riquadro Rotazione 3-D di PowerPoint con valori di rotazione X, Y e Z evidenziati

In Aspose.Slides, accedi alla fotocamera tramite IThreeDFormat.getCamera. Questo esempio crea un rettangolo, seleziona una vista frontale ortografica e imposta le sue rotazioni X, Y e Z a 20, 30 e 40 gradi, rispettivamente. Configura la forma in memoria senza salvare un file:

import com.aspose.slides.*;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    IAutoShape shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 200, 150, 200, 200);

    shape.getThreeDFormat().getCamera().setCameraType(CameraPresetType.OrthographicFront);
    shape.getThreeDFormat().getCamera().setRotation(20, 30, 40);
} finally {
    presentation.dispose();
}

Usa la fotocamera quando devi modificare il modo in cui lo spettatore vede l’oggetto. Non modifica la geometria 2D della forma nella diapositiva. Cambia il punto di vista 3D usato da PowerPoint e da Aspose.Slides durante il rendering.

Aggiungi Estrusione e Profondità

L’estrusione fa apparire una forma spessa estendendola dietro la faccia frontale. In PowerPoint, il controllo della profondità imposta questo spessore visibile, e il controllo del colore imposta il colore delle facce laterali.

Controlli di profondità di PowerPoint mappati alle proprietà colore di estrusione e altezza di estrusione

Usa IThreeDFormat.setExtrusionHeight per impostare lo spessore e IThreeDFormat.getExtrusionColor per accedere al colore laterale. Questo esempio assegna a un rettangolo un’estrusione di 100 punti con lati viola e ruota la fotocamera per rivelarne lo spessore. Configura la forma in memoria senza salvare un file:

import com.aspose.slides.*;
import java.awt.Color;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    IAutoShape shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 200, 150, 200, 200);

    Color extrusionColor = new Color(128, 0, 128);

    shape.getThreeDFormat().getCamera().setCameraType(CameraPresetType.OrthographicFront);
    shape.getThreeDFormat().getCamera().setRotation(20, 30, 40);
    shape.getThreeDFormat().getLightRig().setLightType(LightRigPresetType.Flat);
    shape.getThreeDFormat().getLightRig().setDirection(LightingDirection.Top);
    shape.getThreeDFormat().setMaterial(MaterialPresetType.Flat);
    shape.getThreeDFormat().setExtrusionHeight(100);
    shape.getThreeDFormat().getExtrusionColor().setColor(extrusionColor);
} finally {
    presentation.dispose();
}

Il metodo IThreeDFormat.setDepth imposta la profondità di una forma 3D. Il metodo setExtrusionHeight controlla l’altezza dell’effetto di estrusione, come mostrato in questo esempio.

Usa Riempimenti a Gradiente o Immagine con Effetti 3D

La formattazione 3D è indipendente dal riempimento della forma. Puoi applicare un colore solido, un gradiente, un motivo o un riempimento immagine alla faccia frontale e allo stesso tempo utilizzare le stesse impostazioni di fotocamera, luce, materiale ed estrusione.

Questo esempio applica un gradiente dal blu all’arancione alla faccia frontale e un colore arancione scuro all’estrusione di 150 punti. Le fermate del gradiente a 0 e 100 indicano l’inizio e la fine del gradiente. I valori di rotazione della fotocamera sono in gradi. La diapositiva è renderizzata in un’immagine PNG alle doppie dimensioni predefinite:

import com.aspose.slides.*;
import java.awt.Color;

final float imageScale = 2;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    IAutoShape shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 200, 150, 250, 250);

    shape.getTextFrame().setText("3D Gradient");
    shape.getTextFrame().getParagraphs().get_Item(0).getParagraphFormat().getDefaultPortionFormat().setFontHeight(64);

    shape.getFillFormat().setFillType(FillType.Gradient);
    shape.getFillFormat().getGradientFormat().getGradientStops().add(0, Color.BLUE);
    shape.getFillFormat().getGradientFormat().getGradientStops().add(100, new Color(255, 165, 0));

    shape.getThreeDFormat().getCamera().setCameraType(CameraPresetType.OrthographicFront);
    shape.getThreeDFormat().getCamera().setRotation(10, 20, 30);
    shape.getThreeDFormat().getLightRig().setLightType(LightRigPresetType.Flat);
    shape.getThreeDFormat().getLightRig().setDirection(LightingDirection.Top);
    shape.getThreeDFormat().setMaterial(MaterialPresetType.Flat);
    Color extrusionColor = new Color(255, 140, 0);
    shape.getThreeDFormat().setExtrusionHeight(150);
    shape.getThreeDFormat().getExtrusionColor().setColor(extrusionColor);

    IImage thumbnail = slide.getImage(imageScale, imageScale);
    try {
        thumbnail.save("gradient_3d.png", ImageFormat.Png);
    } finally {
        thumbnail.dispose();
    }
} finally {
    presentation.dispose();
}

Rettangolo 3D renderizzato con riempimento a gradiente dal blu all’arancione ed estrusione arancione

Per usare invece un riempimento immagine, aggiungi l’immagine alla presentazione e assegnala al riempimento della forma. Questo esempio richiede un file esistente denominato “image.jpg” nella directory di lavoro. Allunga l’immagine per riempire il rettangolo, applica un’estrusione di 150 punti e imposta la rotazione della fotocamera in gradi. Configura la forma in memoria senza salvare o renderizzare un file:

import com.aspose.slides.*;
import java.awt.Color;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    IAutoShape shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 200, 150, 250, 250);

    Path imagePath = Paths.get("image.jpg");
    byte[] imageData = Files.readAllBytes(imagePath);
    IPPImage image = presentation.getImages().addImage(imageData);

    shape.getFillFormat().setFillType(FillType.Picture);
    shape.getFillFormat().getPictureFillFormat().getPicture().setImage(image);
    shape.getFillFormat().getPictureFillFormat().setPictureFillMode(PictureFillMode.Stretch);

    Color extrusionColor = new Color(255, 140, 0);
    shape.getThreeDFormat().getCamera().setCameraType(CameraPresetType.OrthographicFront);
    shape.getThreeDFormat().getCamera().setRotation(10, 20, 30);
    shape.getThreeDFormat().getLightRig().setLightType(LightRigPresetType.Flat);
    shape.getThreeDFormat().getLightRig().setDirection(LightingDirection.Top);
    shape.getThreeDFormat().setMaterial(MaterialPresetType.Flat);
    shape.getThreeDFormat().setExtrusionHeight(150);
    shape.getThreeDFormat().getExtrusionColor().setColor(extrusionColor);
} finally {
    presentation.dispose();
}

Rettangolo 3D renderizzato con riempimento foto sulla faccia frontale ed estrusione arancione

Applica Formattazione 3D al Testo

La formattazione 3D della forma influisce sul corpo della forma. La formattazione 3D del testo influisce sul riquadro di testo. Questo è utile per effetti simili a WordArt dove le lettere stesse hanno bisogno di estrusione, materiale, illuminazione e impostazioni della fotocamera.

L’esempio seguente crea testo con un motivo a griglia arancione e bianco, applica un arco verso l’alto e configura le impostazioni 3D tramite ITextFrameFormat.getThreeDFormat. L’altezza di estrusione e la profondità sono in punti, e la rotazione della luce è in gradi. Il riempimento e il contorno della forma sono nascosti in modo che sia visibile solo il testo. L’esempio renderizza un’immagine PNG alle doppie dimensioni della diapositiva predefinite e salva la presentazione come PPTX:

import com.aspose.slides.*;
import java.awt.Color;

final float imageScale = 2;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    IAutoShape shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 200, 150, 250, 250);

    shape.getFillFormat().setFillType(FillType.NoFill);
    shape.getLineFormat().getFillFormat().setFillType(FillType.NoFill);
    shape.getTextFrame().setText("3D Text");

    IPortion portion = shape.getTextFrame().getParagraphs().get_Item(0).getPortions().get_Item(0);
    portion.getPortionFormat().getFillFormat().setFillType(FillType.Pattern);
    Color patternColor = new Color(255, 140, 0);
    portion.getPortionFormat().getFillFormat().getPatternFormat().getForeColor().setColor(patternColor);
    portion.getPortionFormat().getFillFormat().getPatternFormat().getBackColor().setColor(Color.WHITE);
    portion.getPortionFormat().getFillFormat().getPatternFormat().setPatternStyle(PatternStyle.LargeGrid);

    shape.getTextFrame().getParagraphs().get_Item(0).getParagraphFormat().getDefaultPortionFormat().setFontHeight(128);

    ITextFrameFormat textFrameFormat = shape.getTextFrame().getTextFrameFormat();
    textFrameFormat.setTransform(TextShapeType.ArchUp);
    textFrameFormat.getThreeDFormat().setExtrusionHeight(3.5f);
    textFrameFormat.getThreeDFormat().setDepth(3);
    textFrameFormat.getThreeDFormat().setMaterial(MaterialPresetType.Plastic);
    textFrameFormat.getThreeDFormat().getLightRig().setDirection(LightingDirection.Top);
    textFrameFormat.getThreeDFormat().getLightRig().setLightType(LightRigPresetType.Balanced);
    textFrameFormat.getThreeDFormat().getLightRig().setRotation(0, 0, 40);
    textFrameFormat.getThreeDFormat().getCamera().setCameraType(CameraPresetType.PerspectiveContrastingRightFacing);

    IImage thumbnail = slide.getImage(imageScale, imageScale);
    try {
        thumbnail.save("text_3d.png", ImageFormat.Png);
    } finally {
        thumbnail.dispose();
    }

    presentation.save("text_3d.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Testo 3D renderizzato con trasformazione WordArt arcuata, riempimento motivo arancione e estrusione scura

Mantieni il Testo Piatto su una Forma 3D

Per mantenere il testo leggibile preservando l’aspetto 3D di una forma, chiama ITextFrameFormat.setKeepTextFlat tramite ITextFrame.getTextFrameFormat. Quando il valore è true, il testo rimane fuori dalla scena 3D. Quando è false, il testo partecipa alla scena e segue la sua orientazione 3D.

Questa impostazione non rimuove la formattazione 3D della forma: la sua fotocamera, illuminazione, materiale ed estrusione rimangono configurati tramite IShape.getThreeDFormat. È anche diverso dalla rotazione ordinaria. IShape.setRotation ruota la forma nel piano della diapositiva, mentre ITextFrameFormat.setRotationAngle controlla la rotazione personalizzata del testo all’interno del suo riquadro. Mantenere il testo fuori dalla scena 3D non resetta nessuno di questi angoli.

L’esempio autoconclusivo seguente crea un rettangolo blu con testo e lo clona accanto all’originale. Entrambe le forme hanno la stessa formattazione 3D; solo l’impostazione del testo differisce: false a sinistra e true a destra. Gli angoli della fotocamera sono in gradi, e l’altezza di estrusione è 40 punti. L’esempio salva la presentazione come PPTX e renderizza la diapositiva di confronto in PNG alle doppie dimensioni predefinite.

import com.aspose.slides.*;
import java.awt.Color;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);
    
    IAutoShape shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 70, 160, 240, 140);

    shape.getTextFrame().setText("Readable text");
    shape.getTextFrame().getParagraphs().get_Item(0).getParagraphFormat().getDefaultPortionFormat().setFontHeight(28);
    shape.getTextFrame().getParagraphs().get_Item(0).getParagraphFormat().setAlignment(TextAlignment.Center);
    shape.getTextFrame().getTextFrameFormat().setAnchoringType(TextAnchorType.Center);
    shape.getFillFormat().setFillType(FillType.Solid);
    shape.getFillFormat().getSolidFillColor().setColor(new Color(100, 149, 237));

    shape.getThreeDFormat().getCamera().setCameraType(CameraPresetType.OrthographicFront);
    shape.getThreeDFormat().getCamera().setRotation(30, 30, 0);
    shape.getThreeDFormat().getLightRig().setLightType(LightRigPresetType.Flat);
    shape.getThreeDFormat().getLightRig().setDirection(LightingDirection.Top);
    shape.getThreeDFormat().setMaterial(MaterialPresetType.Flat);
    shape.getThreeDFormat().setExtrusionHeight(40);
    shape.getThreeDFormat().getExtrusionColor().setColor(new Color(65, 105, 225));
    shape.getTextFrame().getTextFrameFormat().setKeepTextFlat(false);

    IAutoShape flatTextShape = (IAutoShape) slide.getShapes().addClone(shape, 400, 160);
    flatTextShape.getTextFrame().getTextFrameFormat().setKeepTextFlat(true);

    presentation.save("keep_text_flat.pptx", SaveFormat.Pptx);
    IImage image = slide.getImage(2, 2);
    try {
        image.save("keep_text_flat.png", ImageFormat.Png);
    } finally {
        image.dispose();
    }
} finally {
    presentation.dispose();
}

Rettangoli 3D affiancati: il testo segue l’orientamento 3D a sinistra e rimane piatto a destra

Comportamento di Esportazione e Rendering

Aspose.Slides conserva la formattazione 3D quando salva nei formati PowerPoint come PPTX. Quando si renderizza o si esporta in formati a layout fisso, la scena 3D è rasterizzata o disegnata nell’output come risultato 2D. Questo vale quando renderizzi le diapositive in PNG, esporti in PDF, esporti in HTML, o generi fotogrammi per la conversione video.

Tieni presenti i seguenti punti:

  • Le immagini e i PDF esportati non sono interattivi. L’oggetto non può essere ruotato dallo spettatore dopo l’esportazione.
  • L’aspetto finale dipende dalla combinazione di fotocamera, rig luce, materiale, estrusione, riempimento e scalatura della diapositiva.
  • Se devi ispezionare i valori di formattazione ereditati o basati sul tema, leggi le proprietà di forma efficaci.
  • Alcuni formati di output non possono memorizzare la formattazione 3D modificabile di PowerPoint. In tali formati, il risultato visivo è renderizzato invece di essere conservato come impostazioni 3D modificabili.

FAQ

Aspose.Slides può creare presentazioni 3D interattive?

Aspose.Slides crea e renderizza effetti 3D di PowerPoint per forme e testo. Non rende le immagini esportate, i PDF o le pagine HTML scene 3D interattive che lo spettatore può ruotare. In PPTX, la formattazione 3D rimane modificabile in PowerPoint dove il formato la supporta.

Qual è la differenza tra un modello 3D e un effetto 3D?

Un modello 3D è un oggetto 3D separato inserito in una presentazione. Un effetto 3D è una formattazione applicata a una forma o testo PowerPoint normale, come rotazione, estrusione, smusso, illuminazione e materiale. Questo articolo tratta gli effetti 3D.

Quali impostazioni sono necessarie per una forma 3D visibile?

Al minimo, imposta una rotazione della fotocamera e oppure estrusione o profondità. In pratica, imposta anche un rig luce e materiale affinché le facce renderizzate abbiano evidenziature e ombre chiare.

Posso applicare effetti 3D sia a forme che a testo?

Sì. Usa IShape.getThreeDFormat per il corpo della forma e ITextFrameFormat.getThreeDFormat per il testo.

Gli effetti 3D appariranno quando si esporta in immagini, PDF, HTML o fotogrammi video?

Sì. Aspose.Slides renderizza gli effetti 3D quando produce immagini di diapositive, output PDF, output HTML e fotogrammi usati per la conversione video. L’output esportato contiene l’aspetto renderizzato, non un oggetto 3D modificabile.

Posso leggere i valori finali 3D dopo l’applicazione di ereditarietà e impostazioni del tema?

Sì. Usa le API di formattazione efficace descritte in Shape Effective Properties per leggere fotocamera, rig luce, smusso e relativi valori 3D finali.