OpenGL
1. OpenGL 초기화 : OpenGL를 사용하기 위한 3D 초기화 / 링크2
2. OpenGL ES
3. OpenGL Reference / Reference2
5. OpenGL 기본 강좌(블로그) / 강좌2(공식) / 강좌3(한글) / 안드로이드 OpenGL 강좌(안드로이드 예제 관련 소스 제공)
6. OpenGL 기본 함수
7. OpneGL 정리 잘된 참고 : 링크1 / 링크2
8. 3D gallery : 링크1
9. 렌더링
- GLSurfaceView : 링크1(초기화 관련 정석)
Handling events
class MyGLSurfaceView extends GLSurfaceView {
private MyRenderer mMyRenderer;
public void start() {
mMyRenderer = ...;
setRenderer(mMyRenderer);
}
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
queueEvent(new Runnable() {
// This method will be called on the rendering
// thread:
public void run() {
mMyRenderer.handleDpadCenter();
}});
return true;
}
return super.onKeyDown(keyCode, event);
}
}
- 디버깅 : .GLSurface.setDebugFlags() 메서드는 OpenGL ES호출시 오류를 확인 하거나 로깅을 가능하게 하는데 사용될 수 있다. setRenderer()를 호출하기 전에 GLSurfaceView의 생성자에서 이메소드를 호출한다.
public
ClearGLSurfaceView(Context context) {
super
(context);
// 오류 확인과 로깅을 On
setDebugFlags(DEBUG_CHECK_GL_ERROR | DEBUG_L`OG_GL_CALLS);
mRenderer =
new
ClearRenderer();
setRenderer(mRenderer);
}
OpenGL Vertex Array : 링크1
회전
회전 속도 설정
@Override
public void onDrawFrame(GL10 gl) {
long time = SystemClock.uptimeMillis() % 4000L;
rquad = 0.190f * ((float)time);
rtri = 0.050f * ((float)time);
.....
}
- 기본 메소드 정리 : 링크1
a. glFrontFace : 링크1(OpenGL 꼭지점의 이해) - 그리는 순서가 시계방향이라는 소리 같다.(?)
b. glTranslatef : OpenGL은 처음에 초기화 과정에서 원점(0, 0, 0)을 화면의 정중앙에 맞추게 된다. 이 원점을 중심으로 OpenGL에서 그려지는 모든 것들을 바라보게 된다. 중요한 것이 바로 여기에 있다. 바로 원점에서 우리가 그린 사각형을 바라봐야 하는데 눈과 사각형이 겹치게 된다. 상상해 보라 독자의 눈과 책이 만날정도로 부착시키면 독자는 무었을 보게 되는가... 그렇다! 아무것도 보이지 않는다. 그래서 추가코드1이 필요한 것이다. 즉 물체를 눈의 위치보다 앞이나 뒤로 옮겨야 볼수 있는 것이다. 추가 코드1인 glTranslatef(0.0f, 0.0f, -10.0f)가 바로 그러한 일을 하는데 물체를 Z축으로 10.0f만큼 뒤로(-) 옮겨 그리라는 것이다.
c. 결 론적으로, 원점을 기준으로 그리고자하는 도형의 위치를 지정하는 것이다. 위치 지정으로 도형의 크기 조정이 가능해 진다. 테스트 결과 (0,0,0)에 앞쪽으로만 시선이 있으며 Z값이 + 값이 되었을 때는 시전 뒤쪽으로 가는 거 같다.
b. glColor3f : Color 지정 R G B / MIN~MAX(0~1) 이다.
e. glClearColor : Background color 지정
f. glClearDepth : 모든 픽셀 값이 깊이를 가지고 있는데 해당 값을 초기화 >> 1.0f 값으로 함으로 시선 뒤로 보내게 된다. 당연히 화면에는 출력이 되지 않을 것이다.
g. glDepthFunc : 다면체를 그릴 때 깊이가 작은 것만 그린다는 의미로 시야에서 먼 쪽에 있어서 보이지 않는 면은 그리지 않도록 하는 것이다.
h. glHint : 프로그램이 실행될 때 행해질 그래픽적인 부분의 품질을 설정할 때 사용(링크1)
i. oadIdentity : Reset The Current Modelview Matrix
glVertexPointer(GLint 크기, GLenum 타입, GLsizei 간격, const GLvoid *포인터) : OpenGL 에서 버텍스 배열 기능을 사용할 때 필요한 데이터의 위치, 구성, 타입을 지정하는함수.이 함수에 의해 지정되는 버퍼에는 동적인 데이터가 포함될 수 있으나 반드시 유효한 데이터여야만 한다. OpenGL 이 버텍스 배열을 계산할 떄마다 여기서 지정된 데이터가 여기서 지정된 버텍스 배열 버퍼로부터 다시 읽혀진다.
j. ex) glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer)
// 3 : 3개가 한 셋, GL10.GL_FLOAT : 데이터 타입, 0 : 간격(?), vertexBuffer : vertices가 있는 버퍼
private float vertices[] = {
-1.0f, -1.0f, 0.0f, //Bottom Left
1.0f, -1.0f, 0.0f, //Bottom Right
-1.0f, 1.0f, 0.0f, //Top Left
1.0f, 1.0f, 0.0f //Top Right };```
k. glDrawArrays : Draw 할 때는 인덱스 순서로만 Draw하게 된다.
l. GL_LINE_STRIP : 각 점을 인덱스 순서로 선으로 연결 시킨다. GL_LINE 과의 차이는 GL_LINE는 선을 만들면 다음 인덱스가 시작점이 되지만, GL_LINE_STRIP는 선을 이어 간다는 것이다.
m. glRotatef(float angle, float x, float y, float z) : angle에 의해 회전하는 것이 일반 적이다.
'Dev Theory > 01. Open Library' 카테고리의 다른 글
ID3TAG (0) | 2012.12.18 |
---|