Cocos 3.7 beta0 camera 3d rotation problem ( not rotating as expected )

i try to make simple as in the NavMeshTest camera rotation on the X around the mesh that in the center ( simple cube)
taking the NavMeshTest.cpp example i implemented it like this :

bool HelloWorld::init()
{
    //////////////////////////////
    // 1. super init first
    if ( !Layer::init() )
    {
        return false;
    }
	
    Size visibleSize = Director::getInstance()->getVisibleSize();
    Vec2 origin = Director::getInstance()->getVisibleOrigin();
	_angle = 0.0f;
	auto floor = cocos2d::Sprite3D::create("models/converted/floor.c3b");
	floor->setScale(20);
	floor->setNormalizedPosition(Vec2(.5f, .3f));
	floor->setPositionZ(-120);
	floor->setRotation3D(Vec3(50, 180, 0));
	floor->setGlobalZOrder(-1);

	this->addChild(floor);

	auto robo = cocos2d::Sprite3D::create("models/converted/robo.c3b");
	robo->setScale(20);
	robo->setNormalizedPosition(Vec2(.5f, .3f));
	robo->setPositionZ(-20);
	robo->setRotation3D(Vec3(50, 0, 180));
	robo->setGlobalZOrder(-1);

	this->addChild(robo);

	_camera = Camera::createPerspective(60, visibleSize.width / visibleSize.height, 10, 1000);
	_camera->setPosition3D(Vec3(0.0f, 50.0f, 100.0f));
	_camera->lookAt(Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 1.0f, 0.0f));
	_camera->setCameraFlag(CameraFlag::USER1);
	this->addChild(_camera);
    
	auto listener = EventListenerTouchAllAtOnce::create();
	listener->onTouchesBegan = CC_CALLBACK_2(HelloWorld::onTouchesBegan, this);
	listener->onTouchesMoved = CC_CALLBACK_2(HelloWorld::onTouchesMoved, this);
	listener->onTouchesEnded = CC_CALLBACK_2(HelloWorld::onTouchesEnded, this);
	_eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);	 
	scheduleUpdate();
    
    return true;
}
void HelloWorld::onTouchesBegan(const std::vector<cocos2d::Touch*>& touches, cocos2d::Event *event)
{
	 
	 touchesBegan(touches, event);
}
void HelloWorld::onTouchesMoved(const std::vector<cocos2d::Touch*>& touches, cocos2d::Event *event)
{
	if (touches.size() && _camera)
	{
		auto touch = touches[0];
		auto delta = touch->getDelta();

		_angle -= CC_DEGREES_TO_RADIANS(delta.x);
		CCLOGWARN("_angle:%f", _angle);
		_camera->setPosition3D(Vec3(100.0f * sinf(_angle), 50.0f, 100.0f * cosf(_angle)));
		CCLOGWARN("100.0f * sinf(_angle):%f", (100.0f * sinf(_angle)));
		_camera->lookAt(Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 1.0f, 0.0f));

		 
	}
	 touchesMoved(touches, event);
}
void HelloWorld::onTouchesEnded(const std::vector<cocos2d::Touch*>& touches, cocos2d::Event *event)
{
	 touchesEnded(touches, event);
}
void HelloWorld::touchesEnded(const std::vector<cocos2d::Touch*>& touches, cocos2d::Event *event)
{
	 
	if (!touches.empty()){
		auto touch = touches[0];
		auto location = touch->getLocationInView();
		Vec3 nearP(location.x, location.y, 0.0f), farP(location.x, location.y, 1.0f);

		auto size = Director::getInstance()->getWinSize();
		_camera->unproject(size, &nearP, &nearP);
		_camera->unproject(size, &farP, &farP);
	}
}
void HelloWorld::update(float delta)
{
	 
}

the problem is that the camera is not moving Or at list i dont see any effect in the rendered screen when i move the mouse right or left .

the print log of the engine do print me changing values so i know there is somekind of movement

