สร้างเอฟเฟกต์ 3 มิติในงานนำเสนอโดยใช้ Java
ภาพรวม
Aspose.Slides for Java สามารถสร้าง แก้ไข เก็บรักษาและแสดงผลการจัดรูปแบบ 3 มิติแบบ PowerPoint สำหรับรูปร่างและข้อความได้ บทความนี้ครอบคลุมเอฟเฟกต์ 3 มิติ เช่น การหมุน การดันออก (extrusion) การขัดขอบ (bevel) การจัดแสง วัสดุ การไล่สีหรือการเติมภาพ และข้อความ 3 มิติ
แนวคิดการจัดรูปแบบ 3 มิติ
ใช้ IShape.getThreeDFormat() เพื่อใช้การจัดรูปแบบ 3 มิติบนรูปร่าง วัตถุที่คืนค่าจะควบคุมฉาก 3 มิติสำหรับรูปร่างนั้น
สำหรับข้อความ ให้ใช้ ITextFrameFormat.getThreeDFormat() ซึ่งจะใช้การจัดรูปแบบ 3 มิติกับกรอบข้อความแทนส่วนของรูปร่าง
สมาชิก API ที่สำคัญที่สุดคือ:
| สมาชิก API | สิ่งที่ควบคุม | เวลาใช้งาน |
|---|---|---|
| getCamera | มุมมอง, ชนิดกล้องตั้งค่า, การหมุน, การซูม, และการมองภาพเชิงลึก | หมุนวัตถุในพื้นที่ 3 มิติหรือใช้ค่าการหมุน 3 มิติของ PowerPoint ที่กำหนดไว้ |
| getLightRig | การตั้งค่าแสง, ทิศทาง, และการหมุนของแสง | เปลี่ยนวิธีที่ไฮไลท์และเงาปรากฏบนพื้นผิว 3 มิติ |
| getMaterial และ setMaterial | วัสดุพื้นผิว เช่น แบน, แมต, พลาสติก หรือโลหะ | ทำให้รูปทรงเดียวกันดูแบนขึ้น, นุ่มขึ้น, มีความเงา หรือเป็นโลหะ |
| getExtrusionHeight และ setExtrusionHeight | ระยะที่รูปร่างยืดออกไปด้านหลังจากหน้าผาก | เปลี่ยนรูปร่างแบนให้เป็นวัตถุ 3 มิติที่มีความหนาชัดเจน |
| getExtrusionColor | สีของด้านที่ยืดออก | ทำให้ความลึกมองเห็นได้หรือประสานสีด้านกับการเติมหน้าผาก |
| getDepth และ setDepth | ความลึก 3 มิติเพิ่มเติมที่ใช้โดยการจัดรูปแบบ 3 มิติของ PowerPoint | ปรับความลึกอย่างละเอียดสำหรับรูปร่างหรือข้อความ โดยเฉพาะร่วมกับการตั้งค่า bevel และวัสดุ |
| getBevelTop และ getBevelBottom | ขอบที่ยกขึ้นหรือโค้งมนบนหน้าผากและด้านหลัง | เพิ่มขอบที่นิ่มหรือหล่อรูปแทนหน้าผากแบนคม |
| getContourColor, getContourWidth, และ setContourWidth | เส้นขอบรอบวัตถุ 3 มิติ | เน้นขอบเขตของวัตถุในผลลัพธ์ที่เรนเดอร์ |
สร้างรูปร่าง 3 มิติ
โดยปกติรูปร่างต้องการการตั้งค่า 4 ประเภท ก่อนที่จะดูเป็น 3 มิติอย่างน่าเชื่อถือ:
- การตั้งค่ากล้อง เนื่องจากมุมมองหน้าตั้งต้นอาจซ่อนการดันออก
- การตั้งค่าแสง เนื่องจากการจัดแสงทำให้ด้านและข้างมองเห็นได้
- การตั้งค่าวัสดุ เนื่องจากพื้นผิวส่งผลต่อการแสดงแสง
- การตั้งค่าการดันออกหรือความลึก เนื่องจากรูปร่างแบนต้องการความหนา
ตัวอย่างต่อไปนี้สร้างสี่เหลี่ยมผืนผ้า, เพิ่มข้อความบนหน้าผาก, ใช้การจัดรูปแบบ 3 มิติ, บันทึกพรีเซนเทชันเป็น PPTX และเรนเดอร์สไลด์เป็นภาพ PNG
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(Color.BLUE);
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();
}
ภาพสไลด์ที่เรนเดอร์แสดงสี่เหลี่ยมเป็นบล็อก 3 มิติที่หนา:

