마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

OPENGL ES 초짜가 쉐이더 질문 드립니다.

0 추천
GLSurfaceView에 카메라를 설치하고 이를 텍스쳐로 보여주는것 까지 진행했습니다. 쉐이더 코드는

 

private final String vss = "attribute vec2 vPosition;\n" + "attribute vec2 vTexCoord;\n"
   + "varying vec2 texCoord;\n" + "void main() {\n" + "  texCoord = vTexCoord;\n"
   + "  gl_Position = vec4 ( vPosition.x, vPosition.y, 0.0, 1.0 );\n" + "}";

 private final String fss = "#extension GL_OES_EGL_image_external : require\n" + "precision mediump float;\n"
   + "uniform samplerExternalOES sTexture;\n" + "varying vec2 texCoord;\n" + "void main() {\n"
   + "  gl_FragColor = texture2D(sTexture,texCoord);\n" + "}";

 

다음과같이 설정해두었구요.

 

네이티브에서 얼굴트래킹하는 코드를구현하여 자바로 x,y좌표로 1프레임에 100개씩 넘겨줍니다.

(x 100개  y 100개)

 

GL_POINTS를 for문으로 100개 돌려버리면 될것같은데, 쉐이더코드를 어찌 수정해야할지 잘 모르겠습니다.

 

버텍스쉐이더는 그대로 냅두고 POINT에 색을 입혀야하니까 프래그먼트 쉐이더는 수정해줘야할것같은데

 

지금 gl_FragColor부분은 texture2D의 값을 받는상황에서 색을입히는 vColor라던지 추가하면

 

원하는 색도 안나오고 카메라 텍스쳐도 안나옵니다.

 

onDrawFrame엔

GLES20.glActiveTexture(GLES20.GL_TEXTURE0);
  GLES20.glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, hTex[0]);
  GLES20.glUniform1i(th, 0);

  GLES20.glVertexAttribPointer(ph, 2, GLES20.GL_FLOAT, false, 4 * 2, pVertex);
  GLES20.glVertexAttribPointer(tch, 2, GLES20.GL_FLOAT, false, 4 * 2, pTexCoord);
  GLES20.glEnableVertexAttribArray(ph);
  GLES20.glEnableVertexAttribArray(tch);
  
 
  GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, 4);
  GLES20.glFlush();

과 같이 해줬는데 GLES20.GL_POINTS를 사용하기위해선 glFlush밑에

GLES20.glVertexAttribPointer(ph, 2, GLES20.GL_FLOAT, false, 2*2, point);
  GLES20.glEnableVertexAttribArray(ph);
  GLES20.glDrawArrays(GLES20.GL_POINTS, 0, 3);

 

이런식으로 구현해주는게 맞나요?
심슨사랑 (690 포인트) 님이 2015년 9월 7일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...