HelloWorld::onTouchesMoved : _angle:-0.069697
HelloWorld::onTouchesMoved : 100.0f * sinf(_angle):-6.964058
HelloWorld::onTouchesMoved : _angle:-0.139396
HelloWorld::onTouchesMoved : 100.0f * sinf(_angle):-13.894519
HelloWorld::onTouchesMoved : _angle:-0.174243
HelloWorld::onTouchesMoved : 100.0f * sinf(_angle):-17.336277
HelloWorld::onTouchesMoved : _angle:-0.226516
HelloWorld::onTouchesMoved : 100.0f * sinf(_angle):-22.458406
HelloWorld::onTouchesMoved : _angle:-0.296215
HelloWorld::onTouchesMoved : 100.0f * sinf(_angle):-29.190248
HelloWorld::onTouchesMoved : _angle:-0.400766
HelloWorld::onTouchesMoved : 100.0f * sinf(_angle):-39.012398
HelloWorld::onTouchesMoved : _angle:-0.487887
HelloWorld::onTouchesMoved : 100.0f * sinf(_angle):-46.876030
HelloWorld::onTouchesMoved : _angle:-0.627285
HelloWorld::onTouchesMoved : 100.0f * sinf(_angle):-58.694851
HelloWorld::onTouchesMoved : _angle:-0.766683
HelloWorld::onTouchesMoved : 100.0f * sinf(_angle):-69.375008
HelloWorld::onTouchesMoved : _angle:-0.923502
HelloWorld::onTouchesMoved : 100.0f * sinf(_angle):-79.771843
HelloWorld::onTouchesMoved : _angle:-1.097752
HelloWorld::onTouchesMoved : 100.0f * sinf(_angle):-89.018555
HelloWorld::onTouchesMoved : _angle:-1.254571
HelloWorld::onTouchesMoved : 100.0f * sinf(_angle):-95.041618
HelloWorld::onTouchesMoved : _angle:-1.428817
HelloWorld::onTouchesMoved : 100.0f * sinf(_angle):-98.993782
HelloWorld::onTouchesMoved : _angle:-1.620488
HelloWorld::onTouchesMoved : 100.0f * sinf(_angle):-99.876556
HelloWorld::onTouchesMoved : _angle:-1.759886
HelloWorld::onTouchesMoved : 100.0f * sinf(_angle):-98.217575
HelloWorld::onTouchesMoved : _angle:-1.916710
HelloWorld::onTouchesMoved : 100.0f * sinf(_angle):-94.076591
HelloWorld::onTouchesMoved : _angle:-2.056103
HelloWorld::onTouchesMoved : 100.0f * sinf(_angle):-88.453171
HelloWorld::onTouchesMoved : _angle:-2.195502
HelloWorld::onTouchesMoved : 100.0f * sinf(_angle):-81.113541
HelloWorld::onTouchesMoved : _angle:-2.300048
HelloWorld::onTouchesMoved : 100.0f * sinf(_angle):-74.567329
HelloWorld::onTouchesMoved : _angle:-2.422020
HelloWorld::onTouchesMoved : 100.0f * sinf(_angle):-65.906319
HelloWorld::onTouchesMoved : _angle:-2.526571
HelloWorld::onTouchesMoved : 100.0f * sinf(_angle):-57.697617
HelloWorld::onTouchesMoved : _angle:-2.718242
HelloWorld::onTouchesMoved : 100.0f * sinf(_angle):-41.081722
HelloWorld::onTouchesMoved : _angle:-2.909913
HelloWorld::onTouchesMoved : 100.0f * sinf(_angle):-22.961233
HelloWorld::onTouchesMoved : _angle:-3.084159
HelloWorld::onTouchesMoved : 100.0f * sinf(_angle):-5.740242
HelloWorld::onTouchesMoved : _angle:-3.171279
HelloWorld::onTouchesMoved : 100.0f * sinf(_angle):2.968218
HelloWorld::onTouchesMoved : _angle:-3.240983
HelloWorld::onTouchesMoved : 100.0f * sinf(_angle):9.922632
HelloWorld::onTouchesMoved : _angle:-3.345529
HelloWorld::onTouchesMoved : 100.0f * sinf(_angle):20.252573
HelloWorld::onTouchesMoved : _angle:-3.415228
HelloWorld::onTouchesMoved : 100.0f * sinf(_angle):27.023298
HelloWorld::onTouchesMoved : _angle:-3.467501
HelloWorld::onTouchesMoved : 100.0f * sinf(_angle):32.016960
HelloWorld::onTouchesMoved : _angle:-3.519774
HelloWorld::onTouchesMoved : 100.0f * sinf(_angle):36.923115
HelloWorld::onTouchesMoved : _angle:-3.554621
HelloWorld::onTouchesMoved : 100.0f * sinf(_angle):40.138508
HelloWorld::onTouchesMoved : _angle:-3.589473
HelloWorld::onTouchesMoved : 100.0f * sinf(_angle):43.305595
HelloWorld::onTouchesMoved : _angle:-3.624321
HelloWorld::onTouchesMoved : 100.0f * sinf(_angle):46.419704
HelloWorld::onTouchesMoved : _angle:-3.641747
HelloWorld::onTouchesMoved : 100.0f * sinf(_angle):47.956055
HelloWorld::onTouchesMoved : _angle:-3.641747
HelloWorld::onTouchesMoved : 100.0f * sinf(_angle):47.956055

