金属着色语言 - 结构不提供下标运算符

Metal Shading Language - struct does not provide a subscript operator

我的 metal 文件中有一个 struct

struct Vects
{
    float3 position[100];
};

将用于保存缓冲区数据:

kernel void compute(texture2d<float, access::write> output [[texture(0)]],
                    constant float &time [[buffer(0)]],
                    constant mouseInput &mouse [[buffer(1)]],
                    constant Vects &vects [[buffer(2)]],//<--- Vects
                    uint2 gid [[thread_position_in_grid]]) {
...
sceneSDF(origin, vects);
...
}

哪个

float sceneSDF(float3 cotu,Vects vects) {

    float a;

    for(int i = 1; i < 3 ; i++){

        float3 u = vects[i-1].position;//<-- error!
        float3 v = vects[i].position;//<-- error!
        a = min(fSphere(cotu + u,0.7),fSphere(cotu + v,0.7));

    }
    return a;
}

我在 float3 ufloat3 v 处遇到错误

Type 'Vects' does not provide a subscript operator

我该如何解决?

我认为您在您的案例中混淆了点符号和数组下标的顺序。这些行:

float3 u = vects[i-1].position;
float3 v = vects[i].position;

应该是:

float3 u = vects.position[i-1];
float3 v = vects.position[i];

你需要这样写:

 float3 u = vects[i-1].position[i-1];//<-- error!
 float3 v = vects[i].position;//<-- error!

因为vects不是数组,所以不能用way.The类型的u,v是float3,和vects.position[i]

一样