Direct3d和hlsl不同大小的顶点和多维几何对象
Direct3d and hlsl varying size vertices and multiddimensional geometric objects?
我是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。
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- CMake-按正确顺序将项目与C运行时对象文件链接
- 空基优化子对象的地址
- 将对象数组的引用传递给函数
- 你能重载对象变量名本身返回的内容吗
- C++使用整数的压缩数组初始化对象
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 将对象移动到std::shared_ptr
- 代理对象的常量正确性
- 提升 ASIO 无法识别计时器对象
- 将Ref对象作为类成员
- 将包含C样式数组的对象初始化为成员变量(C++)
- 如何返回一个类的两个对象相加的结果
- 为指向C++中的对象/对象的指针分配堆内存
- thread_local 和 std::future 对象 - 对象的生存期是多少
- 对象文件"Version References"从何而来?
- 动态对象数组在C++和Java中有何不同?
- 在没有 new 关键字的情况下初始化C++对象的内存从何而来
- 缺少复制构造函数与对象切片有何关系