what am i missing here ?

also when i look at the Camera3DTests.cpp example
i see differnte method to rotate camera am talking on line 123

 _lis->onTouchMoved = [this](Touch* t, Event* e) {
        float dx = t->getDelta().x;
        Vec3 rot = _camControlNode->getRotation3D();
        rot.y += dx;
        _camControlNode->setRotation3D(rot);

        Vec3 worldPos;
        _camNode->getNodeToWorldTransform().getTranslation(&worldPos);

        Camera::getDefaultCamera()->setPosition3D(worldPos);
        Camera::getDefaultCamera()->lookAt(_camControlNode->getPosition3D());
    };

and line 58 that build some kind of node relationship

_camControlNode = Node::create();
    _camControlNode->setNormalizedPosition(Vec2(.5,.5));
    addChild(_camControlNode);

    _camNode = Node::create();
    _camNode->setPositionZ(Camera::getDefaultCamera()->getPosition3D().z);
    _camControlNode->addChild(_camNode);

so what is the right way ?

Hi Meir_yanovich,

Node has a property named cameraMask, which determines which camera can see this Node. So you should call robo->setCameraMask((unsigned short) CameraFlag::USER1); if you want it can be seen by camera with CameraFlag::USER1.

The two methods listed by you can both make the camera work. lookAt is suitable to make the camera rotate along a target. You can calculate the camera position then look at the target, lookAt will compute the right rotation for you. You can also setRotation by yourself if you do not have a target.

Thanks for your replay , but wired thing happen while i add what you suggested ,
now it looks like the model is rotating around the camera and not the way around camera around the model

UPDATE
well after commeting those lines:
//floor->setNormalizedPosition(Vec2(.5f, .3f));
//floor->setPositionZ(-120);
//floor->setRotation3D(Vec3(50, 180, 0));
//floor->setGlobalZOrder(-1);

and also :
/robo->setNormalizedPosition(Vec2(.5f, .3f));
robo->setPositionZ(-20);
robo->setRotation3D(Vec3(50, 0, 180));
robo->setGlobalZOrder(-1);
/

now it is working like it supposed to , but i don’t know the reason why , why after positioning the models it dos’t work

There are something wrong about your above code.

It should be like this,

//suppose that you are going to rotate around robo. 
_camera->setPosition3D(robo->getPosition3D() + Vec3(100.0f * sinf(_angle), 50.0f, 100.0f * cosf(_angle)));
		CCLOGWARN("100.0f * sinf(_angle):%f", (100.0f * sinf(_angle)));
		_camera->lookAt(robo->getPosition3D(), Vec3(0.0f, 1.0f, 0.0f));

Thanks , now i see ,
by the way once i added :

robo->setCameraMask((unsigned short)CameraFlag::USER1);

so now both models are connected to the camera everything works as supposed to , but i dont sure its the right way .
but your fix is logical .