2013-05-27 28 views
0

我有什麼:,吸引了我的多維數據集對象(旋轉,如果我想:)預期的位置,規模,顏色等。GLKViewController及其相關視圖如何使用GLKit繪製線條(線框)?

* 我想要什麼:相反比立方體,我想指定一個對象的幾何體是頂點對的數組,並說服GLKit(暗示:OpenGL-ES-2)在我的視圖空間中繪製每對頂點作爲一個線段。

注:我的線段做不是形成一個線條,所以沒有線條。我的線段不是將三角形作爲網格(或任何其他幾何圖形)的一部分。它們只是空間中的單個線段,彼此之間沒有任何關係。想想「拿起棍子」或類似的東西。

我試了一下:我創建頂點對(GLKVector3)和頂點顏色的像這樣的數組(GLKVector4):

lineVertices = calloc (verts, sizeof(GLKVector3)); 
colorVertices = calloc (verts, sizeof(GLKVector4)); 

lineVertices[index++] = GLKVector3Make(x, 0, z); 
lineVertices[index++] = GLKVector3Make(x2, 0, z2); 
// etc., snip 
colorVertices[cIndex++] = GLKVector4Make(1, 0.0, 1, 1); 
// etc., snip 

...,並試圖拉攏他們是這樣的:

glEnable(GL_DEPTH_TEST); 

glEnableVertexAttribArray(GLKVertexAttribPosition); 
glVertexAttribPointer(GLKVertexAttribPosition, 2, // ** WRONG ** "2" should be "3" 
          GL_FLOAT, GL_FALSE, 0, lineVertices); 

glEnableVertexAttribArray(GLKVertexAttribColor); 
glVertexAttribPointer(GLKVertexAttribColor, 4, 
           GL_FLOAT, GL_FALSE, 0, colorVertices); 

glDrawArrays(GL_LINES, 0, lineVertCount); 

glDisableVertexAttribArray(GLKVertexAttribPosition); 
glDisableVertexAttribArray(GLKVertexAttribColor); 

(所有這些代碼是在正確的地方,用事實證明我的立方體對象,使用相同的基礎設施建設,正確繪製作爲證明。)

當我嘗試時,我得到了:只有一些線段畫出來,它們似乎指向每一個方向,而不是我想要看到的可愛圖案。我似乎無法辨別他繪製的線段的模式。這是因爲如果我得到隨機內存,但我lineVertices陣列是正確的

作業完成(選中):我看到很多是接近的,但做題最移交給線條或三角網格或其他方式不完全適用。有些是與設置有關的問題(已經消除,因爲我的立方體繪製得很好)。對於其他非SO解答,教程等類似的不太正確。

注意:我依靠內置着色器(也就是說,我沒有任何創建着色器代碼在我的應用程序。)

雖然我的歸宿幾何不是一個立方體,我會沒事用繪製基本線框立方體作爲證據概念,在這裏。同樣,不使用三角形或線條,因爲我的最終結果不適合這些。

任何人都可以給我指向示例代碼的任何指針,它可以做我正在尋找的那種裸線段繪圖嗎?

謝謝!

回答

1

糟糕! (我討厭當發生這種情況!)

雖然繼續嘗試跟蹤這一點,我跑過this related SO question他們說,他們說他們成功畫線。將該代碼與我的代碼進行比較,我發現我錯誤地將「每個頂點的座標數」從3(正確值)改爲2.似乎我滑倒了一個大腦齒輪,並將該值誤認爲「每個座標的座標數幾何形狀「(3個用於三角形,2個用於線條。)

一旦我解決了這個問題,我的線條的「隨機性」就變得清晰了,現在一切正常。

我打算撤回/刪除這個問題,但決定放棄它,希望我的錯誤(和解決方案)能夠用來教別人。我上面的不正確的代碼被修正後評論。

順便說一句,我注意到在另一篇文章中,「步幅」值被錯誤地設置爲3(應該是0.)我評論說,希望他們會更新代碼。