Создание 3D-эффектов в презентациях с использованием .NET
Обзор
Aspose.Slides for .NET может создавать, изменять, сохранять и отображать 3D-форматирование в стиле PowerPoint для фигур и текста. В этой статье рассматриваются 3D-эффекты, такие как вращение, выдавливание, фаски, освещение, материал, градиентные или растровые заливки и 3D-текст.
Note
Эта статья посвящена эффектам 3D-форматирования фигур и текста в PowerPoint. Она не относится к вставке или редактированию отдельные файлы 3D-моделей. При экспорте слайда в изображение, PDF или HTML Aspose.Slides отображает эти 3D-эффекты в экспортированном 2D-выводе.Концепции 3D-форматирования
Используйте свойство IShape.ThreeDFormat для применения 3D-форматирования к фигуре. Это свойство предоставляет IThreeDFormat, который управляет 3D-сценой для данной фигуры.
Для текста используйте свойство ITextFrameFormat.ThreeDFormat. Оно применяет 3D-форматирование к текстовой рамке, а не к телу фигуры.
Самыми важными свойствами являются:
| Свойство | Что контролирует | Когда использовать |
|---|---|---|
| Camera | Точка обзора, предустановленный тип камеры, вращение, масштаб и перспектива. | Вращайте объект в 3D-пространстве или соответствуйте предустановке вращения 3D в PowerPoint. |
| LightRig | Предустановка света, направление и вращение света. | Изменяйте отображение бликов и теней на 3D-поверхности. |
| Material | Материал поверхности, например плоский, матовый, пластик или металл. | Сделайте одну и ту же геометрию более плоской, мягкой, блестящей или металлической. |
| ExtrusionHeight | Насколько далеко фигура вытягивается назад от своей передней грани. | Преобразуйте плоскую фигуру в видимый толстой 3D-объект. |
| ExtrusionColor | Цвет вытянутых боковых граней. | Сделайте глубину видимой или согласуйте цвет сторон с передней заливкой. |
| Depth | Дополнительная 3D-глубина, используемая в 3D-форматировании PowerPoint. | Точно настройте глубину фигур или текста, особенно вместе с настройками фаски и материала. |
| BevelTop и BevelBottom | Поднятые или скруглённые кромки на передних и задних гранях. | Добавьте смягчённый или формованный край вместо острого плоского. |
| ContourColor и ContourWidth | Контур вокруг 3D-объекта. | Подчеркните границу объекта в отрисованном выводе. |
Создание 3D-фикуры
Фигуре обычно требуются четыре типа настроек, прежде чем она будет выглядеть правдоподобно 3D:
- Настройки камеры, поскольку вид по умолчанию может скрывать выдавливание.
- Настройки света, поскольку освещение делает грани и стороны заметными.
- Настройки материала, поскольку поверхность влияет на то, как свет отображается.
- Настройки выдавливания или глубины, поскольку плоской фигуре нужна толщина.
Следующий пример создает прямоугольник, добавляет текст к его передней грани и применяет 3D-форматирование. Значения вращения камеры указаны в градусах, высота выдавливания — 100 пунктов. Пример рендерит слайд в PNG-изображение с двойными размерами по сравнению с оригиналом и сохраняет презентацию в формате PPTX.
using System.Drawing;
using Aspose.Slides;
using Aspose.Slides.Export;
const float imageScale = 2;
using var presentation = new Presentation();
var slide = presentation.Slides[0];
var shape = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 200, 150, 200, 200);
shape.TextFrame.Text = "3D";
shape.TextFrame.Paragraphs[0].ParagraphFormat.DefaultPortionFormat.FontHeight = 64;
shape.FillFormat.FillType = FillType.Solid;
shape.FillFormat.SolidFillColor.Color = Color.CornflowerBlue;
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 var thumbnail = slide.GetImage(imageScale, imageScale);
thumbnail.Save("shape_3d.png");
presentation.Save("shape_3d.pptx", SaveFormat.Pptx);
Отрендеренное изображение слайда показывает прямоугольник как толстый 3D-блок:

Вращение фигуры с помощью камеры
В PowerPoint 3D-вращение настраивается в панеле 3‑D Rotation. Значения вращения по осям X, Y и Z соответствуют вращению, установленному через API камеры.

В Aspose.Slides доступ к камере осуществляется через IThreeDFormat.Camera. Этот пример создает прямоугольник, выбирает ортографический фронтальный вид и устанавливает вращения X, Y и Z соответственно в 20, 30 и 40 градусов. Он конфигурирует фигуру в памяти без сохранения файла:
using Aspose.Slides;
using var presentation = new Presentation();
var slide = presentation.Slides[0];
var shape = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 200, 150, 200, 200);
shape.ThreeDFormat.Camera.CameraType = CameraPresetType.OrthographicFront;
shape.ThreeDFormat.Camera.SetRotation(20, 30, 40);
Используйте камеру, когда необходимо изменить то, как зритель видит объект. Это не меняет 2D-геометрию фигуры на слайде. Это меняет 3D-точку обзора, используемую PowerPoint и Aspose.Slides при рендеринге.
Добавление выдавливания и глубины
Выдавливание делает фигуру толстой, вытягивая её за переднюю грань. В PowerPoint контроль глубины задаёт эту видимую толщину, а контроль цвета задаёт цвет боковых граней.

