Создание 3D презентаций в .NET
Обзор
Как обычно создаёте 3D презентацию в PowerPoint? Microsoft PowerPoint позволяет создавать 3D‑презентации, в которые можно добавлять 3D‑модели, применять 3D‑эффекты к фигурам, создавать 3D‑текст, загружать 3D‑графику в презентацию, создавать 3D‑анимацию PowerPoint.
Создание 3D‑эффектов существенно улучшает вашу презентацию, преобразуя её в 3D‑презентацию, и может быть самым простым способом внедрения 3D.
Начиная с версии Aspose.Slides 20.9 добавлен новый кроссплатформенный 3D‑движок. Новый 3D‑движок позволяет экспортировать и растеризовать фигуры и текст с 3D‑эффектами. В предыдущих версиях фигуры Slides с применёнными 3D‑эффектами отображались плоско. Теперь же можно отображать фигуры с полноценным 3D.
Более того, теперь можно создавать фигуры с 3D‑эффектами через публичный API Slides.
В API Aspose.Slides, чтобы превратить фигуру в 3D‑фигуру PowerPoint, используйте свойство IShape.ThreeDFormat, которое наследует возможности интерфейса IThreeDFormat:
- BevelBottom и BevelTop: задают фаску фигуре, определяют тип фаски (например, Angle, Circle, SoftRound), высоту и ширину фаски.
- Camera: используется для имитации перемещений камеры вокруг объекта. Другими словами, задавая вращение, масштаб и другие свойства камеры, вы можете «развлекать» свои фигуры, как 3D‑модель в PowerPoint.
- ContourColor и ContourWidth: задают свойства контура, чтобы фигура выглядела как 3D‑фигура PowerPoint.
- Depth, ExtrusionColor и ExtrusionHeight: используются для придания фигуре трёхмерности, то есть для преобразования 2D‑фигуры в 3D‑фигуру, задавая её глубину или экструзию.
- LightRig: может создавать световой эффект на 3D‑фигуре. Логика этого свойства похожа на Camera, вы можете задать вращение света относительно 3D‑фигуры и выбрать тип света.
- Material: установка типа материала 3D‑фигуры придаёт ей более живой вид. Свойство предоставляет набор предопределённых материалов, таких как: Metal, Plastic, Powder, Matte и др.
Все 3D‑возможности могут применяться как к фигурам, так и к тексту. Давайте посмотрим, как получить доступ к перечисленным выше свойствам, а затем подробно рассмотрим их шаг за шагом:
const float imageScale = 2;
using (Presentation presentation = new Presentation())
{
ISlide slide = presentation.Slides[0];
IAutoShape shape = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 200, 150, 200, 200);
shape.TextFrame.Text = "3D";
shape.TextFrame.Paragraphs[0].ParagraphFormat.DefaultPortionFormat.FontHeight = 64;
shape.ThreeDFormat.Camera.CameraType = CameraPresetType.OrthographicFront;
shape.ThreeDFormat.Camera.SetRotation(20, 30, 40);
shape.ThreeDFormat.LightRig.LightType = LightRigPresetType.Flat;
shape.ThreeDFormat.LightRig.Direction = LightingDirection.Top;
shape.ThreeDFormat.Material = MaterialPresetType.Flat;
shape.ThreeDFormat.ExtrusionHeight = 100;
shape.ThreeDFormat.ExtrusionColor.Color = Color.Blue;
using (IImage thumbnail = slide.GetImage(imageScale, imageScale))
{
thumbnail.Save("sample_3d.png");
}
presentation.Save("sandbox_3d.pptx", SaveFormat.Pptx);
}
Полученный миниатюрный образ выглядит так:

3D‑вращение
Можно вращать 3D‑фигуры PowerPoint в 3D‑пространстве, что добавляет интерактивность. Чтобы вращать 3D‑фигуру в PowerPoint, обычно используют следующее меню:

В API Aspose.Slides вращение 3D‑фигур можно управлять с помощью свойства IThreeDFormat.Camera:
IAutoShape shape = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 200, 150, 200, 200);
shape.ThreeDFormat.Camera.SetRotation(20, 30, 40);
// ... установить другие параметры 3D-сцены
using (IImage thumbnail = slide.GetImage(imageScale, imageScale))
{
thumbnail.Save("sample_3d.png");
}
3D‑глубина и экструзия
Чтобы добавить третье измерение вашей фигуре и сделать её 3D‑фигурой, используйте свойства IThreeDFormat.ExtrusionHeight и IThreeDFormat.ExtrusionColor.Color:
IAutoShape shape = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 200, 150, 200, 200);
shape.ThreeDFormat.Camera.SetRotation(20, 30, 40);
shape.ThreeDFormat.ExtrusionHeight = 100;
shape.ThreeDFormat.ExtrusionColor.Color = Color.Purple;
// ... установить другие параметры 3D-сцены
using (IImage thumbnail = slide.GetImage(imageScale, imageScale))
{
thumbnail.Save("sample_3d.png");
}
Обычно вы используете меню Depth в PowerPoint, чтобы задать глубину для 3D‑фигуры PowerPoint:

