arrays - 将数组从 HLSL 顶点着色器传递到像素着色器

标签 arrays parameter-passing hlsl

我有一堆从顶点着色器输出的参数,我想将它们传递给像素着色器。

执行此操作的正常方法是声明输出结构

struct vOut
{
    float4 param0 : TEXCOORD0 ;
    float4 param1 : TEXCOORD1 ;
} ;

所以你必须编写一个单独的变量并将每个变量放入纹理坐标中。

有没有办法声明一个 16 * float4 的数组,并让它们占据 TEXCOORD0 -> TEXCOORD15 而不必写出这样的顶点声明?

最佳答案

只需这样声明即可:

struct VertexOutput_Test
{
  float4 hPosition    : POSITION;
  float4 vArr[5]     : TEXCOORD0;
};

并通常在顶点和像素着色器中解决它,例如这个虚拟代码:

VertexOutput_Test VS_Test(VertexInput_1UV IN) 
{
  VertexOutput_Test OUT = (VertexOutput_Test)0;
  float4 Po = float4(IN.position.xyz,1.0);
  float3 No = IN.normal.xyz;
  OUT.hPosition = mul(Po,worldViewProj);
  OUT.vArr[0] = float4(1,0,0,0);
  OUT.vArr[1] = float4(1,1,0,0);
  OUT.vArr[2] = float4(1,0,1,0);
  OUT.vArr[3] = float4(1,0,0,1);
  OUT.vArr[4] = float4(1,1,1,1);
  return OUT;
}

如果您查看 fxc 输出,您会发现它按顺序很好地排列了它们

关于arrays - 将数组从 HLSL 顶点着色器传递到像素着色器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11378097/

相关文章:

java - 在java中创建HashMap的二维数组

php - 支持 Unicode 的 PHP 中的自然排序算法?

c++ - 我如何创建 3d 边界框? (直接 3d 11,HLSL)

unity-game-engine - Unity 中的 ThreeJS 着色器

c++ - 使用Direct 3D时,代码中应该处理什么,HLSL中应该处理什么?

arrays - 如何在不同数据上使用 NSPredicate 和 NSPredicateEditor(多个谓词?)

variables - 如何在 Gradle 脚本中从 Bamboo 访问变量?

JavaScript - 在 onclick 函数中获取(this)参数的关联值

java - 请帮我提供 self 引用指针

JavaScript 索引 >= 0