Студопедия

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

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

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






Трехмерные преобразования в процедурном коде






Рассмотрим пример поворота объекта созданного в XAML вокруг оси y. Предварительно подготовим необходимые объекты в обработчике события Loaded.

 

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;

 

myTransform1 = new Transform3DGroup();

 

MyModel.Transform = myTransform1;

}

 

myYRotate, myYAxis, myTransform1 описываются выше как поля класса MainWindow.

Класс RotateTransform3D отвечает за преобразование поворота. С помощью класса AxisAngleRotation3D описывается ось, вокруг которой будет произведен поворот. Свойство Axis описывает направление оси через объект класса Vector3D. Свойство Angle задает угол поворота в градусах.

Далее создается объект myTransform1 класса Transform3DGroup, который ставится в соответствие полю Transform класса нашей 3D-модели. Этот класс удобно использовать для группы последовательных 3D-преобразований. Фактически Transform3DGroup представляет собой коллекцию объектов типа Transform3D. Отметим, что на данном этапе описанное преобразование поворота и наша 3D-модель пока ни как не связаны.

Далее создадим на форме кнопку для поворота. Обработчик события этой кнопки будет выглядеть следующим образом.

 

private void button1_Click(object sender, RoutedEventArgs e)

{

myTransform1.Children.Add(myYRotate);

}

Таким образом, при нажатии на кнопку в коллекцию преобразований с 3D-моделью будет добавляться очередной поворот. Вторым подходом, сокращающим количество элементов коллекции, является способ более раннего связывания 3D-модели с 3D-преобразованиями. Например:

 

private void Window_Loaded(object sender, RoutedEventArgs e)

{

myYRotate = new RotateTransform3D();

myYAxis = new AxisAngleRotation3D();

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

myYAxis.Angle = 0;

myYRotate.Rotation = myYAxis;

 

myXRotate = new RotateTransform3D();

myXAxis = new AxisAngleRotation3D();

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

myXAxis.Angle = 0;

myXRotate.Rotation = myXAxis;

 

myTransform1 = new Transform3DGroup();

 

MyModel.Transform = myTransform1;

 

myTransform1.Children.Add(myYRotate);

myTransform1.Children.Add(myXRotate);

}

 

При обработке события нажатия на кнопке, в этом случае, достаточно менять параметры созданных преобразований. Например, увеличивать угол поворота.

 

private void button1_Click(object sender, RoutedEventArgs e)

{

myYAxis.Angle += 7;

myXAxis.Angle += 7;

}

 






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