본문 바로가기

나의 플랫폼/안드로이드

[ Android Opengl es 2.0 ] glDrawArrays 와 glDrawElements 사용법

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
여러 소스를 보다 보면,
glDrawArrays를 사용하거나, glDrawElements를 사용하기도 합니다.

그래서, 저 같은 경우는 이해하기 쉬운 glDrawArrays를 많이 사용했는데요.

// Vertex 배열을 만듬.
private final float[] mVerticesData =

    { 

    0.0f, 0.0f, 0.0f, 

    -0.5f, 0.5f, 0.0f, 

    0.5f, 0.5f, 0.0f,

   

    0.0f, 0.0f, 0.0f,

    1.0f, 0.0f, 0.0f, 

    0.5f, 0.5f, 0.0f,

   

    0.0f, 0.0f, 0.0f,

    0.5f, -0.5f, 0.0f, 

    1.0f, 0.0f, 0.0f,

   

    0.0f, 0.0f, 0.0f,

    -0.5f, -0.5f, 0.0f, 

    0.5f, -0.5f, 0.0f,

   

    0.0f, 0.0f, 0.0f, 

    -1.0f, 0.0f, 0.0f, 

    -0.5f, -0.5f, 0.0f,

   

    0.0f, 0.0f, 0.0f, 

    -1.0f, 0.0f, 0.0f, 

    -0.5f, 0.5f, 0.0f,

   

 };


// Vertex Buffer에 포인터를 설정한다.

GLES20.glVertexAttribPointer(0, 3, GLES20.GL_FLOAT, false, 0, mVertices);
// Vertex 속성을 허용한다. 

GLES20.glEnableVertexAttribArray(0);


// Vertex의 포인터 갯수 만큼만 그린다. ( 0부터 18 )

GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, mVerticesData.length/3); 



이렇게 Vertex만 잡아주면 쉽게 그릴 수 있는게 glDrawArrays이구요.

만약, 한 구역 내에서 여러 모양의 형태로 그리고 싶을 경우가 있을 때 , glDrawElements를 사용하는데요.
이 때 필요한 것이 Indices 배열입니다.

// Vertex 배열을 만듬.
private final float[] mVerticesData =

    { 

    0.0f, 0.0f, 0.0f,  // Vertex 0

    -0.5f, 0.5f, 0.0f,// Vertex 1 

    0.5f, 0.5f, 0.0f, // Vertex 2

    1.0f, 0.0f, 0.0f, // Vertex 3

    0.5f, -0.5f, 0.0f,// Vertex 4

    -0.5f, -0.5f, 0.0f,// Vertex 5

    -1.0f, 0.0f, 0.0f,// Vertex 6

    };

// Indice 배열을 만듬. 

    private final short[] mIndicesData = {

    0,2,1, // 삼각형 1

    0,3,2,// 삼각형 2

    0,4,3,// 삼각형 3

        0,5,4,// 삼각형 4

        0,6,5,// 삼각형 5

        0,1,6,// 삼각형 6

    };


// Vertex Buffer에 포인터를 설정한다.

GLES20.glVertexAttribPointer(0, 3, GLES20.GL_FLOAT, false, 0, mVertices);
// Vertex 속성을 허용한다. 

GLES20.glEnableVertexAttribArray(0);


// Indices 갯수만큼 설정.

GLES20.glDrawElements(GLES20.GL_TRIANGLE_FAN, mIndicesData.length, GLES20.GL_UNSIGNED_SHORT, mIndices); 

 
 


Vertex의 위치 를 보여드린 그림입니다.
 
각각 안에 삼각형이 6개가 그려지죠.
3각형을 그릴 포인트를 Indices 배열에 지정한 것입니다.

이 그림의 주소따라 
mIndicesData 안에 값들 대로 그려보십시요.

아~~~ 하실 껍니다.^^ 

참고>
glDrawElements를 할 경우, 여러 Object를 연결 시키고자 할때,
Vertex는 많아도 indices로 연결을 시켜주면 되니 사용하기 편하다고 하네요..^^