1. 程式人生 > >06-世界座標系的原點為什麼是左下角而不是螢幕中心

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的平面上了。

而最後兩步操作 攝像機和投影矩陣的轉變,在這裡直接進行了合併,也就是說我們在使用的過程中,只需要掌控好模型自己在世界座標系的相對關係就可以了(模型矩陣)。