В результате проведения анализа алгоритмов была выбрана следующая последовательность проведения преобразований:
В связи со спецификой требований к программному продукту, т.е. необходимости реализации естественного (Солнечного) освящения. Источник освещения сцены мы считаем точечным и удалённым от прорисовываемых объектов.
Поэтому, источник задаётся двумя углами (азимутальным и зенитным), а также цветом.
Каждому прорисовываемый объекту в программе назначены следующие глобальные параметры: имя (не изменяется), координаты в пространстве, собственный угол азимутального поворота, цвет, пункт назначения.
Каждый объект загружается из файла в виде списка треугольников, либо четырехугольников. Треугольник, выбранный в данной программе единицей аппроксимации, задаётся в виде трёх вершин.
Задача нахождения пересечения треугольника и отрезка разбита на несколько этапов:
нахождение точки пересечения прямой, содержащей отрезок, и плоскости, содержащий треугольник.
проверка принадлежности найденной точки отрезку.
проверка на принадлежность этой точки треугольнику.
Если все проверки дали положительный результат, то считаем, что пересечение имеется (его координаты при этом являются избыточными итоговыми данными).
В качестве языка реализации программного комплекса был выбран Object Pascal, а средой разработки - Delphi 7. При данном выборе учитывались следующие моменты:
Поддержка объектно-ориентированного программирования, что облегчает создание сложных систем.
Предоставление средств визуального программирования для создания удобного интерфейса.
Обеспечение необходимой функциональности и читаемость кода программы.
Delphi был выбран оптимальной средой реализации как наиболее широко используемый и полнофункциональный компилятор на основе языка Pascal.
На рисунке 2 представлена схема взаимодействия классов программы, на которой отображены основные вызовы. Стрелками с кружочком показаны включения методов в классы, а обычными стрелками - их вызовы.
Процессор | Режим без теней | Итоговый результат |
AMD Athlon XP 2000+ (1.6 Ghz) | Отлично | 4161 |
P4 Northwood 2.6 GHz | Отлично | 3277 |
AMD Athlon 64 3000+ 939 (1.8Ghz) | Отлично | 5677 |
PIII 733Mhz | Недостаточна | 1628 |
P4 Prescott 3.0 GHz | Отлично | 2697 |
Core 2 Duo E4500 (2.2Ghz) | Отлично | 4500 |
Core 2 Duo E4400@ (3.29Ghz) | Отлично | 7700 |
AMD Turion TL-52 (1.8 Ghz) | Отлично | 4100 |
Из сводной таблицы, что программа ощутимо быстрее выполняется на процессорах фирмы AMD. В чем же причина? В процессорах от AMD традиционно, начиная с архитектуры K7, применяется очень быстрый блок вычислений с плавающей точкой. (FPU) [4] [5] Поэтому мы видим, что Athlon XP 2000+, который вышел на рынок в 2002 работает почти на равнее с современным процессором от Intel - Core 2 Duo E4400 и в 1.5 раза обгоняет P4 3.0Ghz на ядре Prescott. Интересна разница между P4 Northwood 2.6 GHz и P4 Prescott 3.0 GHz. Известно, что в ядро Prescott могло обеспечить ускорение в операциях с плавающей запятой при сравнении с Northwood только при использовании оптимизированных под SSE3 компиляторов, что ярко и отображается на результатах. Второй вывод, который можно сделать - программа очень сильно зависит от скорости работы с памятью. Этого стоило ожидать при выборе алгоритма Z - буфера. Так AMD Athlon 64 3000+ 939 (1.8Ghz) становится вторым по скорости работы после разогнанного Core 2 Duo E4400@ (3.29Ghz). Причина - интегрированный контроллер памяти, работающий в двухканальном режиме, который позволяет значительно снизить задержки при обращении к памяти и увеличить скорость обмена данными. [4] Однако, мы видим, что Turion TL-52 достаточно сильно проигрывает настольному одночастотному коллеге. TL-52 использует память типа DDRII 633, которая обладает в два и более раза большими задержками, в сравнении с DDRI 400 и одноканальный режим работы. Однако, DDRII позволяет увеличить производительность, но при работе на достаточно больших частотах. Разгон E4400 на 62% позволил превзойти процессор с изначальной частотой на 200Mhz большей на 71%. Однако, причина такого прироста не только в росте частоты процессора. Шина процессора была разогнана на 80%, а память работает на частоте в 864Mhz. Мы видим реальный существенный рост скорости работы программы при увеличении скорости обмена данными с памятью, тогда как частота процессора влияет на результаты намного меньше.