Direct3d и hlsl вершины разного размера и многомерные геометрические объекты?

Я новичок в direct3d, графике, HLSL, c ++, и я пытаюсь написать программу для визуализации различных геометрических многомерных форм (например, гиперкуба), программа должна получать вершины от пользователя после того, как пользователь определил количество размеров, нарисуйте, поверните и переместите форму.

  • Первая проблема - как определить динамическую структуру вершин (можно ли использовать указатели).

  • Во-вторых: где проецировать форму из x-мерного в 3-мерное пространство, должен ли я делать это в коде (CPU), или можно ли передать вершины объекта и матрицы проекции в шейдер (HLSL), и если да, то как (особенно, если матрицы имеют разный размер, определенный во время выполнения).

  • Та же проблема, что и для матрицы вида выше (допустим, объект 4-мерный. Я хочу, чтобы программа увеличивала / отдаляла-> подход или двигалась в направлении оси x в 4-мерном пространстве. "Я хочу иметь дело с пространство объекта, а не пространство его проекции ")

  • В-третьих: если все вышеперечисленное было невозможно в шейдере, могу ли я использовать c ++ amp (или его альтернативы) для ускорения выполнения таких операций в основной программе, или это вызовет снижение производительности для «Draw ()» функция.

Я искал в Интернете и "Stackoverflow", но не нашел ничего полезного.


person Oz Le    schedule 02.05.2013    source источник
comment
Вы, вероятно, получите лучшие ответы, если разделите свой вопрос на отдельные вопросы. Но, FWIW, я почти уверен, что вы не можете использовать указатели в шейдере.   -  person LarsH    schedule 03.05.2013
comment
@LarsH спасибо за ваш комментарий, я не могу разбить его на отдельные вопросы, так как все они связаны, все вышеперечисленные проблемы происходят из одного и того же источника, в котором можно умело преобразовывать гиперпространственные объекты, и еще кое-что. членов переполнения стека склонны отклонять практические вопросы как неконструктивные или что-то еще, разбив вышеупомянутые проблемы на две, одна касающаяся вершин, а другая касающаяся шейдеров, скорее всего, приведет к тому, что вопросы будут закрыты.   -  person Oz Le    schedule 03.05.2013
comment
еще кое-что: если я не могу передать шейдеру вершины различной длины и хочу повернуть гиперкуб, нужно ли мне повернуть его 4-мерные вершины, спроецировать результат в 3-мерное пространство и перерегистрировать вершины в каждом кадре? не приведет ли это к огромной деградации производительности?   -  person Oz Le    schedule 03.05.2013


Ответы (1)


Отказ от ответственности: я не эксперт в графических процессорах и шейдерах; и я использовал OpenGL / WebGL / GLSL, а не Direct3D / HLSL. Так что я отвечаю на этот вопрос только потому, что никто другой не ответил. :-)

Что касается указателей: я почти уверен, что вы не можете использовать указатели в графическом процессоре, поскольку данные, которые вы отправляете на графический процессор, будут иметь непредсказуемые адреса (местоположения) в памяти графического процессора.

Но что касается динамических структур данных (переменное количество измерений), похоже, вы могли бы сделать это, просто изменив параметр размера, переданный в _ 1_ или аналогичный. Вы передаете плоский массив, содержащий все ваши координаты вершин, с n координатами на вершину; и используйте параметр размера, чтобы сообщить шейдеру, что такое n.

Затем в вершинном шейдере вы можете проецировать данные из n измерений в 3, используя матрицу проекции, которую вы строите в шейдере из переданных параметров.

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

Надеюсь, с этого вы начнете и сможете задавать более конкретные вопросы. Честно говоря, я не считаю SO таким продуктивным местом для получения ответов на вопросы о графике, как для некоторых других тем, таких как Python. Возможно, вам повезет, если вы спросите на веб-сайте, посвященном Direct3D.

person LarsH    schedule 03.05.2013
comment
Спасибо, это точно мне очень помогло. - person Oz Le; 04.05.2013