- •Практикум по компьютерной графике
- •Оглавление
- •Введение
- •1. Лабораторная работа «ОсновыGimp»
- •Основные термины gimp
- •Основные приемы использования gimp
- •Панель инструментов
- •Окно изображения
- •Диалоги и панели
- •Работа с файлами Создание нового изображения
- •Открытие изображения
- •Сохранение изображения
- •Изменение масштаба и навигация по изображению
- •Рисование. Кисти
- •Отмена действий
- •Задание по лабораторной работе
- •2. Лабораторная работа «Фотомонтаж» Выделение областей
- •Прямоугольное и эллиптическое выделение
- •Свободное выделение и работа с быстрой маской
- •Умные ножницы
- •Выделение по цвету
- •Работа со слоями
- •Непрозрачность
- •Видимость
- •Текст вGimp
- •Преобразование изображения в слое
- •Общие свойства инструментов преобразования
- •Инструменты преобразования
- •Фотомонтаж
- •Задание по лабораторной работе
- •Тонирование
- •Яркость и контраст
- •Гистограмма изображения
- •Коррекция цветовых кривых
- •Фильтры
- •Фильтры размытия
- •Фильтры улучшения
- •Задание по лабораторной работе
- •4. Лабораторная работа «ОсновыIncscape» Что такоеIncscape
- •Основы Incscape Перемещение по холсту
- •Изменение масштаба
- •Инструменты Inkscape
- •Работа с документами
- •Основные приемы
- •Прямоугольники
- •Эллипсы
- •Спирали
- •Работа с фигурами Создание фигур
- •Перемещение, изменение размера и вращение
- •Изменение формы при помощи клавиш
- •Выделение нескольких объектов
- •Группировка
- •Заливка и обводка
- •Дублирование, выравнивание, распределение
- •Выделение объектов под объектами и перемещение выделенного
- •Задание по лабораторной работе
- •5. Лабораторная работа «Создание векторного логотипа» Размещение текста вдоль контура
- •Выполнение логических операций над фигурами Сумма
- •Разность
- •Пересечение
- •Исключающее или
- •Разделить
- •Работа с узлами Инструменты для управления узлами
- •Перемещение узлов
- •Горячие клавиши
- •Задание по лабораторной работе
- •6. Лабораторная работа «Программирование графики»
- •Сообщение wm_paint
- •Событие Paint
- •Объект Graphics для рисования
- •Методы и свойства класса Graphics
- •Задание по лабораторной работе
- •7. Лабораторная работа «Простейшая анимация»
- •Работа с таймером
- •Создание анимации
- •Движение по траектории
- •Задание по лабораторной работе
- •8. Лабораторная работа «Работа с растровыми изображениями»
- •Отображение графических файлов
- •Компоненты OpenFileDialog иSaveFileDialog
- •Простой графический редактор
- •Задание по лабораторной работе
- •9. Лабораторная работа «Преобразования на плоскости»
- •Простейшие преобразования на плоскости
- •Преобразование поворота и отражения
- •Однородные координаты
- •Комбинированные преобразования
- •Программная реализация
- •Задание по лабораторной работе
- •Варианты заданий
- •10. Лабораторная работа «3Dпреобразования и получение проекций»
- •Правосторонняя система координат
- •Преобразования в пространстве
- •Трехмерный перенос
- •Получение косоугольных проекций
- •Построение вида спереди
- •Программная реализация
- •Задание по лабораторной работе
- •Варианты заданий
- •11. Лабораторная работа «Построение трехмерных сцен наXaml»
- •Система координат и размещение камеры
- •Освещение сцены
- •Задание объектов трехмерной сцены
- •Применение материалов к модели
- •Трехмерные преобразования
- •Пример описания простой трехмерной сцены
- •Задание по лабораторной работе
- •12. Лабораторная работа «Трехмерные преобразования вWpf»
- •Связь процедурного кода и объектов описанных вXaml
- •Трехмерные преобразования в процедурном коде
- •Применение 3d-преобразований к отдельным элементам 3Dсцены
- •Создание анимации с помощью таймера
- •Задание по лабораторной работе
- •Список использованных источников
- •Практикум по компьютерной графике
- •Издано в авторской редакции
- •Отпечатано в Издательстве ни тпу в полном соответствии с качеством предоставленного оригинал-макета
- •3Аказ . Тираж экз.
Задание по лабораторной работе
Создать с помощью описания XAMLтрехмерную сцену, состоящую из нескольких разноцветных объектов. Добавьте к этой сцене несколько источников света. Поместите в отчет изображение этой сцены, полученное при различных трехмерных преобразованиях. Получите разные типы проекций, результат также поместите в отчет. Самостоятельно изучите возможности работы с текстурами. Добавьте в трехмерную сцену объекты с текстурой.
12. Лабораторная работа «Трехмерные преобразования вWpf»
Цель лабораторной работы:изучить принципы построения Динамических 3Dсцен с помощью процедурного кода вWPF. Написать и протестировать программу для анимации трехмерной сцены, состоящей из нескольких объектов.
Связь процедурного кода и объектов описанных вXaml
Среди пространств имен XAML можно выделить одно, которое объявляется почти в каждом файле XAML среды выполнения Windows, — это пространство имен для элементов, которые определены в языке XAML. По соглашению собственное пространство имен языка XAML сопоставляется с префиксом "x".
Префикс "x" (собственное пространство имен языка XAML) содержит несколько программных конструкций, которые часто используются в XAML-коде. Приведем только одну:x:Name, которая задает имя экземпляра объекта времени выполнения, созданного в исполняемом коде по итогам обработки элемента, который определяет этот объект в XAML-коде. Включениеx:Nameв код XAML можно рассматривать как объявление именованных переменных в коде.
Поэтому для доступа в процедурном коде к трехмерной модели необходимо включить x:NameвModelVisual3D:
<ModelVisual3D x:Name="MyModel">
…
</ModelVisual3D>
Описанной MyModelможно будет далее оперировать в процедурном коде. ОбъектMyModelпринадлежит классуModelVisual3D.
Трехмерные преобразования в процедурном коде
Рассмотрим пример поворота объекта созданного в 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;
}