c++ - Direct3d 和 glsl 不同大小的顶点和多维几何对象?

标签 c++ graphics hlsl direct3d11

我是 direct3d、图形、HLSL、c++ 的新手,我正在尝试编写一个程序来渲染不同的几何多维形状(例如超立方体),该程序应该在用户已经定义了维数、绘制、旋转和平移形状。

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

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

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

  • 第三:如果在着色器中无法实现上述所有操作,我可以使用 c++amp(或其替代品)来加速主程序中此类操作的执行吗,或者这是否会导致性能下降“Draw()”函数。

我搜索了网络和“Stackoverflow”,但找不到任何有用的东西。

最佳答案

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

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

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

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

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

希望这能让您入门,这样您就可以提出更具体的问题。老实说,我发现 SO 不是一个像 Python 等其他主题一样高效的地方来回答有关图形的问题。在特定于 Direct3D 的网站上提问可能会更幸运。

关于c++ - Direct3d 和 glsl 不同大小的顶点和多维几何对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16349308/

相关文章:

c++ - 有没有办法有条件地为模板化类或结构中的成员变量添加别名

opengl - Shader - 简单的 SSS 光照问题

java - OpenGL:无论相机方向如何,如何使文本以相同像素显示?

c++ - HLSL 着色器显示有线颜色

c# - XNA 4.0 中 2d 光照着色器中的 alpha 问题

c++ - 使用 op[] 修改 std::string 超出其大小的影响?

c++ - 矩阵赋值导致崩溃

c++ - 如何检查对于 int 类型的变量,cin 不接受数字和字符

math - 在旋转过程中放大图像以看不到边缘的量的公式是什么

graphics - "renderInContext:"和 CATransform3D