3D‑градиент
Градиент можно использовать для заполнения цвета 3D‑фигуры PowerPoint. Давайте создадим фигуру с градиентной заливкой и применим к ней 3D‑эффект:
const float imageScale = 2;
using (Presentation presentation = new Presentation())
{
ISlide slide = presentation.Slides[0];
IAutoShape shape = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 200, 150, 250, 250);
shape.TextFrame.Text = "3D Gradient";
shape.TextFrame.Paragraphs[0].ParagraphFormat.DefaultPortionFormat.FontHeight = 64;
shape.FillFormat.FillType = FillType.Gradient;
shape.FillFormat.GradientFormat.GradientStops.Add(0, Color.Blue);
shape.FillFormat.GradientFormat.GradientStops.Add(100, Color.Orange);
shape.ThreeDFormat.Camera.CameraType = CameraPresetType.OrthographicFront;
shape.ThreeDFormat.Camera.SetRotation(10, 20, 30);
shape.ThreeDFormat.LightRig.LightType = LightRigPresetType.Flat;
shape.ThreeDFormat.LightRig.Direction = LightingDirection.Top;
shape.ThreeDFormat.ExtrusionHeight = 150;
shape.ThreeDFormat.ExtrusionColor.Color = Color.DarkOrange;
using (IImage thumbnail = slide.GetImage(imageScale, imageScale))
{
thumbnail.Save("sample_3d.png");
}
}
И вот результат:

Помимо градиентной заливки, фигуры можно заполнить изображением:
byte[] imageData = File.ReadAllBytes("image.jpg");
IPPImage image = presentation.Images.AddImage(imageData);
shape.FillFormat.FillType = FillType.Picture;
shape.FillFormat.PictureFillFormat.Picture.Image = image;
shape.FillFormat.PictureFillFormat.PictureFillMode = PictureFillMode.Stretch;
// ... настройка 3D: shape.ThreeDFormat.Camera, shape.ThreeDFormat.LightRig, shape.ThreeDFormat.Extrusion* свойства
using (IImage thumbnail = slide.GetImage(imageScale, imageScale))
{
thumbnail.Save("sample_3d.png");
}
Вот как это выглядит:

3D‑текст (WordArt)
Aspose.Slides также позволяет применять 3D к тексту. Для создания 3D‑текста можно использовать трансформирующий эффект WordArt:
const float imageScale = 2;
using (Presentation presentation = new Presentation())
{
ISlide slide = presentation.Slides[0];
IAutoShape shape = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 200, 150, 250, 250);
shape.FillFormat.FillType = FillType.NoFill;
shape.LineFormat.FillFormat.FillType = FillType.NoFill;
shape.TextFrame.Text = "3D Text";
Portion portion = (Portion)shape.TextFrame.Paragraphs[0].Portions[0];
portion.PortionFormat.FillFormat.FillType = FillType.Pattern;
portion.PortionFormat.FillFormat.PatternFormat.ForeColor.Color = Color.DarkOrange;
portion.PortionFormat.FillFormat.PatternFormat.BackColor.Color = Color.White;
portion.PortionFormat.FillFormat.PatternFormat.PatternStyle = PatternStyle.LargeGrid;
shape.TextFrame.Paragraphs[0].ParagraphFormat.DefaultPortionFormat.FontHeight = 128;
ITextFrameFormat textFrameFormat = shape.TextFrame.TextFrameFormat;
// установить трансформирующий эффект WordArt "Arch Up"
textFrameFormat.Transform = TextShapeType.ArchUp;
textFrameFormat.ThreeDFormat.ExtrusionHeight = 3.5f;
textFrameFormat.ThreeDFormat.Depth = 3;
textFrameFormat.ThreeDFormat.Material = MaterialPresetType.Plastic;
textFrameFormat.ThreeDFormat.LightRig.Direction = LightingDirection.Top;
textFrameFormat.ThreeDFormat.LightRig.LightType = LightRigPresetType.Balanced;
textFrameFormat.ThreeDFormat.LightRig.SetRotation(0, 0, 40);
textFrameFormat.ThreeDFormat.Camera.CameraType = CameraPresetType.PerspectiveContrastingRightFacing;
using (IImage thumbnail = slide.GetImage(imageScale, imageScale))
{
thumbnail.Save("text3d.png");
}
presentation.Save("text3d.pptx", SaveFormat.Pptx);
}
Вот результат:

FAQ
Будут ли 3D‑эффекты сохранены при экспорте презентации в изображения/PDF/HTML?
Да. 3D‑движок Slides рендерит 3D‑эффекты при экспорте в поддерживаемые форматы (images, PDF, HTML, и т.д.).
Могу ли я получить «эффективные» (окончательные) значения параметров 3D, учитывающие темы, наследование и т.п.?
Да. Slides предоставляет API для чтения эффективных значений (в том числе для 3D — освещения, фасок и т.д.), чтобы вы могли увидеть окончательные применённые настройки.
Работают ли 3D‑эффекты при конвертации презентации в видео?
Да. При генерации кадров для видео 3D‑эффекты рендерятся так же, как и при экспорте изображений.