28#include "3d/CCBillBoard.h"
31#include "../testResource.h"
35using namespace cocos2d::ui;
38BillBoardTests::BillBoardTests()
51 auto root = Sprite3D::create();
52 root->setPositionNormalized(Vec2(0.5f,0.25f));
55 auto model = Sprite3D::create(
"Sprite3DTest/orc.c3b");
57 model->setRotation3D(Vec3(0.0f,180.0f,0.0f));
58 root->addChild(model);
60 auto bill = BillBoard::create();
61 bill->setPosition(0, 120);
64 auto sp = Sprite::create(
"Images/SpookyPeas.png");
68 auto lbl = Label::create();
69 lbl->setPosition(0.0f, 30.0f);
70 lbl->setString(
"+100");
73 auto r = RotateBy::create(10, Vec3(0.0f,360.0f,0.0f));
74 auto rp = RepeatForever::create(r);
77 auto jump = JumpBy::create(1, Vec2(0.0f, 0.0f), 30, 1);
78 auto scale = ScaleBy::create(2.f, 2.f, 2.f, 0.1f);
79 auto seq = Sequence::create(jump,scale, NULL);
81 auto rot = RotateBy::create(2, Vec3(-90.0f, 0.0f, 0.0f));
82 auto act = Spawn::create(seq, rot,NULL);
84 auto scale2 = scale->reverse();
85 auto rot2 = rot->reverse();
86 auto act2 = Spawn::create(scale2, rot2, NULL);
88 auto seq2 = Sequence::create(act, act2, NULL);
89 auto repeat = RepeatForever::create(seq2);
90 model->runAction(repeat);
100 return "Rotation Test";
105 return "All the sprites should still facing camera";
117 auto listener = EventListenerTouchAllAtOnce::create();
119 _eventDispatcher->addEventListenerWithSceneGraphPriority(listener,
this);
121 auto layer3D=Layer::create();
124 auto s = Director::getInstance()->getWinSize();
127 _camera=Camera::createPerspective(60, (
float)s.width/s.height, 1, 500);
128 _camera->setCameraFlag(CameraFlag::USER1);
133 std::string imgs[3] = {
"Images/Icon.png",
"Images/r2.png"};
134 for (
unsigned int i = 0; i < 4; ++i)
136 Layer *layer = Layer::create();
137 auto billboard = BillBoard::create(imgs[(
unsigned int)(CCRANDOM_0_1() * 1 + 0.5f)]);
138 billboard->setScale(0.5f);
139 billboard->setPosition3D(Vec3(0.0f, 0.0f, CCRANDOM_MINUS1_1() * 150.0f));
140 billboard->setOpacity(
static_cast<uint8_t
>(CCRANDOM_0_1() * 128 + 128));
142 layer->addChild(billboard);
144 layer->runAction( RepeatForever::create( RotateBy::create( CCRANDOM_0_1() * 10, Vec3(0.0f, 45.0f, 0.0f) ) ) );
148 auto billboard = BillBoard::create(
"Images/Icon.png");
149 billboard->setScale(0.2f);
150 billboard->setPosition3D(Vec3(0.0f, 30.0f, 0.0f));
152 auto billboard2 = BillBoard::create(
"Images/r2.png");
153 billboard2->setPosition3D(Vec3(0.0f, 0.0f, 100.0f));
154 billboard->addChild(billboard2);
158 auto sprite3d = Sprite3D::create(
"Sprite3DTest/orc.c3t");
159 sprite3d->setScale(2.0f);
160 sprite3d->addChild(billboard);
161 sprite3d->runAction( RepeatForever::create( RotateBy::create( 10.0f, Vec3(0.0f, 360.0f, 0.0f) ) ) );
177 _camera->setPosition3D(Vec3(0.0f, 100.0f, 230.0f));
178 _camera->lookAt(Vec3(0,0,0), Vec3(0.0f,1.0f,0.0f));
180 TTFConfig ttfConfig(
"fonts/arial.ttf", 16);
181 auto label1 = Label::createWithTTF(ttfConfig,
"rotate+");
183 auto label2 = Label::createWithTTF(ttfConfig,
"rotate-");
185 auto menu = Menu::create(menuItem1, menuItem2,
nullptr);
186 menu->setPosition(Vec2::ZERO);
192 label1 = Label::createWithTTF(ttfConfig,
"Point Oriented");
194 label2 = Label::createWithTTF(ttfConfig,
"Plane Oriented");
199 menu = Menu::create(menuItem1, menuItem2,
nullptr);
200 menu->setPosition(Vec2(0,0));
201 this->addChild(menu, 10);
210 billboard->setMode(BillBoard::Mode::VIEW_POINT_ORIENTED);
217 billboard->setMode(BillBoard::Mode::VIEW_PLANE_ORIENTED);
230 return "BillBoard Test";
238 std::string imgs[3] = {
"Images/Icon.png",
"Images/r2.png"};
239 for (
unsigned int i = 0; i < 10; ++i)
241 auto billboard = BillBoard::create(imgs[(
unsigned int)(CCRANDOM_0_1() * 1 + 0.5f)]);
242 billboard->setScale(0.5f);
243 billboard->setPosition3D(Vec3(p.x, p.y, -150.0f + 30 * i));
244 billboard->setOpacity(
static_cast<uint8_t
>(CCRANDOM_0_1() * 128 + 128));
252 for (
unsigned int i = 0; i < 10; ++i)
254 auto billboardAni = BillBoard::create(
"Images/grossini.png");
255 billboardAni->setScale(0.5f);
256 billboardAni->setPosition3D(Vec3(p.x, p.y, -150.0f + 30 * i));
259 auto animation = Animation::create();
260 for(
int i=1;i<15;i++)
262 char szName1[100] = {0};
263 sprintf(szName1,
"Images/grossini_dance_%02d.png", i);
264 animation->addSpriteFrameWithFile(szName1);
267 animation->setDelayPerUnit(2.8f / 14.0f);
268 animation->setRestoreOriginalFrame(
true);
270 auto action = Animate::create(animation);
271 billboardAni->runAction(RepeatForever::create(action));
272 billboardAni->setOpacity(
static_cast<uint8_t
>(CCRANDOM_0_1() * 128 + 128));
282 if(touches.size()==1)
284 auto touch = touches[0];
285 auto location = touch->getLocation();
286 auto PreviousLocation = touch->getPreviousLocation();
287 Point newPos = PreviousLocation - location;
291 _camera->getNodeToWorldTransform().getForwardVector(&cameraDir);
292 cameraDir.normalize();
294 _camera->getNodeToWorldTransform().getRightVector(&cameraRightDir);
295 cameraRightDir.normalize();
297 Vec3 cameraPos=
_camera->getPosition3D();
298 cameraPos+=cameraDir*newPos.y*0.5;
299 cameraPos+=cameraRightDir*newPos.x*0.5;
300 _camera->setPosition3D(cameraPos);
306 Vec3 rotation3D=
_camera->getRotation3D();
307 rotation3D.y+= value;
308 _camera->setRotation3D(rotation3D);
#define ADD_TEST_CASE(__className__)
virtual std::string subtitle() const override
virtual ~BillBoardRotationTest()
virtual std::string title() const override
virtual void update(float dt) override
void menuCallback_orientedPlane(cocos2d::Ref *sender)
cocos2d::Camera * _camera
cocos2d::Layer * _layerBillBoard
virtual std::string subtitle() const override
void onTouchesMoved(const std::vector< cocos2d::Touch * > &touches, cocos2d::Event *event)
virtual std::string title() const override
void addNewBillBoardWithCoords(cocos2d::Vec3 p)
std::vector< cocos2d::BillBoard * > _billboards
void addNewAniBillBoardWithCoords(cocos2d::Vec3 p)
void menuCallback_orientedPoint(cocos2d::Ref *sender)
void rotateCameraCallback(cocos2d::Ref *sender, float value)
static cocos2d::Vec2 top()