3D hatások létrehozása prezentációkban Java használatával
Áttekintés
Az Aspose.Slides for Java képes létrehozni, szerkeszteni, megőrizni és renderelni a PowerPoint‑stílusú 3D formázást alakzatok és szöveg számára. Ez a cikk olyan 3D‑hatásokat tárgyal, mint a forgatás, extrúzió, peremek, megvilágítás, anyag, színátmenetes vagy képes kitöltés, valamint a 3D szöveg.
Note
Ez a cikk a PowerPoint alakzatok és szöveg 3D formázási hatásaival foglalkozik. Nem a különálló 3D modellfájlok beszúrásáról vagy szerkesztéséről szól. Amikor egy diát képre, PDF‑re vagy HTML‑re exportálsz, az Aspose.Slides ezeket a 3D hatásokat a exportált 2D kimenetbe rendereli.3D formázási koncepciók
Használd az IShape.getThreeDFormat metódust a 3D formázás alkalmazásához egy alakzatra. A metódus egy IThreeDFormat objektumot ad vissza, amely az adott alakzat 3D jelenetét irányítja.
Szövegnél használja az ITextFrameFormat.getThreeDFormat metódust. Ez a szövegkeretre alkalmaz 3D formázást a forma testének helyett.
A legfontosabb API tagok a következők:
| API tag | Mit irányít | Mikor használjuk |
|---|---|---|
| getCamera | Nézőpont, előre beállított kamera típus, forgatás, nagyítás és perspektíva. | Forgasd el az objektumot 3D térben vagy illeszd egy PowerPoint 3D forgatási előre beállításhoz. |
| getLightRig | Világítás előre beállított típusa, irány és a fény forgatása. | Módosítja, hogy a kiemelések és árnyékok hogyan jelennek meg a 3D felületen. |
| getMaterial és setMaterial | Felület anyaga, például sík, matt, műanyag vagy fém. | Láttassa ugyanazt a geometriai formát laposabbnak, puhábbnak, fényesnek vagy fémesnek. |
| getExtrusionHeight és setExtrusionHeight | Milyen messzire nyúlik ki az alakzat a frontális felületétől hátrafelé. | Alakíts ki egy lapos alakzatból láthatóan vastag 3D objektumot. |
| getExtrusionColor | Az extrudált oldalak színe. | A mélységet láthatóvá teszi, vagy összehangolja az oldal színét a frontális kitöltéssel. |
| getDepth és setDepth | A PowerPoint 3D formázás által használt további 3D mélység. | Finomhangolja a mélységet alakzatok vagy szöveg esetén, különösen perem‑ és anyagbeállításokkal kombinálva. |
| getBevelTop és getBevelBottom | Emelt vagy lekerekített élek az elülső és hátsó felületeken. | Lágyabb vagy formált élt ad hozzá ahelyett, hogy éles, sík felület lenne. |
| getContourColor és getContourWidth és setContourWidth | Körvonal a 3D objektum körül. | Kiemeli az objektum határát a renderelt kimenetben. |
3D alakzat létrehozása
Az alakzat általában négy beállítási típusra van szüksége, mielőtt meggyőzően 3D‑nek tűnne:
- Kamera beállítások, mert az alapértelmezett előre nézet elrejtheti az extrudálást.
- Világítás beállítások, mert a megvilágítás teszi olvashatóvá a felületeket és oldalakat.
- Anyag beállítások, mert a felület befolyásolja, hogyan jelenik meg a fény.
- Extrúzió vagy mélység beállítások, mert egy lapos alakzatnak vastagságra van szüksége.
A következő példa egy téglalapot hoz létre, szöveget ad az előlaphoz, és alkalmaz 3D formázást. A kamera forgatási értékek fokban vannak megadva, az extrúzió magassága 100 pont. A példa a diát PNG képre rendereli, ami kétszerese az alapértelmezett méretének, és a prezentációt PPTX‑ként menti.
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();
}
A renderelt diakép a téglalapot vastag 3D blokként mutatja:

Alakzat forgatása a kamerával
PowerPoint‑ban a 3D forgatást a 3‑D forgatás panelről állítják be. Az X, Y és Z forgatási értékek megfelelnek a kamera API‑n keresztül beállított forgatásoknak.

