Студопедия

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

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

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






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






    Рассмотрим пример поворота объекта созданного в 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 :: Мои Лекции
    Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
    Копирование текстов разрешено только с указанием индексируемой ссылки на источник.