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

Алгоритм 7.1. Тест видимости объекта.

Листинг 6.3. Описание трехмерного объекта на основе многоугольников. | Алгоритм Художника, Тест 1 | Время выполнения Алгоритма Художника | Использование уравнения плоскости для вершин многоугольника | Алгоритм 6.1. Алгоритм отсечения лучей. | Определение значения наклона | Формула 6.3. Вычисление первой Х-координаты пересечения. | Формула 6.6. Теорема Пифагора. | Вычисление масштаба | УЛУЧШЕННАЯ БИТОВАЯ ГРАФИКА И СПЕЦИАЛЬНЫЕ ЭФФЕКТЫ |


Читайте также:
  1. Алгоритм
  2. Алгоритм
  3. Алгоритм
  4. Алгоритм 11.1. Контроль столкновений с помощью описанных прямоугольников.
  5. Алгоритм 13.1. Алгоритм Преследования.
  6. Алгоритм 13.2. Алгоритм Уклонения.
  7. Алгоритм 13.3. Шаблоны со случайным выбором.

// Пусть объект размером Width x Height находится в точке (х,у).

// Размер экрана - Screen Width x Screen Height.

// Для каждого объекта производим следующую операцию:

if (X+Width>0 and X<Screen_Width and Y+Height>0 and Y<Screen_Height)

then

полностью или частично видим

goto отсечение

else

нет, не видим

goto следующий объект


Алгоритм 7.1 не особенно эффективен. Однако он выполняет свою функцию: если объект полностью или хотя бы частично должен появиться на экране, то нужно выполнить отсечение, после чего можно вывести изображение на экран. В противном случае проверяется следующий объект.

После того как мы приняли решение использовать отсечение, мы просто подсчитываем новые размеры и положение границ вырезанного изображения. Если вы попробуете это себе представить, то легко увидите, что в большинстве случаев отсечение может проводиться не по всем четырем, а только по двум смежным сторонам рисунка, например, по верхней и правой. А в некоторых случаях достаточно отсекать образ вообще только по одной стороне. Это выполняется для всех растровых изображений, имеющих размер меньше целого экрана.

Если же растровое изображение больше экрана хотя бы по одному измерению, то идея «вылетает в трубу». Так обычно бывает, когда мы масштабируем спрайт, имитируя приближение игрока к объекту. Но пока мы будем предполагать, что спрайты всегда меньше игрового поля экрана.

Если вы изучали функцию Draw_sprite() пятой главы или другие ее модификации, то, должно быть, заметили, что в ней выполняется вложенный цикл FOR, в котором битовый образ объекта рисуется по столбцам. Каждый столбец начинается с Х-коордипаты спрайта и спускается вниз по координате Y. Таким образом, мы должны изменить механизм этого цикла так, чтобы принять во внимание новые отправные и конечные координаты (х,у) и изменить исходное местоположение спрайта, если одна из координат выходит за пределы экрана. Не забывайте о том, что если координата Х или Y (либо обе) выходят за пределы экрана, это еще не значит, что ваш объект вообще невидим. На рисунке 7.4 изображен иллюстрирующий это пример.

Давайте изменим функцию Draw_sprite(), чтобы отсечь данные, не попадающие на экран. Новая версия будет работать на 5 процентов медленнее, однако она всегда будет корректно рисовать спрайты. Листинг 7-3 содержит ее исходный текст.

 


Дата добавления: 2015-07-12; просмотров: 183 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Листинг 7.1. Дизассемблирование оператора IF.| Листинг 7.3. Новая функция Draw_Sprite() с отсечением.

mybiblioteka.su - 2015-2024 год. (0.006 сек.)