2010-09-04 41 views
0

如果...问题有关变量的构造函数:

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 = 

谢谢。

回答

1

如果temp确实是一个vec3为你定义,无论是构造函数myVec4是非法的,既包含前两个参数足够分量来初始化整个vec4

+0

谢谢你的这个Pivot。 – user225626 2010-09-07 05:11:29

1

我想这样的东西的方式,假设它编译和运行,它使用调试器或printf来看看你得到什么。

在我的xode 3.2.x上 - 它不能编译。其实vec2 myVec2 = vec2(myVec3);也不能编译。

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

code.mm:73:0 code.mm:73: error: no matching function for call to ' Vector4<float>::Vector4(vec3&, vec2&, double) '

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

+0

谢谢你这个汤姆。我还想知道,现在你提到这些规则是否是更多的OpenGL ES 2.0特定的“构造函数”规则。 (我认为金书的第80页不会接近足以满足参数的速记规则的地方)。 – user225626 2010-09-07 05:18:55

+0

看起来你应该直接看到源代码 - GLSL ES规范(http:///www.khronos.org/registry/gles/specs/2.0/GLSL_ES_Specification_1.0.17.pdf)。向量和矩阵构造函数在第5.4.2节中介绍,这是我链接到的spec版本中的第48页。 – Pivot 2010-09-07 07:25:08

+0

谢谢Pivot,我会看看那个。 – user225626 2010-09-07 12:13:50