我用的是cocos2d-x 3.4final
我场景里面有两个对象,一个是路面一个是车.
路面和车子模型建模的时候都是以xy面为地面进行的(我也试过以xz为路面进行建模然后调整Camera的位置和lookAt位置,结果和以xy为地面是一样的)。
当我把相机设置成从马路这头看向对面那头时车子被路面覆盖住了(见图一,从顶点数可以看出来车子确实是有绘制,只是被路面挡住了)。代码如下:
mCamera = Camera::createPerspective(60, vs.width/vs.height, 0.01, 2600);
mCamera->setCameraFlag(CameraFlag::USER1);
mCamera->setPosition3D(Vec3(vs.width/2, 0, 1100));
mCamera->lookAt(Vec3(vs.width/2,vs.height*3/5,0));
addChild(mCamera);
Sprite3D* test = Sprite3D::create("road.c3b");
test->setPosition3D(Vec3(vs.width/2, vs.height/2, 0));
test->setCameraMask((unsigned int)CameraFlag::USER1);
addChild(test);
Sprite3D* car1 = Sprite3D::create("car1.c3b");
car1->setPosition3D(Vec3(vs.width/2, vs.height/2,42.1));
car1->setCameraMask((unsigned int)CameraFlag::USER1);
addChild(car1);
当我把相机设置成俯视马路这时候车子显示正常了(见图二)。代码如下:
mCamera = Camera::createPerspective(60, vs.width/vs.height, 0.01, 2600);
mCamera->setCameraFlag(CameraFlag::USER1);
mCamera->setPosition3D(Vec3(vs.width/2, vs.height/2, 1100));
mCamera->lookAt(Vec3(vs.width/2,vs.height/2,0));
addChild(mCamera);
//其他代码同上
可以看到,两份代码只有两行有差异,其他全部相同
这是车子被马路覆盖的代码:
mCamera->setPosition3D(Vec3(vs.width/2, 0, 1100));
mCamera->lookAt(Vec3(vs.width/2,vs.height*3/5,0));
这是车子正常显示在马路上面的代码:
mCamera->setPosition3D(Vec3(vs.width/2, vs.height/2, 1100));
mCamera->lookAt(Vec3(vs.width/2,vs.height/2,0));
两份代码我只是改变了一下相机的位置和lookAt的位置显示结果就有这么大的差别我也是晕了,网上关于Camera的教程也只是简单介绍了一下相机的使用,我看了很多篇,感觉相机这个东西用起来挺简单的呀,怎么会有这这种神奇的事情发生呢?
这是Camera的bug还是我没有用对呢?
求大神指点迷津。