OpenGLES 與 WebGL 中頂點屬性的組織格式的誤解 - 一個不好笑的笑話
OpenGLES 與 WebGL 中頂點屬性的組織格式的誤解 - 一個不好笑的笑話
太陽火神的漂亮人生 (http://blog.csdn.net/opengl_es)
本文遵循“署名-非商業用途-保持一致”創作公用協議
WebGL 中立方體頂點座標陣列:
vertices = [ // Front face -3.0, -3.0, 3.0, 3.0, -3.0, 3.0, 3.0, 3.0, 3.0, -3.0, 3.0, 3.0, // Back face -3.0, -3.0, -3.0, -3.0, 3.0, -3.0, 3.0, 3.0, -3.0, 3.0, -3.0, -3.0, // Top face -3.0, 3.0, -3.0, -3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, -3.0, // Bottom face -3.0, -3.0, -3.0, 3.0, -3.0, -3.0, 3.0, -3.0, 3.0, -3.0, -3.0, 3.0, // Right face 3.0, -3.0, -3.0, 3.0, 3.0, -3.0, 3.0, 3.0, 3.0, 3.0, -3.0, 3.0, // Left face -3.0, -3.0, -3.0, -3.0, -3.0, 3.0, -3.0, 3.0, 3.0, -3.0, 3.0, -3.0, ];
WebGL 中立方體面頂點座標索引陣列:
var cubeVertexIndices = [ 0, 1, 2, 0, 2, 3, // Front face 4, 5, 6, 4, 6, 7, // Back face 8, 9, 10, 8, 10, 11, // Top face 12, 13, 14, 12, 14, 15, // Bottom face 16, 17, 18, 16, 18, 19, // Right face 20, 21, 22, 20, 22, 23 // Left face ];
iOS 中與上面的區別:
一是頂點座標陣列中有反覆的三角形頂點組合;
二是面頂點座標陣列中僅是頂點座標,未提供該點取紋理畫素的座標,也未提供燈光照耀到該到上時光線反射計算的法線座標;只是。WebGL 中分別提供了兩個與頂點座標陣列相應的陣列,分別相應頂點座標陣列中每一個頂點座標配對的紋理座標和法線座標;
茫然一陣後。放下,再撿起來,從稍外一層來看這個問題。
首先,對於使用頂點索引式繪製時,實際繪製是從面頂點索引快取中來找繪製順序。而頂點座標快取僅僅是一個容器,並不決定順序;
其次。使用頂點索引快取的目的。就是避勉反覆的頂點座標存於快取中,而代以座標的索引的反覆,大幅度減少了對 GPU 記憶體的佔用;
最後,事實上這是一個別人的測試程式碼,頂點座標陣列之所以那樣儲存,一是針對不使用索引方式繪製時使用,這叫做複用嗎?哈哈,看您怎麼理解了,方便唄,至少原作者很的清楚當中的執行機理,所以敢於這樣來寫,以簡化其測試的目的,這也給俺設了個難題。也正由於這個難題。讓我深入理解了一些東西。
二是,我好像看到它是用的四個點來表示一個未使用索引方式繪製的面?有木有?俺未做過 OpenGL 的四邊形的東東。不太好說。行家們可能看得出來吧。至少不是 OpenGLES 的。這個在我瞭解的範圍人,俺敢肯定!
但,您別忘了。俺瞭解的範圍。俺都不知道多還是少,所以您就別肯定了。還是再諮詢下室外高人吧。
笑話講完了,事實上真的不好笑,只是俺剛明確的時侯。確實大氣不出,小氣不斷地哼了幾聲,出人意料到是。元芳,你怎麼看?有木有!