我发现了一些有趣的东西,我想理解它。

使用 GLSL #version 330gl_Position的类型是vec4
这些行编译良好:

gl_Position = vec4(0, 0, 0, 0);
gl_Position = vec4(vec3(0, 0, 0), 0);
gl_Position = vec4(vec2(0, 0), vec2(0, 0));
...

不知何故:
gl_Position = (vec2(0, 0), vec2(0, 0));

引发:
error C1035: assignment of incompatible types

编译器能够解析(vec2(0, 0), vec2(0, 0))而不会引发语法错误。我想知道此语句的含义,我相信它是正确的,并且类型不同于vec4

问题: (vec2(0, 0), vec2(0, 0)) GLSL 中是什么意思?

编辑:

编译:
 float x = (0.0, 1.0, 1.0, 2.0, 3.0, 5.0, 8.0);

语法错误:
 float x = 0.0, 1.0, 1.0, 2.0, 3.0, 5.0, 8.0;

最佳答案

您使用comma operator,先创建一个vec2,然后再创建另一个vec2,这是表达式结果的最后一个vec2

关于c++ - glsl中的显式或隐式vec4,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38789052/

10-11 18:27