AndroidのプロットラインのためのOpenGL ES

ここに画像を挿入説明
Androidの頂点シェーダに線を引き、次のとおりです。

attribute vec4 vPosition;

void main() {
    gl_Position = vPosition;
}

アプリケーションによって渡されたvPosition頂点、。

フラグメントシェーダコードは次のとおりです。

precision mediump float;
uniform vec4 u_color;
void main()
{
    gl_FragColor = u_color;
}

アプリケーションによって渡されるu_colorカラーライン、。

プログラムを作成します。

fun createProgram() {
            var vertexCode =
                AssetsUtils.readAssetsTxt(
                    context = context,
                    filePath = "glsl/line_vs.glsl"
                )
            var fragmentCode =
                AssetsUtils.readAssetsTxt(
                    context = context,
                    filePath = "glsl/line_fs.glsl"
                )
            mProgramHandle = GLTools.createAndLinkProgram(vertexCode, fragmentCode)
        }

line_vs.glsl頂点シェーダとline_fs.glsl資産/ GLSLディレクトリ、ファイルを読むためにreadAssetsTxt資産ディレクトリの一般的な方法で保存されたフラグメントシェーダとファイルを表します。

ハンドルパラメータを取得します。

vPositionLoc = GLES20.glGetAttribLocation(mProgramHandle, "vPosition")
uColorLoc = GLES20.glGetUniformLocation(mProgramHandle, "u_color")

頂点データの初期化ラインコード次の通りであります:

val vertexBuffer = GLTools.array2Buffer(
            floatArrayOf(
                -0.5F, 0.5F, 0F,
                0.5F, 0.5F, 0F,
                0.5F, -0.5F, 0F,
                -0.5F, -0.5F, 0F
            )
        )

色データの初期化ラインコード次の通りであります:

val colorBuffer = GLTools.array2Buffer(
            floatArrayOf(
                //r,g,b,a
                1F, 0F, 0F, 1F
            )
        )

描画:

override fun onDrawFrame(gl: GL10?) {
            GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT)
            GLES20.glUseProgram(mProgramHandle)

            vertexBuffer.position(0)
            GLES20.glEnableVertexAttribArray(vPositionLoc)
            GLES20.glVertexAttribPointer(vPositionLoc, 3, GLES20.GL_FLOAT, false, 0, vertexBuffer)

            GLES20.glUniform4fv(uColorLoc, 1, colorBuffer)

            GLES20.glDrawArrays(GLES20.GL_LINES, 0, 4)
        }

色データと頂点データ、線を描画GLES20.GL_LINES表現を設定します。

3通りの方法で描かれた行があります。

  • GL_LINES:線は、4点以上の、例えば、2つの2からなるビット数が奇数である場合に1と2は、直線からなる直線、3及び4から成る、4番号付けされ、最後の点それは放棄されます。
  • GL_LINE_STRIP:4点以上、1と2,2と3,3と4は、それぞれ直線で構成されています。
  • GL_LINE_LOOP:とGL_LINE_STRIP接続点と最初の点よりも長持ちするように比べ。
    次のような効果があります
    ここに画像を挿入説明

推奨される過去

公開された123元の記事 ウォン称賛68 ビュー30万+

おすすめ

転載: blog.csdn.net/mengks1987/article/details/104092642