2012-09-03 204 views
2

繪製具有特定紋理的線條的最佳方法是什麼?OpenGL ES 2.0 - 畫紋理?

現在我試圖通過簡單的繪製線條而不是另一個原始線條來繪製線條。

setupMandatoryHandlers(shader); 

    GLES20.glEnableVertexAttribArray(positionHandler); 
    GLES20.glVertexAttribPointer(positionHandler, COORDS, GLES20.GL_FLOAT, false, STRIDE, vertexBuffer); 

    if (texture != null) 
     setupTextureData();  

    GLES20.glUniform4fv(colorHandler, 1, color, 0); 

    GLES20.glUniformMatrix4fv(MVPMatrixHandle, 1, false, orthoMatrix, 0);  
    GLES20.glDrawElements(drawType, indices.length, GLES20.GL_UNSIGNED_SHORT, indexBuffer); 

    GLRenderer.CheckGLError("Draw Elements");  

    GLES20.glDisableVertexAttribArray(positionHandler); 

    if (texture != null) 
     GLES20.glDisableVertexAttribArray(texCoordHandler); 

這是用紋理繪製線條的最有效方式,還是我應該在其他地方看?我應該使用glDrawArrays而不是glDrawElements作爲線路嗎?

+0

沒有讀過這個問題,因爲我對OpenGL一無所知,但是......在OpenGL中不是二維的行,即沒有紋理? – Alex

+0

2維基元可以有紋理?這就是你將如何繪製一個四分之一 –

+0

對不起,我的意思是一維(只有長度) – Alex

回答

0

要在一條線上繪製紋理,您必須使用PointSprites或繪製小紋理四邊形。在我的情況下,我使用Triangle_Strips和紋理,因爲在我的情況下線可能很小,仍然看起來完全像一條線。

如果有人有更好的解決方案或已經實現了上述隨意發佈答案!

0

您不能用簡單的紋理紋理一維線條,因爲據我所知,無法獲取當前正在繪製的片段着色器的當前像素位置。

+1

實際上是這樣。如果您不假設多重採樣,那麼gl_FragCoord.xy將給出0..1座標中的像素位置 - 將它乘以視口(寬度,高度),您將獲得像素位置。 –

+0

那麼有什麼選擇? –

+0

您可以嘗試使用'gl_FragCoord.xy',然後使用這些座標從'sampler2D'獲取紋理顏色。 – dragostis