Aspose.Slides‑ben a kamerához a IThreeDFormat.getCamera segítségével férhetsz hozzá. Ez a példa egy téglalapot hoz létre, ortográfiai előnézetet választ, és beállítja az X, Y és Z forgatásokat 20, 30 és 40 fokra. A példában az alakzatot memóriában konfigurálja fájl mentése nélkül:
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();
}
Használd a kamerát, amikor meg kell változtatni, hogy a néző hogyan lássa az objektumot. Nem változtatja meg a 2D alakzat geometriáját a dián. A PowerPoint és az Aspose.Slides által rendereléskor használt 3D nézetpontot módosítja.
Extrúzió és mélység hozzáadása
Az extrúzió egy alakzatot vastagnak mutat azzal, hogy kiterjeszti a frontális felület mögé. PowerPoint‑ban a mélység vezérlő állítja be ezt a látható vastagságot, a szín vezérlő pedig az oldalfelületek színét.

Használd a IThreeDFormat.setExtrusionHeight metódust a vastagság beállításához, és a IThreeDFormat.getExtrusionColor metódust az oldal színének lekéréséhez. Ez a példa egy 100 pont extrúziót ad a téglalaphoz lila oldalakkal, és forgatja a kamerát, hogy látható legyen a vastagsága. A példában az alakzatot memóriában konfigurálja fájl mentése nélkül:
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();
}
A IThreeDFormat.setDepth metódus beállítja egy 3D alakzat mélységét. A setExtrusionHeight metódus szabályozza az extrúzió hatás magasságát, ahogy ez a példában látható.
Színátmenetes vagy képes kitöltés használata 3D hatásokkal
A 3D formázás független az alakzat kitöltésétől. Alkalmazhatsz egyszínű, színátmenetes, mintás vagy képes kitöltést az előfelületre, miközben ugyanazokat a kamera, fény, anyag és extrúzió beállításokat használod.
Ez a példa kék‑narancs színátmenetet alkalmaz az előfelületre, és sötét narancssárga színt a 150 pont magasságú extrúzióra. A színátmenet állomásai 0‑nél és 100‑nál jelzik a színátmenet kezdetét és végét. A kamera forgatási értékek fokban vannak. A dia PNG képre kerül renderelésre, amely kétszerese az alapértelmezett méretnek:
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();
}

A képes kitöltés használatához adj hozzá egy képet a prezentációhoz, és rendeld hozzá az alakzat kitöltéséhez. Ez a példa egy “image.jpg” nevű meglévő fájlt igényel a munkakönyvtárban. A képet nyújtja, hogy kitöltse a téglalapot, 150 pont extrúziót alkalmaz, és fokban adja meg a kamera forgatását. A példában az alakzatot memóriában konfigurálja fájl mentése vagy renderelése nélkül:
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();
}

3D formázás alkalmazása szövegre
Az alakzat 3D formázása az alakzat törzsére hat. A szöveg 3D formázása a szövegkeretre. Ez WordArt‑szerű hatásokhoz hasznos, ahol a betűknek maguknak kell extrúzióval, anyaggal, megvilágítással és kamera beállításokkal rendelkezniük.
A következő példa egy narancssárga‑fehér rács mintás szöveget hoz létre, felfelé ívelt átalakítást alkalmaz, és a 3D beállításokat a ITextFrameFormat.getThreeDFormat segítségével konfigurálja. Az extrúzió magassága és a mélység pontban van megadva, a fény forgatása fokban. Az alakzat kitöltése és körvonala el van rejtve, így csak a szöveg látható. A példa PNG képet renderel a diák kétszeres alapméretén, és a prezentációt PPTX‑ként menti:
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();
}

