XNA, окклюзионная отбраковка и обнаружение столкновений - PullRequest
3 голосов
/ 14 сентября 2010

Я собрал гибридный прототип quadtree / BSP для проверки обнаружения столкновений и выбраковки окклюзии в движке для игры XNA, которую я собираю.

Насколько я понимаю, одна из оптимизаций, которую дает нам аппаратное ускорение, - это возможность хранить списки вершин и индексов на карте, так что вызовы для рисования связанной геометрии не должны отправлять данные модели для каждого кадра .

На уровне с лотом геометрии, как вам это удается в XNA? Например, если бы я работал в OpenGL, я бы вел список того, что находится на карте, и просто отправлял то, что нужно обновить. Тем не менее, высокий уровень абстракции структуры XNA, по-видимому, настолько инкапсулирует это, что я не могу с этим справиться.

Скажите мне, почему я не прав, или почему я не должен волноваться.

1 Ответ

2 голосов
/ 14 сентября 2010

В XNA графический драйвер решает, в какой памяти лучше всего расположить ваши вершинные и индексные буферы, основываясь на свойствах указанных вами буферов.Выбор, который вы можете повлиять на то, где хранится буфер, включает:

  • Использовать ли динамический буфер или обычный буфер

"В ситуациях, когда ваша игра часто изменяетбуфер вершин, рекомендуется, чтобы буфер создавался или производился от DynamicVertexBuffer вместо класса VertexBuffer. "

  • Параметр использования при создании буфера

WriteOnly"Указывает, что приложение выполняет запись только в буфер вершин. Если указан, драйвер выбирает наилучшее место в памяти для эффективной записи и рендеринга. Попытки чтения из буфера вершин только для записи завершаются неудачей. "

Сводка

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

Примечание. Для XNA 3.1 и ниже с динамическими данными вершин и индексов наxbox было быстрее хранить данные в управляемом массиве и использовать DrawUserPrimitives, чем использовать DynamicVertexBuffer или DynamicIndexBuffer.

Если вы в конечном итоге используете динамический буфер, вы должны быть осторожны, чтобы не остановить конвейерпри использовании SetData.Подробнее см. http://blogs.msdn.com/b/shawnhar/archive/2008/04/15/stalls-part-two-beware-of-setdata.aspx.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...