Введение в программирование трехмерных игр с DX9




Разделенный на сегменты буфер вершин



Рисунок 14.1. Разделенный на сегменты буфер вершин



Рисунок 14.1. Разделенный на сегменты буфер вершин


Теперь создайте глобальную переменную i= 0 для отслеживания того, с каким сегментом мы работаем.

Для каждого кадра:

Обновите все частицы.

Пока не будут визуализированы все живые частицы:

Если буфер вершин не заполнен, то:

Блокируем сегмент i с флагом D3DLOCK_NOOVERWRITE.

Копируем 500 частиц в сегмент i.

Если буфер вершин заполнен, то:

Возвращаемся к началу буфера вершин: i = 0.

Блокируем сегмент i с флагом D3DLOCK_DISCARD.

Копируем 500 частиц в сегмент i.

Визуализируем сегмент i.

Переходим к следующему сегменту: i++

ПРИМЕЧАНИЕ

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

ПРИМЕЧАНИЕ

Вспомните, что наш буфер вершин динамический, и поэтому мы можем пользоваться преимуществами, предоставляемыми флагами динамической блокировки D3DLOCK_NOOVERWRITE и D3DLOCK_DISCARD. Эти флаги позволяют блокировать часть буфера вершин, которая не визуализируется, в то время как остальные части буфера вершин будут продолжать визуализироваться. Например, предположим, что мы визуализируем сегмент 0; используя флаг D3DLOCK_NOOVERWRITE мы можем заблокировать и заполнить сегмент 1 в то время, когда визуализируется сегмент 0. Это позволяет предотвратить простои визуализации, которые возникали бы в ином случае.




Содержание  Назад  Вперед