Szöveg sík maradása 3D alakzaton
A szöveg olvashatóságának megőrzése és az alakzat 3D megjelenésének megtartása érdekében hívd meg az ITextFrameFormat.setKeepTextFlat metódust a ITextFrame.getTextFrameFormat segítségével. Ha az érték true, a szöveg kívül marad a 3D jelenetből. Ha false, a szöveg részt vesz a jelenetben és követi annak 3D orientációját.
Ez a beállítás nem távolítja el az alakzat 3D formázását: a kamera, a fény, az anyag és az extrúzió továbbra is a IShape.getThreeDFormat segítségével van konfigurálva. Emellett különbözik a szokásos forgatástól. Az IShape.setRotation a alakzatot a diaplaneen forgatja, míg az ITextFrameFormat.setRotationAngle a szöveg saját forgatását szabályozza a határoló keretén belül. A szöveg 3D jelenetből való kihagyása nem állítja vissza ezeket a szögeket.
A következő önálló példa egy kék téglalapot hoz létre szöveggel, és a jobb oldalra klónozza az eredetit. Mindkét alakzat ugyanazt a 3D formázást kapja; csak a szöveg beállítása különbözik: false a bal oldalon és true a jobb oldalon. A kamera szögek fokban vannak, az extrúzió magassága 40 pont. A példa a prezentációt PPTX‑ként menti, és a összehasonlító diát PNG‑re rendereli, ami kétszerese az alapméretnek.
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();
}
A bal oldalon a szöveg a 3D orientációt követi. A jobb oldalon sík marad, így könnyebben olvasható. Mindkét téglalap ugyanazt a látható extrúziót és 3D orientációt tartja meg.

Exportálási és renderelési viselkedés
Az Aspose.Slides megőrzi a 3D formázást, amikor PowerPoint formátumokba (például PPTX) ment. Renderelés vagy export rögzített elrendezésű formátumokba esetén a 3D jelenet raszterizálódik vagy 2D eredményként kerül be a kimenetbe. Ez akkor érvényes, amikor a diákat PNG-re rendereled, PDF-re exportálod, HTML-re exportálod, vagy videókonverzió-kereteket generálsz.
- Az exportált képek és PDF‑ek nem interaktívak. Az objektumot a néző nem tudja elforgatni az export után.
- A végső megjelenés a kamera, a fényrig, az anyag, az extrúzió, a kitöltés és a dia méretezés kombinációjától függ.
- Ha meg kell vizsgálnod az örökölt vagy téma‑alapú formázási értékeket, olvasd el a hatékony alakzat tulajdonságok oldalát.
- Néhány kimeneti formátum nem képes tárolni a szerkeszthető PowerPoint 3D formázást. Az ilyen formátumokban a vizuális eredmény renderelve jelenik meg, nem szerkeszthető 3D beállításként.
GYIK
Készíthet‑e az Aspose.Slides interaktív 3D prezentációkat?
Az Aspose.Slides létrehozza és rendereli a PowerPoint 3D hatásait alakzatok és szöveg számára. Nem teszi interaktívvá az exportált képeket, PDF‑eket vagy HTML‑oldalakat, amelyekben a néző el tudná forgatni a jelenetet. PPTX‑ben a 3D formázás szerkeszthető marad a PowerPoint‑ban, ahol a formátum támogatja.
Mi a különbség egy 3D modell és egy 3D hatás között?
Egy 3D modell egy különálló 3D objektum, amelyet a prezentációba szúrnak be. Egy 3D hatás egy normál PowerPoint alakzatra vagy szövegre alkalmazott formázás, mint például forgatás, extrúzió, perem, megvilágítás és anyag. Ez a cikk a 3D hatásokat tárgyalja.
Milyen beállítások szükségesek egy látható 3D alakzathoz?
Legalább egy kamera forgatás és vagy extrúzió vagy mélység beállítása szükséges. Gyakorlati esetben érdemes beállítani a fényriget és az anyagot is, hogy a renderelt felületeknek tiszta kiemelései és árnyékai legyenek.
Alkalmazhatok 3D hatásokat alakzatokra és szövegre egyaránt?
Igen. Használd az IShape.getThreeDFormat metódust az alakzat törzsére és az ITextFrameFormat.getThreeDFormat metódust a szövegre.
Megjelennek‑e a 3D hatások exportáláskor képekre, PDF‑re, HTML‑re vagy videó keretekre?
Igen. Az Aspose.Slides a 3D hatásokat rendereli a diaképek, PDF‑kimenet, HTML‑kimenet és a videókonverzióhoz használt keretek előállítása során. Az exportált kimenet a renderelt megjelenést tartalmazza, nem szerkeszthető 3D objektumot.
Kiolvashatom a végső 3D értékeket az öröklődés és a téma beállítások alkalmazása után?
Igen. Használd a hatékony formázási API‑kat, amelyeket a Shape Effective Properties leírásban részleteznek, hogy elolvasd a végső kamera, fényrig, perem és kapcsolódó 3D értékeket.