C语言中的类GLSL向量访问
在GLSL中,您可以使用名称和索引访问向量的组件,例如,如果您有C语言中的类GLSL向量访问,c,vector,macros,unions,C,Vector,Macros,Unions,在GLSL中,您可以使用名称和索引访问向量的组件,例如,如果您有vec2 foo,则可以执行foo.x和foo[0]之类的操作 可以用C语言复制这个接口吗 我目前有以下情况: typedef union{ struct{ float x1, x2; }; struct{ float x, y; }; float d[2]; }vec2; 它允许我访问vec2 foo的组件,如foo.x和foo.d[0] 有没有可能摆脱那种讨厌的.d,到达foo[0]?(无论如何,也许使
vec2 foo
,则可以执行foo.x
和foo[0]
之类的操作
可以用C语言复制这个接口吗
我目前有以下情况:
typedef union{
struct{ float x1, x2; };
struct{ float x, y; };
float d[2];
}vec2;
它允许我访问vec2 foo
的组件,如foo.x
和foo.d[0]
有没有可能摆脱那种讨厌的
.d
,到达foo[0]
?(无论如何,也许使用一些(甚至更讨厌的)宏诡计?)可能不可能。在C++中,代码是可执行的<代码> ~ 224 kByth/Cuth>(),但是C缺少工具来做它(至少在我的知识范围内),并且宏本身不能允许所有的访问组合(或者至少我没有看到它)。您缺少了一些坐标,对于vec4
,有xyzw、rgba、stpq
,访问可以是任何类似yzx、xyw、wzy、xgq…
,构造函数也组合在一起,类似vec3(vec2,float)、vec3(float,float)、vec3(float,float)、vec4(vec3,float)、vec4(flaot,vec2,float)
…正如您所见,有许多组合可以正确支持所有的vec2/3/4
。但是我不在C中编码(我是C++的编码器)所以我可能会丢失一些东西…@ SpktReYes,C++中,它看起来是直观的,尤其是因为你可以超载<代码> []/Cord>运算符(我想我以前见过它)。也谢谢你的参考@étale上同调链接中的代码缺少最后一点:typedef\u vec2;类型def_vec3 vec3;typedef_vec4 vec4;类型def_vec2 dvec2;类型def_vec3 dvec3;类型def_vec4 dvec4;typedef_vec2 bvec2;typedef_vec3 bvec3;typedef_vec4 bvec4;类型定义2 ivec2;类型定义向量3 ivec3;类型定义4 ivec4;类型def_vec2 uvec2;类型def_vec3 uvec3;类型def_vec4 uvec4代码>如果没有模板,代码将延长5倍