หมุนรูปร่างด้วยกล้อง
ใน PowerPoint การหมุน 3 มิติถูกกำหนดจากพาเนล 3‑D Rotation ค่า X, Y, และ Z ที่หมุนสอดคล้องกับการหมุนที่คุณตั้งค่าผ่าน API ของกล้อง

ใน Aspose.Slides ให้ตั้งค่าชนิดกล้องและการหมุนผ่าน 3D format ที่คืนค่าจาก shape.getThreeDFormat():
shape.getThreeDFormat().getCamera().setCameraType(CameraPresetType.OrthographicFront);
shape.getThreeDFormat().getCamera().setRotation(20, 30, 40);
ใช้กล้องเมื่อคุณต้องการเปลี่ยนวิธีที่ผู้ชมเห็นวัตถุ มันไม่เปลี่ยนรูปทรง 2 มิติบนสไลด์ แต่เปลี่ยนมุมมอง 3 มิติที่ PowerPoint และ Aspose.Slides ใช้ในการเรนเดอร์
เพิ่มการดันออกและความลึก
การดันออกทำให้รูปร่างดูหนาโดยขยายไปด้านหลังจากหน้าผาก ใน PowerPoint การควบคุมความลึกกำหนดความหนาที่มองเห็นได้ และการควบคุมสีกำหนดสีของด้านข้าง

ตั้งค่าความสูงการดันออกสำหรับความหนาและสีการดันออกสำหรับสีด้านข้าง:
Color extrusionColor = new Color(128, 0, 128);
shape.getThreeDFormat().getCamera().setRotation(20, 30, 40);
shape.getThreeDFormat().setExtrusionHeight(100);
shape.getThreeDFormat().getExtrusionColor().setColor(extrusionColor);
ใช้การตั้งค่าความลึกเมื่อคุณต้องทำงานกับค่าความลึกของ PowerPoint โดยตรงหรือรวมความลึกกับ bevel, material และเอฟเฟกต์ข้อความ ในหลายกรณีการตั้งค่าความสูงการดันออกจะชัดเจนกว่าเพราะแสดงการดันออกที่มองเห็นได้โดยตรง
ใช้การไล่สีหรือการเติมภาพกับเอฟเฟกต์ 3 มิติ
การจัดรูปแบบ 3 มิติแยกจากการเติมรูปแบบของรูปร่าง คุณสามารถเติมสีทึบ, ไล่สี, ลายหรือภาพบนหน้าผากและยังคงใช้กล้อง, แสง, วัสดุและการดันออกเดียวกันได้
ตัวอย่างนี้เติมไล่สีให้กับรูปร่างและสีการดันออกที่เข้มกว่าให้กับด้านข้าง:
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, Color.ORANGE);
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();
}

หากต้องการใช้การเติมภาพ ให้เพิ่มรูปภาพลงในพรีเซนเทชันและกำหนดให้เป็นการเติมของรูปร่าง:
java.nio.file.Path imagePath = java.nio.file.Paths.get("image.jpg");
byte[] imageData = java.nio.file.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().setRotation(10, 20, 30);
shape.getThreeDFormat().setExtrusionHeight(150);
shape.getThreeDFormat().getExtrusionColor().setColor(extrusionColor);

ใช้การจัดรูปแบบ 3 มิติกับข้อความ
การจัดรูปแบบ 3 มิติของรูปร่างมีผลต่อส่วนของรูปร่างเอง ส่วนการจัดรูปแบบ 3 มิติของข้อความมีผลต่อกรอบข้อความ ซึ่งมีประโยชน์สำหรับเอฟเฟกต์แบบ WordArt ที่อักษรต้องการการดันออก, วัสดุ, แสงและการตั้งค่ากล้อง
ตัวอย่างต่อไปนี้สร้างข้อความที่เติมลาย, ใช้การแปลง WordArt โค้งและกำหนดค่า 3 มิติบน ITextFrameFormat:
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();
}

