Скайбокс¶
Graphics3DControl
поддерживает скайбокс. Скайбокс - это технология, используемая для создания захватывающего фона вокруг 3D-сцены.
Скайбокс состоит из большого куба, окружающего всю сцену, с шестью текстурированными гранями (спереди, сзади, слева, справа, сверху и снизу). Эти текстуры нанесены на внутренние стороны куба, создавая иллюзию далекого неба, горизонта или другого фона. Текстуры спроектированы таким образом, чтобы идеально сочетаться по краям, обеспечивая визуальную целостность при взгляде изнутри куба.
Скайбокс скрыт по умолчанию. Однако, если в модели используется металлический материал, скайбокс может отображаться в его отражениях.
Включить Скайбокс¶
Чтобы сделать скайбокс видимым, инициализируйте свойство Graphics3DControl.Skybox
с помощью объекта Skybox
и установите для свойства Skybox.IsVisible
значение true
.
xmlns:mx3d="https://schemas.eremexcontrols.net/avalonia/controls3d"
<mx3d:Graphics3DControl Name="g3DControl1">
<mx3d:Graphics3DControl.Skybox>
<mx3d:Skybox IsVisible="True"/>
</mx3d:Graphics3DControl.Skybox>
</mx3d:Graphics3DControl>
Укажите пользовательские текстуры Скайбокса¶
Чтобы создать пользовательский скайбокс, вам нужно указать шесть отдельных текстур (растровых изображений), которые будут отображаться на передней, задней, левой, правой, верхней и нижней гранях куба скайбокса.
- Все текстуры скайбокса должны быть одинакового размера.
- Каждая текстура должна иметь квадратное соотношение сторон (1:1), чтобы предотвратить искажения при сопоставлении с гранями куба.
Используйте следующие свойства объекта Skybox
, чтобы создать текстуры skybox для граней куба:
Skybox.Top
Skybox.Bottom
Skybox.Left
Skybox.Right
Skybox.Front
Skybox.Rear
Пример¶
Следующий код демонстрирует, как можно задать пользовательские текстуры skybox в XAML. Текстуры хранятся в папке проекта G3dControlSample/Resources/Textures, и для их свойств Build Action
установлено значение AvaloniaResource
.
xmlns:mx3d="https://schemas.eremexcontrols.net/avalonia/controls3d"
<mx3d:Graphics3DControl Name="g3DControl1" ModelsSource="{Binding Models}">
<mx3d:Graphics3DControl.Gizmo>
<mx3d:Gizmo x:Name="Gizmo" />
</mx3d:Graphics3DControl.Gizmo>
<mx3d:Graphics3DControl.Skybox>
<mx3d:Skybox IsVisible="True"
Top="avares://G3dControlSample/Resources/Textures/py.png"
Bottom="avares://G3dControlSample/Resources/Textures/ny.png"
Left="avares://G3dControlSample/Resources/Textures/nx.png"
Right="avares://G3dControlSample/Resources/Textures/px.png"
Front="avares://G3dControlSample/Resources/Textures/pz.png"
Rear="avares://G3dControlSample/Resources/Textures/nz.png"
/>
</mx3d:Graphics3DControl.Skybox>
<mx3d:Graphics3DControl.Materials>
<mx3d:SimplePbrMaterial Metallic="0.6" />
</mx3d:Graphics3DControl.Materials>
</mx3d:Graphics3DControl>
Пример - Отключение отражений для металлических материалов¶
Если в 3D-модели используется металлический материал, поверхность отражает освещение и скайбокс по умолчанию. Чтобы предотвратить подобные отражения при использовании металлических материалов, выполните следующие действия:
- Отключите освещение по умолчанию с помощью свойства
Graphics3DControl.AllowDefaultLight
. - Примените белое растровое изображение ко всем граням куба skybox.
Следующий код показывает, как вы можете предотвратить отражения в коде:
g3DControl.Exposure = 4.5f;
g3DControl.AllowDefaultLight = false;
Skybox skybox = new Skybox();
skybox.IsVisible = false;
Bitmap whiteBitmap = getSolidColorBitmap(Colors.White);
skybox.Top = skybox.Bottom = whiteBitmap;
skybox.Left = skybox.Right = whiteBitmap;
skybox.Rear = skybox.Front = whiteBitmap;
g3DControl.Skybox = skybox;
Bitmap getSolidColorBitmap(Color fillColor)
{
var bitmap = new RenderTargetBitmap(new PixelSize(100, 100));
using (var context = bitmap.CreateDrawingContext())
{
Brush brush = new SolidColorBrush(fillColor);
context.FillRectangle(brush, new Rect(0, 0, 100, 100));
}
return bitmap;
}
* Эта страница была создана автоматически с помощью сервиса машинного перевода Яндекс Переводчик.