Как я мог прочитать информацию с видеокарты после обработки? - PullRequest
0 голосов
/ 08 сентября 2011

Предположим, например, что у меня была "тканевая" сетка 10x10, где каждый квадрат составлял два треугольника. Теперь, если бы я хотел оживить это, я мог бы сделать весенние вычисления на процессоре. Каждая вершина будет иметь свои собственные «пружинные» данные и, будем надеяться, подпрыгнет, как любой тип «ткани», который она должна была представлять.

Тем не менее, для этого потребуется минимум около 380? весенние расчеты на кадр. К счастью, вычисления для каждой вершины являются «смущающе параллельными» - если бы у меня был один процессор на вершину, каждая вершина могла бы работать на одном процессоре. Поэтому теоретически графические процессоры являются отличным выбором для выполнения таких вычислений.

За исключением (и это использует DirectX / SlimDX) - я понятия не имею / не знаю, как бы / должен:

1) Отправьте все эти данные вершин на видеокарту (да, я знаю, как визуализировать материал, и даже написал свой собственный глобальный файл световых эффектов на пиксель и смешение текстур, однако для каждой вершины необходимо: быть в состоянии получить доступ к данным о положении по крайней мере трех других вершин). Я полагаю, что мог бы вставить соответствующие позиции вершин и количество позиций вершин в TextureCoords, но может быть другое, стандартное решение.

2) Затем прочитайте все данные вершин, чтобы я мог обновить сетку в памяти. В противном случае каждое обновление будет воздействовать на одни и те же данные до точно такого же результата, подобно добавлению 2 + 3 = 5, 2 + 3 = 5, 2 + 3 = 5, когда вы хотите, чтобы 2 + 3 = 5 - 2 = 3 + 1,5 = 4,5.

И может быть, я смотрю в неправильном направлении, чтобы сделать это.

Спасибо.

1 Ответ

1 голос
/ 14 октября 2011

Вы можете использовать подход, который вы описали, чтобы упаковать данные в текстуры и написать специальные шейдеры HLSL для вычисления силы пружины, а затем обновлять положения вершин.Этот подход полностью допустим, но может быть проблематичным, когда вы пытаетесь отладить проблемы, потому что вы используете пиксели текстуры нетрадиционным способом (вы можете нарисовать текстуру и, возможно, написать некоторый код для просмотра значений в данном пикселе).Вероятно, в конечном итоге будет проще использовать что-то вроде CUDA, DirectCompute или OpenCL.CUDA позволяет вам «привязать» вершинный буфер DirectX для доступа в CUDA.Затем в ядре CUDA вы можете использовать позиции для вычисления сил, а затем записывать новые позиции в буфер вершин (параллельно в графическом процессоре), прежде чем рендерить обновленные позиции.В DirectX 10/11 DirectX SDK есть демонстрационная версия с использованием DirectCompute.

...