Язык SDL наряду с классами Scene и Shape значительно упрощает разделение задач программирования и задач проектирования сцен. Программист создает приложение, способное рисовать любые сцены, описанные с помощью списка источников света и списка геометрических объектов. Это приложение может использоваться снова и снова с различными файлами описания сцен. Ключевой задачей в процессе разработки сцен является применение к каждому объекту правильных геометрических преобразований. Поскольку обычно делается известное количество проб и ошибок, весьма удобно иметь возможность выражать эти преобразования в компактной и читабельной форме.
Тематические задания, к которым мы переходим, конкретизируют основные идеи данной главы и предлагают способы попрактиковаться с аффинными преобразованиями в графических программах. В этих' упражнениях представлен широкий диапазон: от глубокого погружения в теорию преобразований до фактического моделирования и визуализации таких объектов, как электронные схемы CAD и роботы.
5.8. Тематические задания Тематическое задание 5.1. Выполнение вашего собственного преобразования с помощью СТ в классе Canvas
Уровень сложности И.
Легко представить себе ситуации, в которых вам придется реализовать сам механизм преобразований, а не полагаться в этом на OpenGL. В этом тематическом задании вам предстоит добавить в класс Canvas поддержку текущего преобразования СТ для случая двумерного рисования. Это предполагает написание нескольких функций для инициализации и изменения самого СТ:
void Canvas:: initCT(void):
// init СТ to unit transformation
// инициализируем СТ в единичное преобразование
void Canvas:: scale2D(double sx, double sy):
void Canvas:: trans!ate2D(double dx. double dy):
void Canvas:: rotate2D(double angle):
Вам придется также написать другие функции, включаемые в состав функций moveToO и ИпеТоО таким образом, чтобы все посылаемые туда точки «молча» преобразовывались бы до их применения. В качестве дополнительного усовершенствования добавьте стековый механизм для СТ наряду с функциями pushCTO и рорСТО. Примените свои новые инструменты для каких-нибудь интересных примеров двумерного моделирования и рисования.