- Model(모델) - 모델입니다.여러개의 다각형으로 이뤄져있고 Cocos2d-x중에선 Sprite3D로 사용됩니다.
3D 지원
당신은 Cocos2d-x가 2D게임엔진이라고 생각할수 있습니다.하지만 3.0버전부터 3D기능도 추가되었습니다.
3D 게임개발은 당신에게 있어 생소할겁니다.
3D게임에서 사용되는 용어도 익숙하지 않을것이고 사용되는 툴들도 모를겁니다.
하지만 걱정하지 마세요.
우선 용어부터 알아가봅시다
.
용어
3D게임 개발에 앞서 먼저 관련 용어 부터 익숙해져봅시다.
- Mesh(메쉬) - 모델의 메쉬입니다.3D모델은 나눠진 다각형으로 구성됩니다.
- Texture(텍스처) - 텍스처 입니다.모델의 표면을 장식하는 능력을 가지고 있습니다.모델의 모든 표면과 정점에 텍스처를 입힐수 있습니다.
- Camera(카메라) - 。3D세계에서의 눈입니다.이것을 통해 어떤각도의 월드를 볼수있습니다.하나의 월드에 다른 여러개의 카메라를 배치하면 각기 다른 장면을 볼수있습니다.
- Light(조명) - 3D세계에서 조명입니다.조명을 통해서 당신의 게임이 더욱 리얼하게 보이게 합니다.조명효과는 3D모델 표면의 그림자효과 및 색상에 영향을 줍니다.
Cocos2d-x에 내장된 3D기능은 더 이상 업데이트 하지 않습니다.
출처: <http://cocos2d-x.org/docs/cocos2d-x/zh/3d/>
3D Sprite
2D게임처럼 3D게임에도 스프라이트 개체가 있습니다.
Cocos2d-x는 Sprite3D개체로 스프라이트를 표현할수 있습니다.
3D공간은 3개방향의 자유도를 가지고 있고 Sprite3D개체도 (x,y,z)3개의 좌표값으로 위치가 정해집니다.
Sprite3D는 여러방면에서 보통의 Sprite와 같습니다.
생성 및 읽어오기:
C++
auto sprite = Sprite3D::create("boss.c3b"); //c3b file, created with the FBX-converter
sprite->setScale(5.f); //sets the object scale in float
sprite->setPosition(Vec2(200,200)); //sets sprite position
scene->addChild(sprite,1); //adds sprite to scene, z-index: 1
이 개체는 .c3b파일로 생성했습니다.효과는 아래와 같습니다.
Action을 생성하여 이 모델이 계속 회전하게 만들어봅시다.
C++
//rotate around the X axis
auto rotation = RotateBy::create(15, Vec3(0, 360, 0));
//our sprite object runs the action
sprite->runAction(RepeatForever::create(rotation));
피벗값을 설정해주는것은 Sprite 방법과 동일합니다.
C++
sprite->setAnchorPoint(Point(0.0f,0.0f));
모델추가
3D모델은 메쉬의 집합이고 메쉬는 다시 조합시킬수 있습니다.
풍부한 효과를 보여주기 위해선 당신의 3D모델에 다른 모델을 부착할수 있습니다.
하나의 예를 들어보자면 캐릭터에 무기를 붙이는 것입니다.
먼저 getAttachNode(attachment_point_name)을 사용하여 부착할 점을 곳을 찾고 그다음 addChild()메서드로 무기모델을 부착합니다.
효과는 아래와 같습니다.
C++
auto sp = Sprite3D::create("axe.c3b");
sprite->getAttachNode("Bip001 R Hand")->addChild(sp);
위의 예를 보고 여러개의 간단한 모델을 부착하면 당신은 복잡한 모델도 생성할수 있을겁니다.
메쉬 변경3D게임을 개발할때 당신은 모델에 변화를 주고 싶을때가 있을겁니다.
만약 생성한 모델이 메쉬로 구성됬다면 당신은 getMeshByIndex() getMeshByName()메서드로 메쉬데이터에 액세스 할수 있습니다.
그다음에 컨트롤하고 싶은것을 컨트롤하면 됩니다.
예를 들면 캐릭터의 무기 혹은 옷을 변경하고 싶을때 사용합니다.
자켓을 입은 캐릭터를 예로 들겠습니다:
우린 메쉬 개체를 사용하여 자켓을 변경할겁니다.아래는 예제 코드입니다.
C++
auto sprite = Sprite3D::create("ReskinGirl.c3b");
// display the first coat
auto girlTop0 = sprite->getMeshByName("Girl_UpperBody01");
girlTop0->setVisible(true);
auto girlTop1 = sprite->getMeshByName("Girl_UpperBody02");
girlTop1->setVisible(false);
// swap to the second coat
girlTop0->setVisible(false);
girlTop1->setVisible(true);
효과:
출처: <http://cocos2d-x.org/docs/cocos2d-x/zh/3d/sprite3d.html>
'Cocos2d-x v3.17 > 고급 기능' 카테고리의 다른 글
[Cocos2d-x 고급기능]카메라 (0) | 2018.08.11 |
---|---|
[Cocos2d-x 고급기능]3D 애니메이션 (0) | 2018.08.11 |
[Cocos2d-x 고급기능]마우스 이벤트,커스텀 이벤트 (0) | 2018.08.11 |
[Cocos2d-x 고급기능]키보드 이벤트,가속도계 이벤트 (0) | 2018.08.11 |
[Cocos2d-x 고급기능]이벤트 발생 매커니즘 우선순위 및 터치이벤트 (0) | 2018.08.11 |