는 OpenGL ES 응용 프로그램의 안드로이드 개발에 지점이 종종 얼굴 인식 핵심 프로젝트로 화면에 출력을 발생합니다 문제의 번호를 찾기 위해, 방법을 디버깅 좋은 그릴 그래서, 우리가 원하는, 쉐이더 코드를 디버깅되지 않습니다 키 포인트를 결정하는 얼굴이 핵심이 핵심이 올바른지 아닌지 좋은 표시면이 될 수 얼굴에 대응하는 위치에 플롯 정확하다.
드로잉 포인트를 완료합니다 다음은 컬러 포인트는, 정점 셰이더 코드는 다음과하는 응용 프로그램에 의해 결정된다 :
attribute vec4 vPosition;
void main() {
gl_Position = vPosition;
gl_PointSize = 5.0;
}
받은 vPosi ti on을 절단 위치는 점을 플롯 애플리케이션에 의해 전달된다 gl_PointSize이 내장 된 가변 크기의 대표 점 (픽셀), 화소, 픽셀, 중요한 것은 세 번 말이고, 다른 점은 사각형의 형상은, 정사각형, 직사각형하지 원형, 사각형 화소가되기 때문에.
어떤 사람들은 저해상도 장치에서보다 큰 고해상도 디스플레이에 적용 할 수는 픽셀에없는 요청할 수 있습니다 어떻게 아 플롯 포인트의 1 100 크기를 그리려면? 그릴하려는 경우 하나 개의 점 크기 (100)가 그려 정사각형의 형태로 그릴 수 있습니다.
로 다음과 쉐이더 코드는 점 조각을 그립니다
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/point_vs.glsl"
)
var fragmentCode =
AssetsUtils.readAssetsTxt(
context = context,
filePath = "glsl/point_fs.glsl"
)
mProgramHandle = GLTools.createAndLinkProgram(vertexCode, fragmentCode)
}
point_vs.glsl 버텍스 쉐이더와 point_fs.glsl 자산 / GLSL 디렉토리, 파일을 읽을 수 readAssetsTxt 자산 디렉토리 일반적인 방법에 저장된 조각 쉐이더와 파일을 나타냅니다.
핸들 매개 변수를 가져 오기 :
vPositionLoc = GLES20.glGetAttribLocation(mProgramHandle, "vPosition")
uColorLoc = GLES20.glGetUniformLocation(mProgramHandle, "u_color")
다음과 같이 정점 데이터 초기화 코드는 다음과 같습니다
val vertexBuffer = GLTools.array2Buffer(
floatArrayOf(
0F, 0F, 0F
)
)
초기화 데이터 컬러, 같은 다음과 같습니다 :
val colorBuffer = GLTools.array2Buffer(
floatArrayOf(
//r,g,b,a
0F, 1F, 0F, 1F
)
)
그리기 :
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_POINTS, 0, 1)
컬러 데이터 및 정점 데이터를 설정 GLES20.GL_POINTS은 플롯 포인트를 나타냅니다.
자세히보기 :