본문 바로가기

iOS

OpenGL & C++ & iOS

(openGL)고정기능을 사용한 HellowArrow

1. 3D 앱의 코드 구조
이 프로그램의 핵심은 C++로 작성되고 아이폰에 종속적인 부분만 Objective-C로 구현하는 앱 코드를 구성하는 두가지 방법을 아래 그림으로 표현하였다. 오른쪽 구조는 앱 엔진을 렌더링 엔진과 분리한 구조이다. 

이 구조를 응용하여 렌더링 엔진에대한 인터페이스를 정의하여, 어떤 플랫폼에도 사용할 수 있도록 한다. 여기서는 이 렌더링 엔진을 IRenderingEngine으로 정의하였다. 이 샘플에서는 다음과 같은 클래스를 구현한다.
 - RenderingEngine1 과 RenderingEngine2(표준 C++)
거의 모든 작업은 이 클래스에서 수행한다. 이 클래스가 실제로 OpenGL ES API를 호출하게 된다. RnederingEngine1은 ES 1.1을, RenderingEngine2는 ES 2.0을 호출한다.

 - HelloArrowAppDelegate(Objective-C)
   앱 델리게이트 객체는 NSObject로부터 상속받으며, UIApplicationDelegate 프로토콜을 따른다. 이 클래스는 OpenGL이나 EAGL을 사용하지 않는다. 이 클래스가 하는 일은 GLView 객체를 초기하하고 앱이 종료될 때 메모리를 해제하는 것이다.

 - GLView (Objective-C)
   UIView 클래스로부터 상속받으며, EAGL을 사용하여 OpenGL을 위한 렌더링 표면 객체 인스턴스를 생성한다.

2. 시작하기
   Xcode 에서 새로운 프로젝트를 선택한 후 Empty Application 으로 생성한다. 

3. OpenGL과 쿼츠 라이브러리 연결하기
   프로젝트의 Build Pharse 부분에서 Link binary With Libraries 에서 'OpenGLES.Framework' 와 'QuartzCore.Framework'를 추가한다.

4. UIView 클래스 상속하기
  아이폰에서 그리는 것은 결국은 뷰 안에 놓여져야 하기 때문에, HellowArrow 예제 코드에서도 UIView의 하위 클래스를 하나 만들어야 한다. Xcode에서 'Add->New File' 로 'Cocoa Touch Class' 의 'Objective-C Class' 를 생성하도록 하자. 'SubClass of' 메뉴에서 UIView 클래스를 선택하고 클래스 파일 이름을 'GLView.mm'으로 입력한다.



#import <UIKit/UIKit.h>

#import <OpenGLES/ES1/gl.h>

#import <OpenGLES/ES1/glext.h>

#import <OpenGLES/EAGL.h>

#import <QuartzCore/QuartzCore.h>


@interface GLView : UIView

{

    EAGLContext *m_context;

}


-(void)drawView;


m_context 필드는 OpenGL 컨텍스트를 관리하는 EAGL 객체에 대한 포인터이다. EAGL은 애플의 고유한 API로서 아이폰 OS 와 OpenGL을 연결시켜 준다.


-- http://hanjw8410.egloos.com/ 에서 퍼왔습니다. 문제되면 삭제하겠습니다.