2010-09-04 15 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