c++ - DirectX 11 每面数据

标签 c++ directx hlsl texturing

我的问题在理论上很简单 - 将每个面数据输入到像素着色器的最佳方式是什么?如果它是通过一个简单的 cbuffer 数组注入(inject)的,我可以使用 SV_PrimitiveID 值访问数据。然而,每个 cbuffer 8096 个 float 的限制对于任何中等详细的模型来说显然是一个问题。

是否有替代方法?可能使用单独的顶点流?

理想情况下,我会以每个顶点为基础输入数据,但数据是按面输入的,以保存要在纹理数组中查找的每个面所使用的纹理索引。如果按顶点使用,跨顶点的 texcoord 数据插值肯定会弄乱该索引?但是,如果无论如何都可以针对每个顶点执行此操作,我会洗耳恭听!

非常感谢您提供的任何帮助。

最佳答案

几何着色器按面运行,可用于将每个多边形的数据传递给像素着色器。

当用于三角形时,它们将 3 个顶点作为输入并输出 3 个顶点,但此时它们基本上是去重的,因此一个顶点在多个三角形之间共享这一事实与几何着色器无关向前。由于单位不是插值的,因此您在这方面没有问题,索引取自三角形中的“前导”顶点。

Geometry Shaders on MSDN

关于c++ - DirectX 11 每面数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21832527/

相关文章:

c++ - 错误 : **** has not been declared

windows - 如何在 Windows 游戏上叠加图形?

regex - Vim 正则表达式在行首匹配方括号失败

c++ - Linux下boost::interprocess::create_or_open_file更改文件类型

c++ - 使用同名的类和枚举?

C++11 通过推导类型参数传递成员函数调用?

python - 如何从 Python 访问 DirectSound 设备信息?

opengl - 如何从滚动,俯仰和偏航中获取摄像机的矢量?

directx - 编译的directx9着色器文件的格式?

directx - DirectX 中的 Texture3D 数组?