본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[Android/안드로이드] OpenGL APIs ( Draw, Texture, Rotate )

by 돼지왕 왕돼지 2012. 2. 14.
반응형


안녕하세요. 돼지왕 왕돼지입니다.
오늘은 Android OpenGL Apis 중 실제 도형을 그리는 Draw 관련 함수들, Texture 를 입히는 합수들, 그리고 Rotate 에 대해 알아보겠습니다.


gl.glDrawArrays(GLenum mode, GLint first, GLsizei count);


 - array data로부터 primitive를 render.
 - mode는 primitive type
  GL10.GL_LINES
  GL10.GL_TRIANGLE_STRIP
  GL10.GL_TRIANGLE_FAN
  GL10.GL_TRIANGLES
  GL10.GL_LINE_LOOP
  GL10.GL_POINTS
  GL10.GL_LINE_STRIP
 - first는 array의 starting index 지정
 - count 는 indices의 수 지정
 
 
 

gl.glRotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z); 


 - current matrix와 rotation matrix를 곱한다. 결론은 (x, y, z) vector에 대해 rotation

 - angle은 한번 rendering 할때마다 돌리는 각도. 단위는 degree.

 - x, y, z 는 합쳐져서 vector (축)을 이룸.

 - 돌리는 방향은 오른속 법칙 따름. 


 
  
 

gl.glGenTextures(GLsizei n, GLuint* textures, int offset);

 
 - texture 이름 생성
 - n은 생성할 texture 이름의 갯수
 - textures는 texture 이름이 저장될 array
 - offset은 offset.
 
 
 

gl.glBindTexture(GLenum target, GLuint texture);


 - texturing target과 texture 이름을 bind
 - target 은  반드시 GL10.GL_TEXTURE_2D 여야 함.
 - texture은 texture 이름
 - bindTexture 를 하면, state 상에 해당 texture 가 bind 된 상태. 
 
 
 

gl.glTexParameterf(GLenum target, GLenum pname, GLfloat param);


 - texture parameter 설정
 - target은 항상 GL10.GL_TEXTURE_2D
 - pname은 texture parameter 의 이름.
 - param 은 texture parameter 의 실제 value 


pname :  GL10.GL_TEXTURE_MIN_FILTER : texture mapping할때 크기가 안 맞으면 축소하는 기능.

 
  params : 
    GL10.GL_NEAREST : texture가 입혀지는 녀석의 center pixel에 가장 가까운 texture element return
    GL10.GL_LINEAR : texture가 입혀지는 녀석의 center pixel에 가장 가까운 4개의 texture elements의 weighted average return
    GL10.GL_NEAREST_MIPMAP_NEAREST :  texture가 입혀지는 녀석에 가장 잘 맞는 size의 minimap 선택 (NEAREST 요소 이용해서)
    GL10.GL_LINEAR_MIPMAP_NEAREST :  texture가 입혀지는 녀석에 가장 잘 맞는 size의 minimap 선택 (LINEAR 요소 이용해서)
    GL10.GL_NEAREST_MINMAP_LINEAR :  texture가 입혀지는 녀석에  가장 잘 맞는 size의 minimap 2개 선택 (NEAREST 요소 이용해서)
    GL10.GL_LINEAR_MINIMAP_LINEAR : texture되는 놈에 가장 잘 맞는 size의 minimap 2개 선택 (LINEAR 요소 이용해서)
 

pname : GL10.GL_TEXTURE_MAG_FILTER : texture mapping할때 크기가 안 맞으면 확대하는 기능.


  param :
    GL10.GL_NEAREST
    GL10.GL_LINEAR


pname : GL10.GL_TEXTURE_WRAP_S : parameter s 를 wrap

  
 param :
    GL10.GL_CLAMP_TO_EDGE : s coordinate가 clamp 되도록
    GL10.GL_REPEAT : s coordinate의 integer part를 무시
 

pname : GL10.GL_TEXTURE_WRAP_T : t coordinate 를 wrap


 param :
    GL10.GL_CLAMP_TO_EDGE
    GL10.GL_REPEAT


pnme:

 GL10.GL_GENERATE_MIPMAP : 자동 mipmap generation 함

 
  param :
    GL10.GL_TRUE
    GL10.GL_FALSE
 
 
 

gl.glScalef(GLfloat x, GLfloat y, GLfloat z);


 - current matrix를 scaling matrix와 곱함.
 - x, y, z 는 각각의 axis
 
 
 

gl.glTexCoordPointer(GLint size, GLenum type, GLsizei stride, const GLvoid* pointer);


 - texture coordinate array 설정
 
 

GLUtils.texImage2D(int target, int level, Bitmap bitmap, int border)


- 실제 Texture 연결.
- target 은 texture 이름.
- bitmap 은 실제 image.
- border 는 border 의 유무.

 
 
로그인 없이 추천 가능합니다. 손가락 꾸욱~

반응형

댓글