您的位置:首页 > 其它

06-世界坐标系的原点为什么是左下角而不是屏幕中心

2015-11-10 19:04 369 查看
OpenGL 默认的坐标原点是屏幕的正中心,而cocos2dx是如何将屏幕的左下角作为原点的呢?
猜测是设置了摄像机
结果猜测对了!
1.AppController.mm  didFinishLaunchingWithOptions



2.Director.cpp  setOpenGLView



3. Director::setGLDefaultValues



4. void Director::setProjection(Projection projection) 所有的一切都在这里面了
需要说明的是 参数 projection是 Projection::_3D  而不是想象中的 Projection::_2D  所以最终执行的代码



而最终决定显示的坐标原点在左下角的原因是



在这里摄像机的位置在



因为摄像机的位置在颈托屏幕正中心的Z轴上,而因为摄像机的目标点和投影的结合,决定了如图所示的视锥体结构,这样就保证了我们看到的一切都在屏幕上喽
而因为2D游戏的摄像机基本是不变的,所以此处提前 投影矩阵 * 摄像机矩阵,并将结果保存在了Director的
_projectionMatrixStack   中,
这样后续使用该矩阵 * 模型本身的矩阵(世界坐标系决定了位置,Model中的各个点需要渲染,就需要将各个点转变为世界坐标,而各个点基本都是相对于Model自己原点的坐标),再紧跟 * Model中的各个点,就可以方便的计算出来需要渲染的点的位置了,也就是完成了流程
model点 ->  经过模型矩阵 -> 转变为世界坐标系的点 -> 摄像机矩阵 -> 转变为了可见的视锥体内部可见要素 -> 投影矩阵 -> 将3D的内容渲染到2D的平面上了。
而最后两步操作 摄像机和投影矩阵的转变,在这里直接进行了合并,也就是说我们在使用的过程中,只需要掌控好模型自己在世界坐标系的相对关系就可以了(模型矩阵)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: