본문 바로가기

나의 플랫폼/안드로이드

[ Android ] Opengl에서 glDrawElements함수로 그릴 떄 주의점

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
전 glDrawArray함수를 많이 사용하는데요.

폴라곤을 이용하여 텍스처를 입힐 때에는 glDrawElements함수를 사용하는 게 훨 편하고

속도면에서도 낫더라구요.

그런데 기존에 사용했던 glDrawArray함수와 glDrawElements함수를 사용할 때

준비해야할 점들이 다릅니다. 

glDrawArray함수는 vertex 좌표만 있어도 표현이 가능하죠. ( 다른 Normal등 부수적인 것을 제외 )

하지만, glDrawElements함수에서는 vertex만큼 중요한 좌표가 두가지가 있죠.

바로!!! vertex포인터를 하게 될 좌표와 텍스처 포인터를 할 좌표!!

이 두가지를 확실하게 해주지 않으면 죽을 때까지 원하는 모양을 보실수 없으십니다.

먼저 , 텍스처 포인터를 할 때

 
위와 같이 두 포인터가 합쳐서 1을 표현해야만 합니다.

저 윗 그림을 배열로 표시하면

{

0.0 , 0.0

0.5 , 0.0

1.0 , 0.0

0.0 , 0.5

0.5 , 0.5

1.0 , 0.5

0.0 , 1.0

0.5 , 1.0

1.0 , 1.0



함수는 다음과 같습니다. 참고하세요.^^ : Java에서 테스트 한 거라 ㅎㅎ

private static void texturePoint(){

int i = 0;

  float delta_x = 1.0f / (float)(3-1);

  float delta_y = 1.0f / (float)(3-1);

  for (int y = 0; y < 3; y++)

       for (int x = 0; x < 3; x++)

    {

        System.out.println((float)x * delta_x + " , " + (float)y * delta_y);

         i += 2;

     }



그 다음은 Vertex포인트 입니다.

똑같은 위 그림을 표현하면 배열이 다음과 같구요.

0 , 1 , 4 ,         0 , 3 , 4

1 , 2 , 5 ,         1 , 4 , 5

3 , 4 , 7,          3 , 6 , 7

4 , 5 , 8,          4 , 7 , 8 

소스는 다음과  같습니다.

 private static void vertexPoint(){

int i=0;

   

    for(int y=0;y<(3-1);y++){

   

    for(int x=0;x< (3-1) ; x++){

   

    int n = (y*3)+x;

   

    System.out.println((byte)n + " , " + (byte)(n+1) + " , " + (byte)(n+1+3));

    System.out.println((byte)n + " , " + (byte)(n+1+3-1) + " , " + (byte)(n+1+3));

   

    i+=6;

   

    }

   

    }


 
저두 이걸로 조금 씩 텍스처의 개념이 이해가 되어 가고, DrawElements를 사용하는데 자신감이 생겼네요^^

어려움을 직면했을 때 포기말고 끝까지 해봅시다.!!!

도움이 되었으면 좋겠네요.. 화이팅!!

아!!! 지금 숫자 3은 가로 세로의 포인트 갯수가 각각 3개인 것입니다.^^