Latex formulas

воскресенье, 26 февраля 2012 г.

Ъ-3d сценка

Таким же методом, как и при создании ландшафта создал 3d сценку - куб и над ним срезанный цилиндр

Размер мира - 32x32x128 (решил не заморачиваться над чем-то большим). Данные о высотах хранятся в массиве 32x32x128 послойно. Массив заполняется значениями -1, далее если нужно узнать высоты слоев с координатой (x,y) делаем так: idx = x*32*32 + y*32; Далее hei[idx] - нижняя координата 1 слоя, hei[idx+1] - верхняя 1-го, потом 2 слой итд, пока не найдем -1.

На экране рисуются уже не столбцы от низа экрана, а отрезки, соответствующие высоте слоя. Вся картинка оказывается нарисованной как бы "лентами", параллельными экрану.

Самое сложное в методе (и поэтому я не уверен, что он единcтвенно верный) - обнаружение перекрытий на экране. Вспомните, в ландшафте мы сравнивали экранную координату sy c величиной из массива, корректируя массив по необходимости. Тут же приходится считать перекрытия отрезков, что несколько сложнее. К тому же быстрота подсчета перекрытий зависит от числа связных множеств (отрезков), объединение которых составляет множество точек, уже нарисованных на экране.

Тем не менее такая простая сцена рендерится быстрее, чем методом рисования back-to-front.

Вот код:

Открыть спойлер

Комментариев нет:

Отправить комментарий