我的问题在理论上很简单 - 将每个面数据输入到像素着色器的最佳方式是什么?如果它是通过一个简单的 cbuffer 数组注入(inject)的,我可以使用 SV_PrimitiveID 值访问数据。然而,每个 cbuffer 8096 个 float 的限制对于任何中等详细的模型来说显然是一个问题。
是否有替代方法?可能使用单独的顶点流?
理想情况下,我会以每个顶点为基础输入数据,但数据是按面输入的,以保存要在纹理数组中查找的每个面所使用的纹理索引。如果按顶点使用,跨顶点的 texcoord 数据插值肯定会弄乱该索引?但是,如果无论如何都可以针对每个顶点执行此操作,我会洗耳恭听!
非常感谢您提供的任何帮助。
最佳答案
几何着色器按面运行,可用于将每个多边形的数据传递给像素着色器。
当用于三角形时,它们将 3 个顶点作为输入并输出 3 个顶点,但此时它们基本上是去重的,因此一个顶点在多个三角形之间共享这一事实与几何着色器无关向前。由于单位不是插值的,因此您在这方面没有问题,索引取自三角形中的“前导”顶点。
关于c++ - DirectX 11 每面数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21832527/