虽然每个ccnode都有一个摄像机,但是一个场景应该就一个opengl摄像机
CCCamera* camera = g_pScene->getCamera();
float eyeZ = CCCamera::getZEye();
camera->setEyeXYZ(mLastEyeX, 0, eyeZ);
camera->setCenterXYZ(mLastEyeX, 0, 0);
- 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坐标,让摄像机跟随人物移动:
- mLastEyeX = mRunner->getRunnerPX() - mRunner->getOffsetPx();
- CCCamera* camera = this->getCamera();
- float eyeZ = CCCamera::getZEye();
- camera->setEyeXYZ(mLastEyeX, 0, eyeZ);
- camera->setCenterXYZ(mLastEyeX, 0, 0);