关于变量构造函数的问题:

时间:2010-09-04 15:14:34

标签: opengl-es glsl

如果...

vec3 myVec3 = vec3(1.0, 0.0, 0.5); // myVec3 = {1.0, 0.0, 0.5}
vec3 temp = vec3(myVec3); // temp = myVec3
vec2 myVec2 = vec2(myVec3); // myVec2 = {myVec3.x, myVec3.y}

myVec4 = vec4(myVec2, temp, 0.0); // myVec4 = {myVec2.x, myVec2.y, temp.x, 0.0}

然后以下代表什么?

myVec4 = vec4(temp, myVec2, 0.0); // myVec4 =

谢谢。

2 个答案:

答案 0 :(得分:1)

如果temp确实是您定义的vec3,则myVec4的两个构造函数都是非法的,因为它们在前两个参数中包含足够的组件来初始化整个vec4

答案 1 :(得分:1)

我会想出这样的东西,假设它编译并运行,它使用调试器或printf来查看你得到的东西。

在我的xode 3.2.x上 - 它没有编译。实际上vec2 myVec2 = vec2(myVec3);也没有编译。

另外:最后一行有一个错误,当你阅读它时有意义。

  

code.mm:73:0 code.mm:73:错误:没有匹配的函数来调用   'Vector4<float>::Vector4(vec3&, vec2&, double)'

我总是发现C ++的构造函数规则非常复杂。让编译器像它一样告诉它。