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

OpenGL 默认的坐标原点是屏幕的正中心,而cocos2dx是如何将屏幕的左下角作为原点的呢?

猜测是设置了摄像机

结果猜测对了!

1.AppController.mm  didFinishLaunchingWithOptions

Image(5)

2.Director.cpp  setOpenGLView

Image(6)

3. Director::setGLDefaultValues

Image(7)

4. void Director::setProjection(Projection projection) 所有的一切都在这里面了

需要说明的是 参数 projection是 Projection::_3D  而不是想象中的 Projection::_2D  所以最终执行的代码

Image(8)

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

Image(9)

在这里摄像机的位置在

Image(10)

因为摄像机的位置在颈托屏幕正中心的Z轴上,而因为摄像机的目标点和投影的结合,决定了如图所示的视锥体结构,这样就保证了我们看到的一切都在屏幕上喽

而因为2D游戏的摄像机基本是不变的,所以此处提前 投影矩阵 * 摄像机矩阵,并将结果保存在了Director的

_projectionMatrixStack   中,

这样后续使用该矩阵 * 模型本身的矩阵(世界坐标系决定了位置,Model中的各个点需要渲染,就需要将各个点转变为世界坐标,而各个点基本都是相对于Model自己原点的坐标),再紧跟 * Model中的各个点,就可以方便的计算出来需要渲染的点的位置了,也就是完成了流程

model点 ->  经过模型矩阵 -> 转变为世界坐标系的点 -> 摄像机矩阵 -> 转变为了可见的视锥体内部可见要素 -> 投影矩阵 -> 将3D的内容渲染到2D的平面上了。

而最后两步操作 摄像机和投影矩阵的转变,在这里直接进行了合并,也就是说我们在使用的过程中,只需要掌控好模型自己在世界坐标系的相对关系就可以了(模型矩阵)。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值