안드로이드는 OpenGL ES는 점을 그립니다

 

 

는 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은 플롯 포인트를 나타냅니다.

자세히보기 :

게시 된 123 개 원래 기사 · 원 찬양 68 ·은 30 만 + 조회수

추천

출처blog.csdn.net/mengks1987/article/details/104090560