По сути, я хочу устранить необходимость генерации когерентного шума от процессора к графическому процессору. Оттуда я также хочу создать ландшафт для трехмерного мира, используя этот шум в качестве плотности в точках вокселей. После этого я хочу взять эти плотности и полигонизировать (генерировать вершины) их, представляющие ландшафт мира.
Это нормально и все. Но я также хочу динамически деформировать мир в режиме реального времени. Как только я дошел до этого момента, у меня возникла проблема с попыткой вернуть вершины в ЦП, чтобы выполнить такие вещи, как обнаружение столкновений и все игровые вычисления, которые я хочу задействовать на ЦП, а не на ГП.
Таким образом, вопрос заключается в следующем: как я могу вернуть подмножество вершин обратно в ЦП для решения конфликтов между прочим?
И еще один вопрос: есть ли простой способ взять набор вершин и сгенерировать из них индексы на GPU?
Я не совсем понимаю, какие шейдеры мне следует использовать для этих разных вещей. Я слышал о людях, которые используют пиксельный шейдер для сбора плотностей, а затем используют геометрический шейдер для работы с генерацией рельефа из вершин и затем каким-то образом включают вершинный шейдер для создания динамических деформаций.
Я использую C # 4.0, .NET 4.0 и XNA Game Studio 4.0.