<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          3D數(shù)學基礎(chǔ)(一) | 坐標系

          共 4863字,需瀏覽 10分鐘

           ·

          2021-12-18 17:08

          《3D數(shù)學基礎(chǔ):圖形與游戲開發(fā)》

          前言

          白玉無冰決定開一個新坑。再次重讀《3D數(shù)學基礎(chǔ):圖形與游戲開發(fā)》(第一版)。

          結(jié)合Cocos Creator 引擎及其他相關(guān)書籍,整理并記錄一些筆記。

          開始

          坐標系有許多種,本文主要圍繞笛卡兒坐標系(Cartesian Coordinate System)展開。

          摘自《游戲引擎架構(gòu)》

          計算機圖形學第一準則:近似原則。如果它看上去是對的,它就是對的。

          左手坐標系與右手坐標系

          3D坐標系中存在兩種坐標系:左手坐標系和右手坐標系。

          伸出你的雙手,讓拇指(x)、食指(y)和中指(z)相互垂直,就構(gòu)成了相應(yīng)的坐標系。

          左手坐標系與右手坐標系

          ?? OpenGL中的坐標系大體是右手坐標系,而Direct3D中大體是左手坐標系。

          ?? Cocos Creator 3.0 的世界坐標系采用的是笛卡爾右手坐標系,默認 x 向右,y 向上,z 向外,同時使用 -z 軸為正前方朝向。

          Cocos Creator 與右手坐標系

          其中旋轉(zhuǎn)也遵循對應(yīng)左右手法則,伸出雙手,做一個點贊?? 的手勢,拇指指向朝向,四指握著的方向為正。

          旋轉(zhuǎn)與左右手

          ?? Cocos Creator 3.0 中的旋轉(zhuǎn)(Rotation)遵守右手法則,從轉(zhuǎn)向軸往原點看,當屬性值為 正 時,節(jié)點 逆時針 旋轉(zhuǎn)。當屬性值為 負 時,節(jié)點 順時針 旋轉(zhuǎn)。

          Cocos Creator 旋轉(zhuǎn)

          ?? 注意:節(jié)點上的 rotation 屬性是一個四元數(shù),表示的是繞任意軸旋轉(zhuǎn)的角度。與 屬性檢查器 中的 Rotation 所對應(yīng)的屬性是歐拉角屬性 EulerAngles。這兩個屬性可以根據(jù)需求分別使用,在使用 API 時請一定要注意它們和編輯器面板屬性名的對應(yīng)區(qū)別。

          左右手坐標系可以相互轉(zhuǎn)換,只需翻轉(zhuǎn)一個軸的符號。

          翻轉(zhuǎn)一個軸

          世界坐標系

          世界坐標系(World Coordinate)是一個特殊的坐標系,它建立了我們所關(guān)心的最大的空間。

          世界坐標系建立了描述其他坐標系所需要的參考框架。也就是說,能夠用世界坐標系描述其他坐標系的位置,而不能用更大的、外部的坐標系來描述世界坐標系。

          世界坐標系

          世界坐標系也被廣泛稱作全局坐標系或者宇宙坐標系。

          關(guān)于世界坐標系的典型問題都是關(guān)于初始位置和環(huán)境:

          • 每個物體的位置和方向
          • 攝像機的位置和方向
          • 世界中每一個點的地形是什么
          • 各個物體從哪里來,到哪里去(NPC運動策略)

          ?? 世界坐標系也叫做絕對坐標系,在 Cocos Creator 3.0 游戲開發(fā)中表示場景空間內(nèi)的統(tǒng)一坐標體系,「世界」用來表示我們的游戲場景。

          Cocos Creator 世界坐標系

          物體坐標系

          物體坐標系(Local Coordinate)是和特定物體相關(guān)的坐標系。每個物體都有它們獨立的坐標系,當物體移動或改變方向時,和物體相關(guān)的坐標系也會改變。

          某些情況下,物體坐標系也稱為模型坐標系。因為模型頂點的坐標是在模型坐標中描述的。

          ?? 物體坐標系 | 本地坐標系 | 模型坐標系 | 局部坐標系 ?可以看作一個東西多種叫法。

          在物體坐標系中可能遇到的問題:

          • 周圍有相互作用的物體嗎?(我要攻擊它嗎)
          • 哪個方向?在我的前面后面?左邊?右邊?(我應(yīng)該向它射擊??,,還是轉(zhuǎn)身就跑???)
          物體坐標系

          ?? 模型定義的空間叫作局部空間(local space)或模型空間(model space)。OpenGL文檔使用的術(shù)語是物體空間(object space)。

          ?? Creator 3.0 的 節(jié)點(Node) 之間可以有父子關(guān)系的層級結(jié)構(gòu),我們通過修改節(jié)點的 Position 屬性設(shè)定的節(jié)點位置是該節(jié)點相對于父節(jié)點的 本地坐標系,而非世界坐標系。

          Creator 本地坐標系

          ?? 3D美工們在構(gòu)筑3D對象時也在做著類似的事情。他們并不會在全局場景坐標系(即世界空間,也譯為世界坐標系,world space)中構(gòu)建物體的幾何形狀,而是相對于局部坐標系(局部空間,也譯為局部坐標系,local space)來創(chuàng)建物體。

          攝像機坐標系

          攝像機坐標系可被看作是一種特殊的物體坐標系,該物體坐標系就定義在攝像機的屏幕可見區(qū)域。

          攝像機坐標系

          關(guān)于攝像機坐標系的一些典型問題:

          • 3D空間中的某個點是在攝像機的前方嗎?
          • 3D空間中的某個點是在屏幕上,還是超出了攝像機平截面錐體的邊界?(裁剪坐標系)
          • 某個物體是否在屏幕上?是部分在,還是全部不在?
          • 兩個物體,誰在前面?(可見性檢測)
          攝像機坐標系

          ?? 我們?yōu)閿z像機賦予一個局部坐標系(這被稱作觀察空間(view space),也譯作觀察坐標系、視圖空間、視覺空間(eye space)或攝像機空間(camera space))

          ?? ?相機的可視范圍是通過 6 個平面組成一個 視錐體(Frustum) 構(gòu)成,近裁剪面(Near Plane) 和 遠裁剪面(Far Plane) 用于控制近處和遠處的可視距離與范圍,同時它們也構(gòu)成了視口的大小。

          攝像機

          坐標系轉(zhuǎn)換

          坐標變換:知道某一點的坐標,怎樣在另一個坐標系中描述該點。該點并沒有真正移動,而是在不同的坐標系中描述它的位置。

          OpenGL 與 DirectX 坐標系

          通常,坐標系間的變化會用矩陣(先挖個坑,后面再詳細講)表示。

          坐標變換

          ?? 將局部坐標系內(nèi)的坐標轉(zhuǎn)換到全局場景坐標系中的過程叫作世界變換(world transform),所使用的變換矩陣名為世界矩陣(world matrix)

          那么從全局坐標轉(zhuǎn)到局部坐標,就用世界矩陣的逆!

          坐標變換

          ?? 由世界空間至觀察空間的坐標變換稱為取景變換(view transform,也譯作觀察變換、視圖變換等),此變換所用的矩陣則稱為觀察矩陣(view matrix,亦譯作視圖矩陣)。

          攝像機也是屬于局部坐標的一種,也就是說,觀察矩陣 等同于 相機的世界矩陣的逆!

          SRT MVP

          ?? 舉個例子,場景中的有兩個節(jié)點,他們各自有一個子節(jié)點,求其中一個子節(jié)點在另一個子節(jié)點的局部坐標系中的坐標。

          舉個例子

          分三步走,解決上述例子:

          1. 求出B0的世界坐標
          2. 求出A0的世界矩陣的逆
          3. 將上面兩步的結(jié)果相乘
          aW1wb3J0IHsgX2RlY29yYXRvciwgQ29tcG9uZW50LCBOb2RlLCBWZWMzLCB2MywgbWF0NCwgTWF0NCB9IGZyb20gJ2NjJzsKaW1wb3J0IHsgRURJVE9SIH0gZnJvbSAnY2MvZW52JzsKY29uc3QgeyBjY2NsYXNzLCBwcm9wZXJ0eSwgZXhlY3V0ZUluRWRpdE1vZGUgfSA9IF9kZWNvcmF0b3I7Cgpjb25zdCB0ZW1wX21hdDQgPSBtYXQ0KCk7CkBjY2NsYXNzKCdOb2RlRXh0cmFJbmZvJykKQGV4ZWN1dGVJbkVkaXRNb2RlCmV4cG9ydCBjbGFzcyBOb2RlRXh0cmFJbmZvIGV4dGVuZHMgQ29tcG9uZW50IHsKCiAgICBAcHJvcGVydHkKICAgIHByaXZhdGUgX3JlZnJlc2ggPSBmYWxzZTsKICAgIEBwcm9wZXJ0eSh7ZGlzcGxheU5hbWU6ICLliLfmlrAifSkKICAgIGdldCByZWZyZXNoKCkgewogICAgICAgIHJldHVybiB0aGlzLl9yZWZyZXNoOwogICAgfQogICAgc2V0IHJlZnJlc2godmFsdWUpIHsKICAgICAgICB0aGlzLm9uVHJhbnNmb3JtQ2hhbmdlKCkKICAgIH0KCiAgICBAcHJvcGVydHkoeyByZWFkb25seTogdHJ1ZSwgZWRpdG9yT25seTogdHJ1ZSB9KQogICAgQXV0aG9yID0gIueZveeOieaXoOWGsCI7CgogICAgQHByb3BlcnR5KHsgcmVhZG9ubHk6IHRydWUsIGVkaXRvck9ubHk6IHRydWUgfSkKICAgIHdvcmxkUG9zaXRpb246IFZlYzMgPSB2MygpOwoKICAgIEBwcm9wZXJ0eSh7IGVkaXRvck9ubHk6IHRydWUsIGRpc3BsYXlOYW1lOiAi5Zyo6K+l6IqC54K55LiL55qEIiwgdHlwZTogTm9kZSB9KQogICAgb3RoZXJOb2RlOiBOb2RlID0gbnVsbCE7CgogICAgQHByb3BlcnR5KHsgcmVhZG9ubHk6IHRydWUsIGVkaXRvck9ubHk6IHRydWUsIGRpc3BsYXlOYW1lOiAi5Z2Q5qCHIiB9KQogICAgb3RoZXJOb2RlUG9zaXRpb246IFZlYzMgPSB2MygpOwoKICAgIG9uRW5hYmxlKCkgewogICAgICAgIGlmICghRURJVE9SKSByZXR1cm4KICAgICAgICB0aGlzLm9uVHJhbnNmb3JtQ2hhbmdlKCk7CiAgICAgICAgdGhpcy5ub2RlLm9uKE5vZGUuRXZlbnRUeXBlLlRSQU5TRk9STV9DSEFOR0VELCB0aGlzLm9uVHJhbnNmb3JtQ2hhbmdlLCB0aGlzKTsKICAgIH0KCiAgICBvbkRpc2FibGUoKSB7CiAgICAgICAgaWYgKCFFRElUT1IpIHJldHVybgogICAgICAgIHRoaXMubm9kZS5vZmYoTm9kZS5FdmVudFR5cGUuVFJBTlNGT1JNX0NIQU5HRUQsIHRoaXMub25UcmFuc2Zvcm1DaGFuZ2UsIHRoaXMpOwogICAgfQoKICAgIHByaXZhdGUgb25UcmFuc2Zvcm1DaGFuZ2UoKSB7CiAgICAgICAgdGhpcy53b3JsZFBvc2l0aW9uID0gdGhpcy5ub2RlLndvcmxkUG9zaXRpb247CiAgICAgICAgaWYgKHRoaXMub3RoZXJOb2RlKSB7CiAgICAgICAgICAgIGNvbnN0IG90aGVyTm9kZVdvcmxkTWF0cml4SW52ZXJ0ID0gTWF0NC5pbnZlcnQodGVtcF9tYXQ0LCB0aGlzLm90aGVyTm9kZS53b3JsZE1hdHJpeCk7CiAgICAgICAgICAgIFZlYzMudHJhbnNmb3JtTWF0NCh0aGlzLm90aGVyTm9kZVBvc2l0aW9uLCB0aGlzLndvcmxkUG9zaXRpb24sIG90aGVyTm9kZVdvcmxkTWF0cml4SW52ZXJ0KTsKICAgICAgICB9CiAgICB9Cn0=

          復平面

          剛好講到坐標系,這邊扯點其他相關(guān)的東西。

          在復平面中,有一個實軸和一個虛軸。復數(shù)的乘積的幾何意義剛好是旋轉(zhuǎn)與縮放。

          復平面

          結(jié)束

          白玉無冰預計下一期寫寫關(guān)于向量的筆記??。

          參考資料

          《3D數(shù)學基礎(chǔ):圖形與游戲開發(fā)》
          《游戲引擎架構(gòu)》
          • 《DirectX 12 3D 游戲開發(fā)實戰(zhàn)》
          • 《數(shù)學女孩》

          碰撞組件多邊形頂點數(shù)組是怎么自動生成的
          關(guān)于泰勒公式展開
          寫一個位圖字體制作工具
          替代 toDataURL 的方案
          Fake3D && Shader
          MatCap && Shader
          如何抄shader
          3D折紙


          更多精彩歡迎關(guān)注微信公眾號

          瀏覽 191
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  无码一区二区三区四 | 日日91精品 | 色婷婷色婷婷 | 亚洲v网站在线观看 | 肏屄视频网 |