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

Android openGL ES Push, Pop 매트릭스 관련 질문입니다~

0 추천
2D좌표로 Z로 위상관계만 설정해주면서 사용하고 있습니다.

 

문제는 제가 하나의 그림을 그리는 클래스를 가지고 이 안에 3~4개정도의 선들이나 면이 이어져 하나의 그림을 그려지게 됩니다. 이러다 보니 안에있는 바깥원이나 안쪽원은 Z값을 다르게 주어서 높낮이를 표시하려고 했는데 어떻게 할지 검색하다 보니 pushMatrix 라는게 있더군요. 근데 제가 매우 미숙해서 이걸 아무리 사용해도 값이 바뀔생각을 안합니다.

 

소스는 아래와 같습니다.

 

     gl.glPushMatrix();
     gl.glLineWidth(2);
     gl.glColor4f(1.0f, 0.078431f, 0.576471f, 0f);
     gl.glTranslatef(x, y, z);
     gl.glScalef(0.18f, 0.18f, 0);
         

    gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
    gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);
    gl.glDrawElements(GL10.GL_TRIANGLES, indices.length,
    GL10.GL_UNSIGNED_SHORT, indexBuffer);
      
    gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer2);
    gl.glColor4f(1.0f, 1.0f, 1.0f, 0.0f);
    gl.glTranslatef(x, y, z+0.0001f);
    gl.glDrawElements(GL10.GL_TRIANGLES, indices2.length,
    GL10.GL_UNSIGNED_SHORT, indexBuffer2);
   
    gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer3);
    gl.glDrawElements(GL10.GL_LINE_STRIP, indices3.length,
    GL10.GL_UNSIGNED_SHORT, indexBuffer3);
         
   gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer4);
   gl.glDrawElements(GL10.GL_LINE_STRIP, indices4.length,
   GL10.GL_UNSIGNED_SHORT, indexBuffer4);
   gl.glPopMatrix();
      
   gl.glPushMatrix();
   gl.glVertexPointer(3, GL10.GL_FLOAT, 0, mVertexBuffer);
   gl.glTranslatef(x + 0.35f * 0.175f, y + 0.35f * 0.175f, z + 0.0002f);
   gl.glScalef(0.01f, 0.01f, 0);
   gl.glColor4f(0.0f, 0.0f, 0.0f, 0.0f);
   gl.glDrawArrays(GL10.GL_LINE_LOOP, 0, mVertex.length / 3);
   gl.glPopMatrix();

 

PushMatrix가 행렬값을 저장하고 PopMatrix가 저장된 행렬을 불러오는데 이 과정이 스택으로 처리된다고 들었습니다. 그렇다면 단순히 Push안에 변경할(회전, 색깔, 사이즈등)을 설정하고 Pop으로 닫아주면 그 안에 있는 그리는 것은 선언해 놓은 매트릭스 그림 변환 과정으로 바뀐다고 단순히 이해했는데 제가 이해를 잘못했는지 아무리해도 변함이 없네요.

 

고수님들의 조언을 부탁드립니다.
익명사용자 님이 2013년 10월 11일 질문

답변 달기

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