cocos2d-x의 Sprite3D로 3D 모델의 회전축 변경
Sprite3D
를 사용하여 우연히 발견 된 광적인 발견을 공유3DSprite
예를 들어, 기어와 같은 모델을 표시하고 회전시키고 싶습니다.
모형은 Blender에서 창조했다.
Size visibleSize = Director::getInstance()->getVisibleSize();
auto gear = Sprite3D::create("model/gear.obj");
gear->setPosition(visibleSize.width / 2.0, visibleSize.height / 2.0);
auto rotation = RotateBy::create(10, Vec3(0, 360, 0));
gear->runAction(RepeatForever::create(rotation));
this->addChild(gear);
잘 회전하다
문제: 기울어진 모델을 회전시키면 축이 이상해집니다.
그러나, 이대로라면 보기 좋지 않기 때문에, 재밌게 기어를 기울여 회전하도록 하고 싶다.
그쪽이 입체감이 나와 멋지다.
Size visibleSize = Director::getInstance()->getVisibleSize();
auto gear = Sprite3D::create("model/gear.obj");
gear->setPosition(visibleSize.width / 2.0, visibleSize.height / 2.0);
// X軸、Z軸に対して30度ずつ回転
gear->setRotation3D(Vec3(30, 0, 30));
auto rotation = RotateBy::create(10, Vec3(0, 360, 0));
gear->runAction(RepeatForever::create(rotation));
this->addChild(gear);
돌지만 아무래도 회전축이 이상하다!
모델 자체의 Y축이 아니라 절대 좌표의 Y축이 회전축으로 사용되어 버린 것 같은 거동을 한다. 이것이 아니야!
해결책
안의 코드 봐, 어떻게든 해결하지 않을까나, PR 보낼까라고 생각하고 있었습니다만, 좀처럼 손에 지지 않고.
이것은 어려운 문제라고 생각했고, 의외로 간단한 방법으로 해결했다.
Size visibleSize = Director::getInstance()->getVisibleSize();
auto gear = Sprite3D::create("model/gear.obj");
// 空の親ノードを作る
auto wrapper = Node::create();
wrapper->setPosition(visibleSize.width / 2.0, visibleSize.height / 2.0);
// 親ノードを回転させる
wrapper->setRotation3D(Vec3(30, 0, 30));
auto rotation = RotateBy::create(10, Vec3(0, 360, 0));
// 回転アニメーションは歯車に付ける
gear->runAction(RepeatForever::create(rotation));
wrapper->addChild(gear);
this->addChild(wrapper);
잘 갔다!
빈 노드를 만들고, 그 쪽을 회전시킨 후, 자식 노드에 회전 애니메이션을 적응시키면 잘 했다.
Unity등으로 잘 하는, Empty GameObject로 모델을 랩 해 회전시키는, 같은 테크닉이 거의 그대로 사용할 수 있는 것 같다.
position3D
이나 rotation3D
는, 왜인가 Sprite3D
는 아니고 Node
의 메소드가 되어 있었던 것은 이런 일이었던 것일까.아무래도 좋지만,
cocos2d::Sprite3D
같은 네임스페이스 기분 나쁘네요. 3D 기능이 충실하면 분리되는 것인가······.
Reference
이 문제에 관하여(cocos2d-x의 Sprite3D로 3D 모델의 회전축 변경), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/giginet/items/f043bc49bebc0847d6b7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)