2012-09-03 202 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