地图随主角移动

来源:互联网 发布:天天酷跑挂刷钻石软件 编辑:程序博客网 时间:2024/04/28 15:48

 虽然每个ccnode都有一个摄像机,但是一个场景应该就一个opengl摄像机 


CCCamera* camera = g_pScene->getCamera();  
float eyeZ = CCCamera::getZEye();  
camera->setEyeXYZ(mLastEyeX, 0, eyeZ);  
camera->setCenterXYZ(mLastEyeX, 0, 0);  


[cpp] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. void gluLookAt(GLdouble eyex,GLdouble eyey,GLdouble eyez,GLdouble centerx,GLdouble centery,GLdouble centerz,GLdouble upx,GLdouble upy,GLdouble upz);  

第一组eyex, eyey,eyez 相机在世界坐标的位置
第二组centerx,centery,centerz 目标参考物体在世界坐标的位置
第三组upx,upy,upz 相机竖直方向在世界坐标中的方向向量


你把相机想象成为你自己的脑袋:
第一组数据就是脑袋的位置
第二组数据就是眼睛看的物体的位置
第三组就是头顶朝向的方向(因为你可以歪着头看同一个物体)。

CCCamera的概念跟这个类似。

为什么调整eyez的值可以实现缩放。Z值就是摄像机离物体距离,拿眼睛看一个物体,离物体远,看起来物体小,离物体近,物体看起来大。

这里我们不调整eyez的值,因为不做缩放,用默认就好。

需要调整摄像机X坐标和参考目标的X坐标,让摄像机跟随人物移动:

[cpp] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. mLastEyeX = mRunner->getRunnerPX() - mRunner->getOffsetPx();  
  2. CCCamera* camera = this->getCamera();  
  3. float eyeZ = CCCamera::getZEye();  
  4. camera->setEyeXYZ(mLastEyeX, 0, eyeZ);  
  5. camera->setCenterXYZ(mLastEyeX, 0, 0);  


0 0