Установите IThreeDFormat.ExtrusionHeight для толщины и IThreeDFormat.ExtrusionColor для цвета боковых граней. В этом примере прямоугольнику задаётся выдавливание 100 пунктов с пурпурными боковыми гранями, а камера вращается, чтобы показать его толщину. Фигура конфигурируется в памяти без сохранения файла:
using System.Drawing;
using Aspose.Slides;
using var presentation = new Presentation();
var slide = presentation.Slides[0];
var shape = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 200, 150, 200, 200);
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.Purple;
Свойство IThreeDFormat.Depth задаёт глубину 3D-фигуры. Свойство ExtrusionHeight управляет высотой эффекта выдавливания, как показано в этом примере.
Использование градиентных или растровых заливок с 3D-эффектами
3D-форматирование независимо от заливки фигуры. Вы можете применить сплошной цвет, градиент, узор или растровую заливку к передней грани и при этом использовать те же настройки камеры, света, материала и выдавливания.
В этом примере к передней грани применяется градиент от синего к оранжевому, а к выдавливанию 150 пунктов — тёмно-оранжовый цвет. Остановки градиента на 0 и 100 указывают начало и конец градиента. Значения вращения камеры указаны в градусах. Слайд рендерится в PNG-изображение с двойными размерами по сравнению с оригиналом:
using System.Drawing;
using Aspose.Slides;
const float imageScale = 2;
using var presentation = new Presentation();
var slide = presentation.Slides[0];
var 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.Material = MaterialPresetType.Flat;
shape.ThreeDFormat.ExtrusionHeight = 150;
shape.ThreeDFormat.ExtrusionColor.Color = Color.DarkOrange;
using var thumbnail = slide.GetImage(imageScale, imageScale);
thumbnail.Save("gradient_3d.png");

Чтобы использовать растровую заливку, добавьте изображение в презентацию и назначьте его заливкой фигуры. Этот пример требует наличия файла с именем “image.jpg” в рабочем каталоге. Он растягивает изображение, чтобы заполнить прямоугольник, применяет выдавливание 150 пунктов и задаёт вращение камеры в градусах. Фигура конфигурируется в памяти без сохранения или рендеринга файла:
using System.Drawing;
using System.IO;
using Aspose.Slides;
using var presentation = new Presentation();
var slide = presentation.Slides[0];
var shape = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 200, 150, 250, 250);
var imageData = File.ReadAllBytes("image.jpg");
var image = presentation.Images.AddImage(imageData);
shape.FillFormat.FillType = FillType.Picture;
shape.FillFormat.PictureFillFormat.Picture.Image = image;
shape.FillFormat.PictureFillFormat.PictureFillMode = PictureFillMode.Stretch;
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.Material = MaterialPresetType.Flat;
shape.ThreeDFormat.ExtrusionHeight = 150;
shape.ThreeDFormat.ExtrusionColor.Color = Color.DarkOrange;

Применение 3D-форматирования к тексту
3D-форматирование фигуры влияет на тело фигуры. 3D-форматирование текста влияет на текстовую рамку. Это полезно для эффектов, похожих на WordArt, где самим буквам нужны выдавливание, материал, освещение и настройки камеры.
В следующем примере создаётся текст с оранжево-белым узором сетки, применяется верхняя дуга, и настраиваются 3D-параметры через ITextFrameFormat.ThreeDFormat. Высота выдавливания и глубина указаны в пунктах, а вращение света — в градусах. Заливка и контур фигуры скрыты, чтобы был виден только текст. Пример рендерит PNG-изображение с двойными размерами по сравнению с оригиналом и сохраняет презентацию в формате PPTX:
using System.Drawing;
using Aspose.Slides;
using Aspose.Slides.Export;
const float imageScale = 2;
using var presentation = new Presentation();
var slide = presentation.Slides[0];
var 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";
var 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;
var textFrameFormat = shape.TextFrame.TextFrameFormat;
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 var thumbnail = slide.GetImage(imageScale, imageScale);
thumbnail.Save("text_3d.png");
presentation.Save("text_3d.pptx", SaveFormat.Pptx);

