【问题标题】:Is there an equivalent to OpenGL glVertexAttrib() in D3D11?D3D11 中是否有与 OpenGL glVertexAttrib() 等效的功能?
【发布时间】:2013-06-23 03:11:57
【问题描述】:

我希望能够为 D3D11 中的一个顶点属性设置一个常量值。

D3D11 中的以下代码相当于什么?

glVertexAttribPointer(pos, &pos[0], ...);
glEnableVertexAttribArray(pos);

glVertexAttribPointer(color, NULL, ...);
glDisableVertexAttribArray(color);

glVertexAttrib4fv(color, &defaultColor);

glDrawArrays(...);

【问题讨论】:

  • 为什么要为每个顶点提供一个不变的每个顶点属性?
  • 这样我就可以使用带有不完全满足着色器输入签名的数据集的着色器

标签: c++ opengl direct3d vertex-shader


【解决方案1】:

在为 Input Assembler 创建输入布局时,您可以指定是按顶点还是按实例提供属性:

typedef enum D3D11_INPUT_CLASSIFICATION { 
  D3D11_INPUT_PER_VERTEX_DATA    = 0,
  D3D11_INPUT_PER_INSTANCE_DATA  = 1
} D3D11_INPUT_CLASSIFICATION;

您可以在每个实例的基础上为所有顶点提供恒定的颜色。

【讨论】:

  • 这是一个好主意,想知道从多目标引擎的角度来看,它如何与 glVertexAttrib 兼容...
【解决方案2】:

将 glVertexAttrib4fv 与 glDrawArrays 一起使用意味着该常量对于绘图中的所有顶点都相同。

directx sdk (June 2010) 中的教程 7“​​纹理映射和常量缓冲区”描述了将常量传递给着色器的一般方法。

【讨论】:

    猜你喜欢
    • 2011-03-31
    • 1970-01-01
    • 1970-01-01
    • 2014-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多