พฤติกรรมการส่งออกและการเรนเดอร์
Aspose.Slides เก็บการจัดรูปแบบ 3 มิติเมื่อบันทึกเป็นรูปแบบ PowerPoint เช่น PPTX เมื่อเรนเดอร์หรือส่งออกเป็นรูปแบบเลเอาต์คงที่ ฉาก 3 มิติจะถูกแรสเตอร์หรือวาดลงในผลลัพธ์เป็น 2 มิติ ซึ่งเกิดขึ้นเมื่อคุณเรนเดอร์สไลด์เป็น PNG, ส่งออกเป็น PDF, ส่งออกเป็น HTML, หรือสร้างเฟรมสำหรับ video conversion
ควรจำไว้:
- ภาพและ PDF ที่ส่งออกไม่สามารถโต้ตอบได้ วัตถุไม่สามารถหมุนโดยผู้ชมหลังการส่งออก
- ลักษณะสุดท้ายขึ้นอยู่กับการผสมผสานของกล้อง, light rig, material, extrusion, fill, และการสเกลสไลด์
- หากต้องการตรวจสอบค่าการจัดรูปแบบที่สืบทอดหรือจากธีม ให้อ่าน effective shape properties
- บางรูปแบบผลลัพธ์ไม่สามารถเก็บการจัดรูปแบบ 3 มิติของ PowerPoint ที่แก้ไขได้ ในรูปแบบเหล่านั้นผลลัพธ์เป็นการเรนเดอร์แทนที่จะเก็บเป็นการตั้งค่า 3 มิติที่แก้ไขได้
คำถามที่พบบ่อย
Aspose.Slides สามารถสร้างการนำเสนอ 3 มิติที่โต้ตอบได้หรือไม่?
Aspose.Slides สร้างและเรนเดอร์เอฟเฟกต์ 3 มิติของ PowerPoint สำหรับรูปร่างและข้อความ แต่ไม่ได้ทำให้ภาพ, PDF หรือหน้า HTML ที่ส่งออกเป็นฉาก 3 มิติที่ผู้ชมสามารถหมุนได้ ใน PPTX การจัดรูปแบบ 3 มิติยังคงแก้ไขได้ใน PowerPoint หากรูปแบบรองรับ
ความแตกต่างระหว่างโมเดล 3 มิติและเอฟเฟกต์ 3 มิติคืออะไร?
โมเดล 3 มิติเป็นวัตถุ 3 มิติแยกที่แทรกลงในพรีเซนเทชัน ส่วนเอฟเฟกต์ 3 มิติเป็นการจัดรูปแบบที่ใช้กับรูปร่างหรือข้อความปกติของ PowerPoint เช่น การหมุน, การดันออก, bevel, แสงและวัสดุ บทความนี้ครอบคลุมเอฟเฟกต์ 3 มิติ
ต้องตั้งค่าอะไรบ้างเพื่อให้รูปร่าง 3 มิติปรากฏ?
อย่างน้อยต้องตั้งค่าการหมุนของกล้องและตั้งค่าการดันออกหรือความลึก ในการใช้งานจริงควรตั้งค่า light rig และ material เพื่อให้หน้าผากมีไฮไลท์และเงาชัดเจน
ฉันสามารถใช้เอฟเฟกต์ 3 มิติกับรูปร่างและข้อความได้หรือไม่?
ได้ ใช้ IShape.getThreeDFormat() สำหรับส่วนของรูปร่างและ ITextFrameFormat.getThreeDFormat() สำหรับข้อความ
เอฟเฟกต์ 3 มิติจะปรากฏเมื่อส่งออกเป็นภาพ, PDF, HTML หรือเฟรมวิดีโอหรือไม่?
ใช่ Aspose.Slides เรนเดอร์เอฟเฟกต์ 3 มิติเมื่อผลิตภาพสไลด์, ผลลัพธ์ PDF, ผลลัพธ์ HTML และเฟรมที่ใช้สำหรับการแปลงวิดีโอ เอาต์พุตที่ส่งออกจะมีลักษณะที่เรนเดอร์ไว้ ไม่ใช่วัตถุ 3 มิติที่แก้ไขได้
ฉันสามารถอ่านค่าการจัดรูปแบบ 3 มิติสุดท้ายหลังจากการสืบทอดและธีมได้หรือไม่?
ได้ ใช้ API การจัดรูปแบบที่มีประสิทธิภาพที่อธิบายไว้ใน Shape Effective Properties เพื่ออ่านค่ากล้อง, light rig, bevel และค่าต่าง ๆ ของ 3 มิติที่สรุปแล้ว