Direct3d和hlsl不同大小的顶点和多维几何对象

Direct3d and hlsl varying size vertices and multiddimensional geometric objects?

本文关键字:何对象 对象 顶点 hlsl Direct3d      更新时间:2023-10-16

我是direct3d, graphics, HLSL, c++的新手,我正在尝试编写一个程序来呈现不同的几何多维形状(例如超立方体),该程序应该在用户定义维度数,绘制,旋转和转换形状后从用户接收顶点。

  • 第一个问题是如何定义一个动态顶点结构(是否可以使用指针)

  • 第二:从x维到3维空间的形状投影在哪里,我应该在代码(CPU)中这样做,还是有可能将对象顶点和投影矩阵传递给着色器(HLSL),如果是这样,如何(特别是矩阵在运行时定义的大小不同)。

  • 与上述视图矩阵相同的问题(假设对象是4-d,我希望程序放大/缩小->方法,或者在4-d空间中向x方向移动"我想处理对象的空间而不是它的投影空间")

  • 第三:如果以上所有在着色器中都不可能,我可以使用c++amp(或它的替代品)来加速主程序中这些操作的执行,或者这会导致"Draw()"函数的性能下降。

我已经搜索了网页和"Stackoverflow",但我找不到任何有用的

声明:我不是gpu和着色器方面的专家;我使用的是OpenGL/WebGL/GLSL,而不是Direct3D/HLSL。所以我只回答这个问题,因为没人问过。: -)

关于指针:我很确定你不能在GPU内使用指针,因为你发送给GPU的数据在GPU内存中会有不可预测的地址(位置)。

但是对于动态数据结构(可变维数),似乎你可以通过改变"大小"来做到这一点。参数传递给vertexAttribPointer()或等效的。传入一个包含所有顶点坐标的平面数组,每个顶点有n个坐标;并使用size参数告诉着色器n是多少。

然后在顶点着色器中,你可以使用在着色器中根据传入的参数构造的投影矩阵将数据从n维投影到3维。

我认为类似地,在片段(像素)着色器中,您可以使用您在着色器中根据传入的参数构建的视图矩阵,将数据从3维投影到2维。

希望这能让你开始,这样你就可以问更具体的问题。老实说,我还没有发现SO是一个高效的地方来回答关于图形的问题,因为它是其他一些主题,如Python。