Androidの三角形は頂点シェーダで描画され、次のとおりです。
attribute vec4 vPosition;
void main() {
gl_Position = vPosition;
}
アプリケーションによって渡されたvPosition頂点、。
フラグメントシェーダコードは次のとおりです。
precision mediump float;
void main()
{
gl_FragColor = vec4(1,0,0,1);
}
プログラムを作成します。
private fun createProgram() {
var vertexCode =
AssetsUtils.readAssetsTxt(
context = context,
filePath = "glsl/triangle_vertex.glsl"
)
var fragmentCode =
AssetsUtils.readAssetsTxt(
context = context,
filePath = "glsl/triangle_fragment.glsl"
)
mProgramHandle = GLTools.createAndLinkProgram(vertexCode, fragmentCode)
}
triangle_vertex.glsl頂点シェーダとtriangle_vertex.glsl資産/ GLSLディレクトリに格納されたフラグメントシェーダとファイルを表し、readAssetsTxt資産のディレクトリ、ファイルを読み込むための一般的な方法。
ハンドルパラメータを取得します。
vPositionLoc = GLES20.glGetAttribLocation(mProgramHandle, "vPosition")
頂点データの初期化ラインコード次の通りであります:
var vertexBuffer = GLTools.array2Buffer(
floatArrayOf(
0.0f, 0.5f, 0.0f, // top
-0.5f, -0.5f, 0.0f, // bottom left
0.5f, -0.5f, 0.0f // bottom right
)
)
描画:
override fun onDrawFrame(p0: GL10?) {
GLES20.glUseProgram(mProgramHandle)
vertexBuffer.position(0)
GLES20.glEnableVertexAttribArray(vPositionLoc)
GLES20.glVertexAttribPointer(vPositionLoc, 3, GLES20.GL_FLOAT, false, 0, vertexBuffer)
GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, 3)
}
GL_TRIANGLESは表現三角形を描きます。
三角形を描画する3つの方法があります。
- GL_TRIANGLES:繰り返しても、三角形、三角形の頂点を描画する3つの頂点は、また、頂点配列内で宣言されなければなりません。6つの頂点がある場合、三角形は、三角形を形成する2,3、4,5,6から構成される。
- GL_TRIANGLE_STRIP 2つの三角形の前面頂点、さらに三角形の後続頂点6、頂点が存在する場合、組成物は、(、(2,3,4)、三角形(1,2,3)の頂点を有しています3,4,5)、(4,5,6)4つの三角形の合計なので、N個の頂点があり、三角形は番号N-2で描かれています。
- GL_TRIANGLE_FAN:中心点を最初の点、他の頂点ファンのエッジ点として6つの頂点は、組成物(2,3)を有する三角形の頂点、(1,3がある場合、隣接する三角形の組成を描画します、 4)、(1,4,5)、(1,5,6)4つの三角形の合計。