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

OPENGL ES에 대한 여러 궁금증이 있습니다.(직교투영 외)

0 추천

안녕하십니까, 항상 좋은 답변 얻어갑니다.

 

OPENGL ES라곤 1.0대밖에 접해보지않아 2.0이후에 사용하는 쉐이더부터 여러 난관이있습니다.

 

그중 두가지정도가 의문사항인데 차례대로 나열해 보겠습니다.

 

1. Opengl ES 2.0이후부터의 직교투영

직교투영(orthogonal Projection)은 2.0들어와서부터 쉐이더쪽을 건드리고 매트릭스를 따로 만들어주어야 한다고 들었습니다. 다른곳에서 사용하는 예제를 빌어와서(http://gamedev.stackexchange.com/questions/48372/all-of-my-matrix-functions-not-working-opengl-es-2-0)

스케일이나 좌표이동, 로테이션은 활용하지않고 그저 직교투영만 할 목적으로

선언부에

private final float[] mMVPMatrix = new float[16];

private final float[] mProjMatrix = new float[16];

private final float[] mVMatrix = new float[16];

생성

 

onDrawFrame에

Matrix.orthoM(mProjMatrix, 0, 0, 640, 0, 480, 0, 1);

Matrix.setLookAtM(mVMatrix, 0, 0, 0, 1.0f, 0.0f, 0f, 0f, 0f, 1.0f, 0.0f);

Matrix.multiplyMM(mMVPMatrix, 0, mProjMatrix, 0, mVMatrix, 0);

 

/....

mMVPMatrixHandle = GLES20.glGetUniformLocation(mProgram, "uMVPMatrix");  GLES20.glUniformMatrix4fv(mMVPMatrixHandle, 1, false, mvpMatrix, 0);

 

버텍스 쉐이더에

attribute vec4 vPosition;

uniform mat4 uMVPMatrix;

 void main()

 { gl_Position = uMVPMatrix * vPosition; }

를 삽입하였으나 아무것도 뜨지 않습니다.

직교투영을 적용하기 전에 해당앱은 전면카메라를 텍스쳐로 사용하여 glsurfaceview에 띄우는 역할을

하고있었습니다.

사실 OpenGL은 입력만 했다고 다 뜨는게아니라 사물이 그려진 순서에 따라 무엇이 보이고 다른것이 가려진다던가 하는 경우는 있습니다만 , 본래 잘 보이는 화면에 직교투영을 적용한다고 안보이는게 이해가 가지않으며 , 그렇다고 코드자체를 잘못썻다고도 현재 예상되지 않으므로 , 아마 넣는위치가 이상하다고

예상하고 있습니다만 정확한 이유를 모르겠습니다.

포인트좌표->텍스쳐삽입->MVP프로젝션(직교) 형태로 현재 코드가 이루어져있는데 제가 잘못한것이

있으면 조언을 부탁드립니다.

 

2. OPENGL ES에서 실시간 배열로 좌표를 받아와 점을 찍는 법 입니다.

위에 서술하였듯이 현재 포인트 좌표는 전면카메라 텍스쳐를 표현하기 위해 사용중입니다.

그 위에 OPENCV에서 JNI를 통해 실시간으로 넘겨주는 XY좌표를 받아 전면카메라 위에 찍어야하는데

현재 방향을 못잡고 있습니다.

버텍스 쉐이더의 gl_point=vPoints;는 카메라 텍스쳐를위한 점을 찍고있는데 그 위에 배열로 받아오는 좌표를 찍어주려면 또다른 Point를 만들어서

gl_point = vPoints+aPoints; 이런식으로 만들어주어야 하는건지, 아니면 그대로 vPoints를 활용해도 된느건지 모르겠습니다.  배열에서 받아오는 좌표를 그대로찍으면 1pix로 찍힐텐데, 좌표 스케일링도 해줘야할것같고

그렇다면 최종 gl_pointsize에 값을넣어줘야하는데 , 이러면 또 모든 점들이 커지는게 아닌가싶습니다.

여태까지 동일한 성격의 오브젝트들만 한 화면에 넣어서 이런 고민이없었는데, 텍스쳐가 적용된 화면위에

무언가를 또 하려니 갑자기 막막해집니다.

 

혹여 조언가능하신분들은 간단한 조언이라도 들려주시면 참 감사하겠습니다

 

 

 

 

 

 

 

 

 

 

심슨사랑 (690 포인트) 님이 2015년 10월 19일 질문

2개의 답변

0 추천
1. GLES20.glDrawArrays, GLES20.glDrawElements 같은건 호출 하신건가요? 호출되어야 그릴텐데요..

2. 영향이 안가게  다른 텍스쳐를 한개 더 만들어서 GLES20.glDrawArrays 혹은 GLES20.glDrawElements 로

한번 더 그리시는게 좋을 듯 합니다.
익명사용자 님이 2016년 7월 15일 답변
–2 추천
;ㅣㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇ
익명사용자 님이 2016년 7월 15일 답변 1 신고
...