고급 주제
BillBoard
빌보드는 특별한 스프라이트 개체 입니다.
이것은 항상 카메라와 마주보고 있고 카메라가 회전하면 빌보드도 같이 회전합니다.
빌보드는 3D게임에서 굉장히 자주 사용됩니다.
예를들면 3D캐릭터 머리에 있는 문자,HP바,나무,바위같은것들을 빌보드로 구현합니다.
아래는 카메라와 빌보드의 원리입니다.
Sprite는 Billboard의 부모클래스 입니다.
따라서 빌보드의 대부분의 기능은 Sprite와 같습니다.
아래의 방식을 사용해서 빌보드를 생성할수 있습니다.
C++
auto billboard = BillBoard::create("Blue_Front1.png", BillBoard::Mode::VIEW_POINT_ORIENTED);
빌보드의 모드를 변경하여 빌보드면이 카메라의 XOY평면에 향하고 싶다면 아래와 같이 생성하세요.
C++
auto billboard = BillBoard::create("Blue_Front1.png", BillBoard::Mode::VIEW_PLANE_ORIENTED);
빌보드의 두번째 매개변수로 빌보드의 모드를 결정할수 있습니다.
두 종류의 모드가 있고 아래에서 설명하겠습니다.
VIEW_POINT_ORIENTED 빌보드가 카메라가 위치한 점에 따라 반응합니다
예시:
VIEW_PLANE_ORIENTED 빌보드가 카메라가 위치한 평면에 따라 반응합니다:
당신은 다른 평범한 객체처럼 빌보드를 컨트롤할수 있습니다.
예를들면 스케일,회전,위치 같은것들을 말이죠.
C++
billboard->setScale(0.5f);
billboard->setPosition3D(Vec3(0.0f, 0.0f, 0.0f));
billboard->setBlendFunc(BlendFunc::ALPHA_NON_PREMULTIPLIED);
addChild(billboard);
3D파티클 시스템
우리는 7장에서 2D파티클 을 사용하는 방법에 대해 배웠습니다.
3D게임을 제작할때 게임의 효과를 추가하기 위해서 당신은 3D파티클이 필요할수도 있습니다.
3D파티클시스템과 2D파티클 시스템은 기본 개념은 똑같습니다.
Cocos2d-x는 Particle Universe 이라는 제작도구를 지원하여 파티클을 만들수 있습니다.
Particle Universe 는 특별한 파티클 편집기입니다.당신이 빠르고 쉽게 각종 파티클효과(폭발,화염,혈액)를 만들수 있도록 도와줍니다.
Particle Universe파티클 편집기가 제작한 파일포맷은 .pu 파일인데 Cocos2d-x에서 호환가능합니다.
PuParticleSystem3D클래스가 처리해줍니다.
PUParticleSystem3D는 두가지의 생성방법이 있습니다.
첫번째 방법은 두개의 매개변수를 사용합니다.
Particle Universe 파티클파일은 대응되는 매터리얼 파일이 있습니다.매터리얼은 파티클 효과에 필요한 파티클의 내용데이터가 있습니다.
예시:
C++
auto ps = PUParticleSystem3D::create("lineStreak.pu", "pu_mediapack_01.material");
ps->startParticleSystem();
this->addChild(ps);
두번쨰 방법은 하나의 매개변수 Particle Universe포맷 파일이름을 넘겨주면 내부적으로 파티클파일 이름과 같은 매터리얼 파일이 모두 자동으로 로드됩니다.
예)
C++
auto ps = PUParticleSystem3D::create("electricBeamSystem.pu");
ps->startParticleSystem();
this->addChild(ps);
주의: 두번쨰 방법을 사용하면 로드시간이 증가되고 메모리 사용량이 많아질수 있습니다.만약 당신이 사용할 재질을 알고있다면 첫번째 방법을 사용하십시오.
아래는 Particle Universe에서 파티클이고 그다음은 Cocos2d-x에서 실행한 파티클 효과.
게임내에서 파티클효과를 읽어오는걸 마쳤다면 간단한 조작을 통해 파티클 시작,정지,일시정지,리셋,그리고 파티클 입자의 총갯수를 알아오는법을 배워봅시다.
C++
virtual void startParticleSystem() override;
virtual void stopParticleSystem() override;
virtual void pauseParticleSystem() override;
virtual void resumeParticleSystem() override;
virtual int getAliveParticleCount() const override;
PUParticleSystem3D 은 Node 개체에서 파생되었습니다.
따라서 생성한 파티클에 Action과 Sequence를 추가할수 있습니다.
예시:
C++
auto ps = PUParticleSystem3D::create("blackHole.pu", "pu_mediapack_01.material");
ps->setPosition(-25.0f, 0.0f);
auto moveby = MoveBy::create(2.0f, Vec2(50.0f, 0.0f));
auto moveby1 = MoveBy::create(2.0f, Vec2(-50.0f, 0.0f));
ps->runAction(RepeatForever::create(Sequence::create(moveby, moveby1, nullptr)));
ps->startParticleSystem();
Action과 Sequence를 조합하여 블랙홀 효과를 얻을수 있습니다.
AttachNode 를 사용하여 파티클을 다른 3D모델에 바인딩할수 있습니다.
예시:
C++
auto sprite3d = Sprite3D::create("orc.c3b");
sprite3d->setPosition3D(Vec3(0.0f, 0.0f, 0.0f));
sprite3d->setRotation3D(Vec3(0.0f, 180.0f, 0.0f));
auto animation = Animation3D::create("orc.c3b");
if (animation)
{
auto animate = Animate3D::create(animation);
sprite3d->runAction(RepeatForever::create(animate));
}
auto handler = PUParticleSystem3D::create("lightningBolt.pu");
handler->startParticleSystem();
sprite3d->getAttachNode("Bip001 L Hand")->addChild(handler);
this->addChild(sprite3d);
출처: <http://cocos2d-x.org/docs/cocos2d-x/zh/3d/advanced.html>
'Cocos2d-x v3.17 > 고급 기능' 카테고리의 다른 글
[Cocos2d-x 고급기능]물리엔진 소개 및 용어 (0) | 2018.08.11 |
---|---|
[Cocos2d-x 고급기능]스크립트 사용하기 (0) | 2018.08.11 |
[Cocos2d-x 고급기능]3D환경에서 자주 사용하는 툴 (2) | 2018.08.11 |
[Cocos2d-x 고급기능]지형 Terrain (0) | 2018.08.11 |
[Cocos2d-x 고급기능]Light (0) | 2018.08.11 |