2014년 2월 9일 일요일

Android OpenGL - 03 - Renderer Method


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package com.example.OpenGL;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
import android.opengl.GLSurfaceView;
import android.opengl.GLSurfaceView.Renderer;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Window;
import android.view.WindowManager;
public class MainActivity extends Activity implements Renderer{
    
    GLSurfaceView glView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                             WindowManager.LayoutParams.FLAG_FULLSCREEN);
        
        glView = new GLSurfaceView(this);
        glView.setRenderer(this);
        setContentView(glView);
    }
    
    @Override
    public void onDrawFrame(GL10 gl) {
        Log.i("onDrawFrame", "1");
    }
    @Override
    public void onSurfaceChanged(GL10 gl, int width, int height) {
        Log.i("onSurfaveChanged", "1");
    }
    @Override
    public void onSurfaceCreated(GL10 gl, EGLConfig config) {
        Log.i("onSurfaveCreated", "1");
    }
}

위 소스를 실행 해 보자, 그렇다면 이러한 결과가 나온다. 


우선 GLSurfaceViewRenderer를 implements를 한 MainActivity를 인자로 삼는다. 
그렇다면 이렇게 Creaded -> Chaged -> Draw 순으로 실행되며 Draw는 Thread의 Run 부분에 해당해서 계속 실행하게 된다. 
각 메서드의 인자인 GL10을 이용해서 그리면 된다. 다음장에서 GL10을 다루는 법을 알아보자

2014년 2월 8일 토요일

Android OpenGL - 02 - GLSurfaceView 창 띄우기


우선 초 간단 창 띄우기를 해보자.

이클립스를 켠다.


프로젝트 생성


어플리케이션 이름과 프로젝트 이름, 패기키 설정과, 옵션을 선택 후 

Next -> Next -> Next -> Finish



초 경량 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
package com.example.OpenGL;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
import android.opengl.GLSurfaceView;
import android.opengl.GLSurfaceView.Renderer;
import android.os.Bundle;
import android.app.Activity;
import android.view.Window;
import android.view.WindowManager;
public class MainActivity extends Activity implements Renderer{
    
    GLSurfaceView glView;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                             WindowManager.LayoutParams.FLAG_FULLSCREEN);
        
        glView = new GLSurfaceView(this);
        glView.setRenderer(this);
        
        setContentView(glView);
    }
    @Override
    public void onDrawFrame(GL10 gl) {
    }
    @Override
    public void onSurfaceChanged(GL10 gl, int width, int height) {
    }
    @Override
    public void onSurfaceCreated(GL10 gl, EGLConfig config) {
    }
}



코드를 설명 하자면 우선 MainActivity를 생성.
GLSurfaceView를 이용하기 위해서는 Renderer를 implements 해주어야 한다.
기존 SurfaceView의 Thread의 역활과 추가적인 역활을 Renderer이 담당한다.


GLSurfaceView glView; 
GLSurfaceView 생성

requestWindowFeature(Window.FEATURE_NO_TITLE); 
타이틀 바를 없애는 기능을 한다.

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                             WindowManager.LayoutParams.FLAG_FULLSCREEN); 
전체화면 설정 코드


glView = new GLSurfaceView(this); 
GLSurfaceView 생성자

glView.setRenderer(this); 
GLSurfaceView 랜더러 설정 

setContentView(glView); 
액티비티에 적용

위와 같은 코드로 결고로는 이런 검은 화면이 출력된다. 

Android OpenGL - 01 - OpenGL 정보



오늘 부터 Android OpenGL을 다루게 될 것이다. 
OpeGL이란? Open Graphics Library 의 줄임말로 그래픽스 표준 API 규격, 프로그래밍 언어간 프랫품 간의 교차 응용 프로그래밍을 지원한다.(위키참조) 
 위와 같은 경우는 C에 적용되지만 안드로이드 OpenGL 도 비슷하다. 안드로이드 내에 고급스러운 2D와 3D 그래픽을 지원하게 된다. (그렇게 고급스럽지도 않다.)

안드로이드에서 OpenGL을 사용 하는 법은 의외로? 무척 간단하다. 

OpenGL에서 가장 중요한 것은 GL10과 GLSurfaceView가 있다.