카테고리 Archives: 미분류

XCode4에서 ES1 렌더러 우선 사용.



일단 *ViewController.m 파일의 다음 부분을 아래와 같이 수정.

– (void)awakeFromNib

{

//    EAGLContext *aContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];

    EAGLContext *aContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1];

회전각도의 취득

6-4-1 회전 각도를 취득하는 프로그램의 구성

단말 내장의 자이로스코프를 이용해서 회전 각도를 취득해 표시하는 프로그램을 만든다. 자이로스코프가 내장되어있는 것은 iPhone4뿐이므로 iPhone4이외에서는 동작 않는다. 표시할 정보는 다음과 같다.

X축 회전각도 (도)
Y축 회전각도 (도)
Z축 회전각도 (도)

단말을 정지한 상태에서는 모두 0.0에 근접한 값이 되고 기울이면 기울인 각도가 표시되며 천천히 0.0으로 돌아간다. <-?

(1) 회전각도 통지 개시
=============
회전 각도의 통지를 개시하려면 CMMotionManager클래스를 이용한다. alloc으로 메모리를 확보후 init메소드로 생성한다. 주요 프로퍼티는 다음과 같다.

(중략)

회전 각도의 통지 타겟은 startDeviceMotionUpdatesToQueue:withHandler:메소드로 지정한다.

(중략)

큐에는 오퍼레이션 큐를 NSOperationQueue클래스의 currentQueue프로퍼티로 취득해서 지정한다.

(중략)
 핸들러의 형은 iPhone4부터 추가된 “Blocks”라 불리는 새로운 형으로 다음과 같이 정의 된다.

typedef void (^CMDeviceMotionHandler)(CMDeviceMotion* motion, NSError* error);

“^”가 Blocks의 표시다. Java 언어의 무명함수와 닮았다. 이하의 서식으로 함수의 선언 없이 함수의 구현과 대입을 동시에 할 수 있다.

^(인수의 형 인수…){처리}

이 프로그램에서는 회전 각도 통지시에 Gyro클래스의 updateGyro:메소드를 부르는 것으로 다음과 같이 기술한다.

(중략)

(2) 회전 각도의 취득
============
CMDeviceMotion 오브젝트부터 회전 각도를 취득하려면 CMDeviceMotion 클래스의 attitude 프로퍼티를 사용한다.
CMAttitude 클래스는 회전 각도를  가진 데이터 형으로 pitch 프로퍼티에 X축 회전각도, yaw 프로퍼티에 Y축 회전 각도, roll프로퍼티에 Z축 회전 각도를 가진다.

(중략)

다음 계산으로 라디언을 도로 변환해 화면에 표시한다. M_PI는 파이 값을 표시하는 상수다.

도=라디안*(180/M_PI)

역으로 도를 라디언으로 변환하는 계산식은 다음과 같다.

라디안 = 도*(M_PI/180)

사용자 삽입 이미지