Сохранение текста плоским на 3D-фигуре
Чтобы текст оставался читаемым, сохраняя 3D-вид фигуры, установите ITextFrameFormat.KeepTextFlat через ITextFrame.TextFrameFormat. При значении true текст остаётся вне 3D-сцены. При значении false текст участвует в сцене и следует её 3D-ориентации.
Эта настройка не удаляет 3D-форматирование фигуры: её камера, освещение, материал и выдавливание остаются настроенными через IShape.ThreeDFormat. Это также отличается от обычного вращения. IShape.Rotation вращает фигуру в плоскости слайда, тогда как ITextFrameFormat.RotationAngle управляет пользовательским вращением текста внутри его ограничивающего прямоугольника. Сохранение текста вне 3D-сцены не сбрасывает ни один из этих углов.
В следующем автономном примере создаётся синий прямоугольник с текстом и клонируется рядом с оригиналом. Обе фигуры имеют одинаковое 3D-форматирование; различается только настройка текста: false слева и true справа. Углы камеры указаны в градусах, высота выдавливания — 40 пунктов. Пример сохраняет презентацию в формате PPTX и рендерит сравнительный слайд в PNG с двойными размерами по сравнению с оригиналом.
using System.Drawing;
using Aspose.Slides;
using Aspose.Slides.Export;
using var presentation = new Presentation();
var slide = presentation.Slides[0];
var shape = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 70, 160, 240, 140);
shape.TextFrame.Text = "Readable text";
shape.TextFrame.Paragraphs[0].ParagraphFormat.DefaultPortionFormat.FontHeight = 28;
shape.TextFrame.Paragraphs[0].ParagraphFormat.Alignment = TextAlignment.Center;
shape.TextFrame.TextFrameFormat.AnchoringType = TextAnchorType.Center;
shape.FillFormat.FillType = FillType.Solid;
shape.FillFormat.SolidFillColor.Color = Color.CornflowerBlue;
shape.ThreeDFormat.Camera.CameraType = CameraPresetType.OrthographicFront;
shape.ThreeDFormat.Camera.SetRotation(30, 30, 0);
shape.ThreeDFormat.LightRig.LightType = LightRigPresetType.Flat;
shape.ThreeDFormat.LightRig.Direction = LightingDirection.Top;
shape.ThreeDFormat.Material = MaterialPresetType.Flat;
shape.ThreeDFormat.ExtrusionHeight = 40;
shape.ThreeDFormat.ExtrusionColor.Color = Color.RoyalBlue;
shape.TextFrame.TextFrameFormat.KeepTextFlat = false;
var flatTextShape = (IAutoShape)slide.Shapes.AddClone(shape, 400, 160);
flatTextShape.TextFrame.TextFrameFormat.KeepTextFlat = true;
presentation.Save("keep_text_flat.pptx", SaveFormat.Pptx);
using var image = slide.GetImage(2, 2);
image.Save("keep_text_flat.png");

Экспорт и поведение рендеринга
Aspose.Slides сохраняет 3D-форматирование при сохранении в форматы PowerPoint, такие как PPTX. При рендеринге или экспорте в форматы фиксированного макета 3D-сцена растеризуется или рисуется в вывод как 2D-результат. Это относится к рендерингу слайдов в PNG, экспорту в PDF, экспорту в HTML, либо к генерации кадров для video conversion.
- Экспортированные изображения и PDF не являются интерактивными. Объект нельзя вращать зрителем после экспорта.
- Окончательный вид зависит от комбинации камеры, светового оборудования, материала, выдавливания, заливки и масштабирования слайда.
- Если необходимо просмотреть наследованные или основанные на теме значения форматирования, читайте эффективные свойства фигуры.
- Некоторые форматы вывода не могут хранить редактируемое 3D-форматирование PowerPoint. В этих форматах визуальный результат рендерится, а не сохраняется как редактируемые 3D-настройки.
FAQ
Может ли Aspose.Slides создавать интерактивные 3D‑презентации?
Aspose.Slides создает и рендерит 3D-эффекты PowerPoint для фигур и текста. Он не делает экспортированные изображения, PDF или HTML‑страницы интерактивными 3D‑сценами, которые зритель мог бы вращать. В PPTX 3D‑форматирование остаётся редактируемым в PowerPoint, если формат поддерживает его.
В чем разница между 3D‑моделью и 3D‑эффектом?
3D‑модель — это отдельный 3D‑объект, вставляемый в презентацию. 3D‑эффект — это форматирование, применяемое к обычной фигуре или тексту PowerPoint, например вращение, выдавливание, фаска, освещение и материал. В этой статье рассматриваются 3D‑эффекты.
Какие настройки необходимы для видимой 3D‑фигуры?
Минимально необходимо задать вращение камеры и либо выдавливание, либо глубину. На практике также стоит установить световое оборудование и материал, чтобы отрисованные грани имели чёткие блики и тени.
Можно ли применять 3D‑эффекты как к фигурам, так и к тексту?
Да. Используйте IShape.ThreeDFormat для тела фигуры и ITextFrameFormat.ThreeDFormat для текста.
Будут ли 3D‑эффекты видны при экспорте в изображения, PDF, HTML или видеокадры?
Да. Aspose.Slides рендерит 3D-эффекты при создании изображений слайдов, PDF‑вывода, HTML‑вывода и кадров, используемых для видеоконверсии. Экспортированный результат содержит отрисованный вид, а не редактируемый 3D‑объект.
Можно ли прочитать окончательные 3D‑значения после применения наследования и настроек темы?
Да. Используйте API эффективного форматирования, описанные в эффективные свойства фигуры, чтобы прочитать окончательные значения камеры, светового оборудования, фаски и связанных 3D‑параметров.