본문 바로가기

Cocos2d-x v3.17/고급 기능

[Cocos2d-x 고급기능]3D 지원 및 3D Sprite

반응형

    3D 지원

    당신은 Cocos2d-x 2D게임엔진이라고 생각할수 있습니다.하지만 3.0버전부터 3D기능도 추가되었습니다.

    3D 게임개발은 당신에게 있어 생소할겁니다.

    3D게임에서 사용되는 용어도 익숙하지 않을것이고 사용되는 툴들도 모를겁니다.

    하지만 걱정하지 마세요.

    우선 용어부터 알아가봅시다

    .

    용어

    3D게임 개발에 앞서 먼저 관련 용어 부터 익숙해져봅시다.

    • Model(모델) - 모델입니다.여러개의 다각형으로 이뤄져있고 Cocos2d-x중에선 Sprite3D 사용됩니다.

    • 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(03600));

    //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>

     



반응형