상세 컨텐츠

본문 제목

Cocos2d-x Camera

개발생활/Cocos2d

by 한국인맛집 2017. 10. 20. 02:20

본문

반응형

cocos2d-x 게임개발을 하다보면 게임의전체 맵을 보거나 (개발자입장으로) 확대하여 확인해야할 경우가 있다.


그럴때 사용하는 클래스인 Camera Class이다.



Camera를 사용하기 앞서 


cocos2dx에서 기본적으로 제공해주는 Camera::getDefaultCamera() 는. 제공되는부분이 적은것으로 판별되어 카메라를 새로 생성하여 사용하는것을 추천.


카메라 사용은  Base가 되는 Layer 나 Scene에서 호출하도록하고 하위클래스에선 호출을 자제하는것으로 하자 



Camera Class


Camera : public Node


카메라는 Node 를 상속받았다.


즉 Node 의 속성을 사용가능하다는것.




Camera 는 기본적으로 3개다.


1. Camera* cam = Camera::getDefaultCamera();

2. Camera* cam = Camera::createPerspective();

3. Camera* cam = Camera::createOrthographic();


3종류다.


첫번째 Default 카메라는 기본 카메라이다. Setting이 제한적이다.



두번째 Perspective 카메라는 많이 사용되는 카메라이다.


Camera::createPerspective(float fieldOfView, float aspectRatio, float nearPlane, float farPlane);


float fieldOfView : ProtoType을 확인한결과 일반적으로 40~60 value 를 넣는것이 일반적이라고한다. 하라는데로 합시다.

float aspecRatio : ProtoType의 설명에 의하면 현재 View의 비율을 설정한다고 한다. 쉬운 계산법으로 현재 View의 width Size / height size 를 넣으면 된다.

float nearPlane :  설명하기가 어렵지만 가까이 보여지는 면적의 float 값이다.

float farPlane :  far, nearPlane 이 설명이 어렵다 하지만 최대 보여지는 면적으로 생각하면 쉽니다.


Find the Vanishing Point


<http://www.olejarz.com/arted/perspective/  참조>






세번째 Orthographic 카메라이다.


Camera::createOrthographic(float zoomX, float zoomY, float nearPlane, float farPlane);


float zoomX : ZoomOut 의 X SIze 를 입력.

float zoomY : ZoomOut 될 Y Size 를 입력.


near , far plane 은 perspective 와 동일하다.



Orthogonal Camera 옵션은 View를 평면으로 보는것






사용법.


camera = Camera::createPerspective(60, _WID_SIZE/_HEIGHT_SIZE, 400, 2000);


// PerSpective 카메라를 생성하고 60 최대치 입력

// WID_SIZE 에서 HEIGHT SIZE 를 나눈 비율치 를 입력.

// 400~ 2000 View 까지보이는 Camera 옵션 설정.

// farPlane 값이 2000 이 최대까지.  2000을 넘는순간 Draw 하지않는다.


camera->setCameraFlag(CameraFlag::USER1);


// 카메라를 사용하기 위해선 카메라 플레그 값을 입력해주어야한다.

// 사용자는 1~8번까지 + Default 총 9개 사용가능 하다. 


camera->setPosition3D({ 480,320,1500 });

// 생성한 카메의 포지션값을 지정해준다. 카메라는 Vec3 를 사용하므로 setPostion3D() 를 사용해야한다.


this->setCameraMask((unsigned short)CameraFlag::USER1);

//현재 노드에 CameraMask를 생성해준다. 카메라 Flag 값을 Type Casting 해줘야한다.! 그리고 위에 생성한 카메라플레그 값을 넣어주면 된다.


camera->lookAt(camera->getPosition3D());


lookAt(Vec3 Position);


// camera클래스의 멤버인 lookAt()함수를 이용하여 Position를 보여준다.


addChild(camera);


// 생성한 카메라를 addChild 해준다.

// 하지않을시 보여지지않거나 에러를 발생.


위에 사용법대로하면 카메라 를 컨트롤할수있다.



반응형

관련글 더보기