본문 바로가기

나의 플랫폼/안드로이드

[Android Opengl es 2.0 ] VBO(VertexArray Buffer Object ) 관련해서

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

이번에 이해하게된 함수는

glGenBuffers, glBindBuffer,glBufferData 이 세 함수입니다.

이 함수에는 다음과 같은 코드로 Vertex 배열을 Opengl Buffer에 저장을 시켜서
Handle Number를 이용하여 사용을 하는데요.

// Buffer 생성 공간을 2군데 만든다.
GLES20.glGenBuffers(2, vObjId);


// Buffer 공간에서 첫번째와 연결       

GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, vObjId.get(0));
// 연결된 첫번째 공간에 Static형태로 Vertex데이터를 저장 한다. 

GLES20.glBufferData(GLES20.GL_ARRAY_BUFFER, mVerticesData.length * 4, mVertices, GLES20.GL_STATIC_DRAW);
// 한 번 읽을 때마다 , float 4바이트를 3개씩 읽게 된다. ( ex> 0.0f,0.0f,0.0f ) 

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

GLES20.glEnableVertexAttribArray(0);

 

전 코드를 만들면서 생각에 큰 오류가 있었습니다.

바로 위  glGenBuffers라는 함수는
여러 Object에 대한 형태를 지정해 놓으면,
Handle Number를 통하여 Object 모양을 바꿀 수 있을 줄 알았습니다.


하지만!!!!!
glGenBuffers는 한 Object에 대한 여러 Attribute을 지정하는 것이었습니다.


즉, 한 Object에 한해서 밖에 생성이 안된다는 이야기입니다.

구글링을 해본 결과 얻은 결론은 Opengl es 버전이 아닌,
또는 안드로이드가 아니고 iOS내에 Opengl es 버전에는

 glGenVertexArrays       ( Opengl )
 glGenVertexArraysOES ( iOS Opengl )

위 함수를 통하여 여러 Object를 Buffer에 지정할 수가 있는 것 같습니다.

우선, 제가 테스트해 본 결과로는 안드로이드에서 Buffer 여러 Object를 지정해 놓는 것은
힘들어 보이네요...

혹시 이 의견에 반발이 있으신 분은 주저 말고 댓글 달아주세요!!!

이게 100% 맞다고 할 수 없지 않습니까??^^