Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Применение 3D-преобразований к отдельным элементам 3D сцены






Для применения различных 3D-преобразований к разным элементам 3D сцены мы должны описать эти элементы как различные 3D модели, то есть создать различные объекты класса ModelVisual3D.

 

< Window x: Class=" WpfApplication1.MainWindow"

xmlns=" https://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns: x=" https://schemas.microsoft.com/winfx/2006/xaml"

Title=" MainWindow" Height=" 303" Width=" 312" Loaded=" Window_Loaded" >

< Grid>

<! -- Viewport3D определяет поврехность и область окна куда проецируется сцена. -->

< Viewport3D ClipToBounds=" True" Width=" 150" Height=" 150" >

 

<! -- Определяем положение и направление камеры. -->

< Viewport3D.Camera>

< PerspectiveCamera Position=" 0, 0, 2" LookDirection=" 0, 0, -1" FieldOfView=" 45" />

< /Viewport3D.Camera>

 

<! -- Определяем дочернии объекты для Viewport3D -->

< Viewport3D.Children>

 

<! -- Устанавливаем направления и цвет источника освещения. -->

< ModelVisual3D>

< ModelVisual3D.Content>

< DirectionalLight Color=" #FFFFFF" Direction=" -1, -1, -1" />

< /ModelVisual3D.Content>

< /ModelVisual3D>

 

<! -- Определяем первую 3D модель -->

< ModelVisual3D x: Name=" MyModel" >

< ModelVisual3D.Content>

< GeometryModel3D>

 

<! -- Определяем 3D объект -->

< GeometryModel3D.Geometry>

< MeshGeometry3D

TriangleIndices=" 0, 1, 2"

Positions=" -0.5, -0.5, 0.5 0.5, -0.5, 0.5 0.5, 0.5, 0.5" >

< /MeshGeometry3D>

< /GeometryModel3D.Geometry>

 

<! -- Зададим материал (цвет) объекта -->

< GeometryModel3D.Material>

< MaterialGroup>

< DiffuseMaterial Brush=" Blue" />

< /MaterialGroup>

< /GeometryModel3D.Material>

 

 

<! -- повернем объект на 40 градусов вокруг оси Y -->

< GeometryModel3D.Transform>

< RotateTransform3D>

< RotateTransform3D.Rotation>

< AxisAngleRotation3D Axis=" 0, 1, 0" Angle=" 40" />

< /RotateTransform3D.Rotation>

< /RotateTransform3D>

< /GeometryModel3D.Transform>

 

< /GeometryModel3D>

< /ModelVisual3D.Content>

< /ModelVisual3D>

 

<! -- Определяем вторую 3D модель -->

< ModelVisual3D x: Name=" MyModel2" >

< ModelVisual3D.Content>

< GeometryModel3D>

 

<! -- Определяем 3D объект -->

< GeometryModel3D.Geometry>

< MeshGeometry3D

TriangleIndices=" 0, 1, 2"

Positions=" -0.5, -0.5, 0.5 0.5, -0.5, 0.5 0.5, 0.5, 0.5" >

< /MeshGeometry3D>

< /GeometryModel3D.Geometry>

 

<! -- Зададим материал (цвет) объекта -->

< GeometryModel3D.Material>

< MaterialGroup>

< DiffuseMaterial Brush=" Red" />

< /MaterialGroup>

< /GeometryModel3D.Material>

 

 

<! -- повернем объект на 90 градусов вокруг оси Z -->

< GeometryModel3D.Transform>

< RotateTransform3D>

< RotateTransform3D.Rotation>

< AxisAngleRotation3D Axis=" 0, 0, 1" Angle=" 90" />

< /RotateTransform3D.Rotation>

< /RotateTransform3D>

< /GeometryModel3D.Transform>

 

< /GeometryModel3D>

< /ModelVisual3D.Content>

< /ModelVisual3D>

 

< /Viewport3D.Children>

 

 

< /Viewport3D>

< Button Content=" Поворот 1-Y" Height=" 23" HorizontalAlignment=" Left" Margin=" 7, 226, 0, 0" Name=" button1" VerticalAlignment=" Top" Width=" 87" Click=" button1_Click" />

< Button Content=" Поворот 2-X" Height=" 23" HorizontalAlignment=" Left" Margin=" 103, 226, 0, 0" Name=" button2" VerticalAlignment=" Top" Width=" 80" Click=" button2_Click" />

< Button Content=" Поворот 1-X" Height=" 23" HorizontalAlignment=" Right" Margin=" 0, 226, 9, 0" Name=" button3" VerticalAlignment=" Top" Width=" 87" Click=" button3_Click" />

< /Grid>

< /Window>

 

В нашем случае каждая модель представлена всего одним полигоном. Результат приведен на рис. 12.1.

 

Рис. 12.1. 3D сцена из двух 3D моделей

Далее к каждой 3D модели можно применять свои трехмерные преобразования, как показано ниже.

 

private RotateTransform3D myYRotate, myXRotate;

private AxisAngleRotation3D myYAxis, myXAxis;

private Transform3DGroup myTransform1, myTransform2;

 

private void Window_Loaded(object sender, RoutedEventArgs e)

{

myYRotate = new RotateTransform3D();

myYAxis = new AxisAngleRotation3D();

myYAxis.Axis = new Vector3D(0, 1, 0);

myYAxis.Angle = 7;

myYRotate.Rotation = myYAxis;

 

myXRotate = new RotateTransform3D();

myXAxis = new AxisAngleRotation3D();

myXAxis.Axis = new Vector3D(1, 0, 0);

myXAxis.Angle = 7;

myXRotate.Rotation = myXAxis;

 

myTransform1 = new Transform3DGroup();

myTransform2 = new Transform3DGroup();

 

MyModel.Transform = myTransform1;

MyModel2.Transform = myTransform2;

}

 

private void button1_Click(object sender, RoutedEventArgs e)

{

myTransform1.Children.Add(myYRotate);

}

 

private void button2_Click(object sender, RoutedEventArgs e)

{

myTransform2.Children.Add(myXRotate);

}

 

private void button3_Click(object sender, RoutedEventArgs e)

{

myTransform1.Children.Add(myXRotate);

}

}






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.