繁体   English   中英

Direct3D 11 - HLSL - 获取顶点索引 ID

[英]Direct3D 11 - HLSL - Get vertex-index ID

在 Direct3D 11 中,我有一个用于多个三角形的顶点。 换句话说,同一个顶点被多个索引引用。 在我的 HLSL 顶点着色器中,我想知道正在处理哪个 INDEX。 有没有办法做到这一点? 类似于 HLSL 语义“SV_VertexID”或“SV_PrimitiveID”,但对于当前索引?

为了清楚起见,假设索引缓冲区为: Index[3]={10,11,12}; SV_VertexID(使用 ID3D11DeviceContext::DrawIndexed())将返回 10、11 和 12。但我想要 0、1、2。

顶点着色器内的计数器从 0 开始并在每次调用顶点着色器时增加,也会有所帮助。 每一帧,这个计数器都应该被重置为 0。这可能吗?

谢谢你。

我不认为那是可能的。 根据定义,顶点着色器按顶点运行,而不是按索引运行。 所以如果两个三角形共享一个顶点,顶点着色器很有可能只为它运行一次,而不是两次。 第二次索引获取此顶点时,顶点着色器的结果将从缓存(“后变换缓存”)中获取,而不是重新运行着色器。

但是,您可以做的是使所有顶点都是唯一的。 那么你就不需要索引缓冲区了,SV_VertexID 基本上就是索引 ID(虽然它需要更多的内存)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM