본문 바로가기

openGL es 2.0

[ Android Opengl es 2.0 ] RenderMonkey 사용 시 Opengl es 문제 Shader Freeware인 RenderMonkey를 사용 하여 미리 Shader Test를 해볼려고 했지만, 현재 최신 버전인 1.82를 사용하여 프로젝트를 만들어 아무리 실행을 해봐도 검은 화면만 계속 나온다. 다운로드 : http://developer.amd.com/archive/gpu/rendermonkey/Pages/default.aspx 뭔가 RenderMonkey와 그래픽 카드와의 충돌이 있는 것 같다. 그래서 구글링 해본 결과~~ 좋은 해결 방법을 발견해서 이렇게 글을 옮긴다. NVemulate 툴을 먼저 다운 받는다. 다운로드 : http://developer.nvidia.com/nvemulate NVemulate를 실행 시키고 다음 과 같이 설정을 해놓는다. 그리고 RenderMonk.. 더보기
[ Android Opengl es 2.0 ] LiveWallpaper 에서 사용 시 , onSurfaceCreated 문제 이 문제는 제가 코딩을 잘못 하거나, 샘플 소스를 잘못 이용한 걸 수도 있지만, 경험의 유추했을 때 결론이 나와. 이렇게 글을 남깁니다. 혹시 잘못된 부분이 있으면 주저 말고 댓글을 달아주시면 감사하겠습니다.^^ Opengl es 2.0을 사용하여 개발하는 중.. 화면을 껏다가 다시 켜면.. 뭔가 속도가 느려지다가 결국 Out of memory 오류와 함께 팅겨져 버립니다. 역시나 Out of memory 부분은 Texture 부분이 문제 이죠. 전 onSurfaceCreated 함수 내에 Texture를 셋팅 하는 소스를 코딩하였습니다. loadTexture ( mContext.getResources().openRawResource( R.raw.background) ,"mBgTexId" ); 디버깅을 .. 더보기
[ Android Opengl es 2.0 ] LoadTexture 1.0에서는 Texture에 Bitmap 파일만 넣어주면, Android에서 알아서 바꿔주었었다. 아주 간편하게 Texture를 적용 시킬 수가 있었습니다. (안에서 어떻게 돌아가든 관계 없어..) 하지만, 2.0에서는 모든 것을 개발자에게 맡기게 되어있죠. 구글링을 해본 결과 , 안드로이드의 Bitmap 값은 ARGB로 32bit 픽셀로 되어 있다고 합니다. 하지만, Opengl은 RGBA로 되어 있어서 컨버팅 할 필요가 생긴거죠. 그래서 2.0에서는 glTexture2D 의 매개변수가 Buffer로 되어 있는 겁니다. 결과적으로 Texture에 Bitmap을 로드 시킬 때 다음과 같은 코드 형식으로 하면 되겠네요. private static int loadTexture(InputStream is) {.. 더보기
[ Android Opengl es 2.0 ] glDrawArrays 와 glDrawElements 사용법 여러 소스를 보다 보면, 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.. 더보기
[Android Opengl es 2.0 ] VBO(VertexArray Buffer Object ) 관련해서 이번에 이해하게된 함수는 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 * .. 더보기
[ Android Opengl es 2.0 ] Vertex배열을 이용하여 간단한 도형 만들기 안녕하세요. 이번엔 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.. 더보기
[ Android Opengl es 2.0 ] 기본적인 흐름도. Opengl es 2.0 에 대해 , 우선 제가 공부를 하면서 어느 정도 이해한 부분을 적어보고자 합니다. 정석의 내용이 아니라 제가 생각되는 점으로 적었다는 것을 먼저 알리고 싶습니다. 틀린 점이 있으면 주제 말고 적어주셨으면 합니다. 먼저, Opengl es 2.0을 사용하기 위해서는 가장 크게 3가지로 구분이 되는 것 같더군요. Program : Opengl es 2.0 에서 가장 큰 단위 입니다. 밑에 나오는 VertexShader와 FrameShader가 합쳐져서 위 Program이 되는 거죠. VertexShader : 물체의 모양이나 크기, 위치등 Vertex 배열을 이용해서 작성해주는 Shader입니다. FrameShader : 물체의 색깔, 질감등에 대해 설정을 해주는 Shader입니다... 더보기
[ Android ] Opengl es 2.0 다시 그리기 ByteBuffer pixelBuffer; void storePixels() { try { GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, fbuf); pixelBuffer = ByteBuffer.allocateDirect(width * height * 4).order(ByteOrder.nativeOrder()); GLES20.glReadPixels(0, 0, width, height, GL20.GL_RGBA, GL20.GL_UNSIGNED_BYTE, pixelBuffer); GLES20.glBindFrameBuffer(GLES20.GL_FRAMEBUFFER, 0); gfx.checkGlError("store Pixels"); }catch (OutOfMemoryErr.. 더보기