Студопедия

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

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

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






  • Как продвинуть сайт на первые места?
    Вы создали или только планируете создать свой сайт, но не знаете, как продвигать? Продвижение сайта – это не просто процесс, а целый комплекс мероприятий, направленных на увеличение его посещаемости и повышение его позиций в поисковых системах.
    Ускорение продвижения
    Если вам трудно попасть на первые места в поиске самостоятельно, попробуйте технологию Буст, она ускоряет продвижение в десятки раз, а первые результаты появляются уже в течение первых 7 дней. Если ни один запрос у вас не продвинется в Топ10 за месяц, то в SeoHammer за бустер вернут деньги.
    Начать продвижение сайта
  • Применение 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 :: Мои Лекции
    Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
    Копирование текстов разрешено только с указанием индексируемой ссылки на источник.