본문 바로가기

OpenGL

(6)
OpenGL es 조명 > 조명 종류주변광(ambient) : 특정한 방향성이 없는 빛, 오브젝트의 모든 면에 영향을 미치고 밝기도 동일분산광(diffuse) : 특정 방향에서 들어와 여러 방향으로 반사되는 빛. 빛을 직접 받는 부분일수록 밝아진다.반사광(specular) : 특정 방향에서 들어와 특정 방향으로 반사되는 빛. > 노말벡터방향성이 있고, 특정방향으로 반사되는 조명의 경우기존 모델에 노말벡터를 위한 버퍼가 추가로 필요하다.노말 벡터는 길이가 1인 단위벡터로 빛의 정도와 반사를 계산하기 위해 필요한 정보.버텍스와 같이 glVertex / glNormal 로 쌍으로 구성하거나 , array의 포인터를 전달하면 된다. > 라이팅 활성화glEnable( GL10.GL_LIGHTING ); > 사용할 라이트 번호(0~7) ..
API demos openGL es 2.0 ApiDemos GLES20Activity.java / GLES20TriangleRenderer.javaglVertexAtribPointer() , glDrawElemnts() 등 몇가지 메쏘드는 안드로이드버전 2.3 이상.. >> 2.0 호환여부 검사ActivityManager am = (ActivityManager) getSystemService( Context.ACTIVITY_SERVICE );ConfigurationInfo info = am.getDeviceConfigurationInfo();if (info.reqGlEsVersion >= 0x20000 ) {// 지원함} 2.0 은 기존 그래픽 파이프라이의 버텍스, 프레그먼트 프로세스가 쉐이더로 변경되었다.렌더러에서 GL10 인터페이스는 무시되며..
GLSurfaceView 배경 투명하게 GLSurfaceView 배경 투명하게 만들기 관련소스 : APIDemos/src/com.example.android.apis.graphics/TranslucentGLSurfaceViewActivity.java GLSurfaceView는 기본 값이 알파채널이 적용되지 않아서,glClearColor( 0,0,0,0 ); 으로 해도 투명값이 설정되지 않는다. EGL을 통해 SurfaceView를 핸들링하므로, 뷰 생성후 EGL, SurfaceView관련 설정만 하면 알파값을 사용할 수 있다. GLSurfaceView myView = new GLSurfaceView(this); // 픽셀포맷을 32비트포맷(8,8,8,8)으로 변경한다.myView.setEGLConfigChooser( 8, 8, 8, 8, 16..
OpenGL 프레임버퍼 사용 API DEMOS에 프레임버퍼를 사용해 텍스처에 그림을 그리는(Render to texture) 예제가 포함되어 있다. 프레임버퍼는 openGL 2.0 부터 지원하는데, 예제에서는 extension pack 을 통해 1.1에서프레임버퍼를 사용하는 예제를 다루고 있다. >> onSurfaceCreated 1. 프레임버퍼 지원 여부 검사String extensions=" " + gl.glGetString(GL10.GL_EXTENSIONS) + " ";if( extensions.indexOf(" GL_OES_framebuffer_object " ) >= 0)return true; 2. 텍스처 생성int tex_id;int[] textures = new int[1];gl.glGenTexture(1, textur..
SurfaceView/GLSurfaceView 쩝.. 프로젝트도 진행 중인데, opengl을 좀 봐달라는 부탁이..어째 opengl은 만져볼 일이 전혀 없었다.웬만한건 hollo world는 거쳐보는데, opengl의 hello world 기억은 없다.물론 이쪽의 hello world는 삼각형 일테지만... 아니 큐브던가? 긁적.. 그나마 Direct3D ,Unity3D 만져본게 다행~ 아무튼 단기간에 기본 사항을 살펴보고, 세부 항목을 살펴보기로 해 기본적인것 부터 다시 점검.쩝. 안드로이드는 뷰들이 모여 윈도우로 구성되고, 이 윈도우들은 각각 서피스라는 공간에 표시하게 된다.이러한 서피스들이 모여 서피스 플링거를 통해 프레임버퍼로 합쳐져 화면에 보여지게 된다. 안드로이드 api 단에서 이러한 서피스의 핸들링을 위해 지원되는 클래스가 Surface..
OpenGL 사용하기 음.. 오픈지엘은 직관적인 api 구조를 가지고 있어서 사용하기에 그다지 어렵지 않다.다이렉트x 5, 6 대의 느낌과 같다는 생각이 들기도 하는데,윈도우에선 오픈지엘을 실제로 사용해보질 않아서 정확히 어떻다 이야길 하긴 그렇다. 사실 3D쪽은 api 외적으로 이해해야 하는 것들이 있는데, 뷰포트, 모델, 프로젝션, 월드 , 행렬, 픽킹, 필터, 각종 쉐이더까정.. api 를 제외하면 다이렉트x 관련 서적에 많이들 설명되어있다.다른점도 있는데 다이렉트X는 월드,뷰, 프로젝션 순서의 파이프라인을 사용하지만오픈지엘은 모델뷰, 프로젝션으로 단순화 되어 있다. 이 포스트에선 뭐 아는게 쥐뿔도 없으므로, 당연 api 만 다룬다. 1. 네모를 그리자!! -_-;;튜토리얼에 언제나 나오는 내용. 1-1. 서피스뷰 선언..