日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

3d数学基础学习总结

發布時間:2025/4/14 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 3d数学基础学习总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

3d數學基礎目錄

第1章 簡介
  1.1 什么是3D數學
  1.2 為什么選擇本書
  1.3 閱讀本書需要的基礎知識
  1.4 概覽
  第2章 笛卡爾坐標系統
  2.1 1D數學
  2.2 2D笛卡爾數學
  2.3 從2D到3D
  2.4 練習
  第3章 多坐標系
  3.1 為什么要使用多坐標系
  3.2 一些有用的坐標系
  3.3 嵌套式坐標系
  3.4 描述坐標系
  3.5 坐標系轉換
  3.6 練習
  第4章 向量
  4.1 向量——數學定義
  4.2 向量——幾何定義
  4.3 向量與點
  4.4 練習
  第5章 向量運算
  5.1 線性代數與幾何
  5.2 符號約定
  5.3 零向量
  5.4 負向量
  5.5 向量大小(長度或模)
  5.6 標量與向量的乘法
  5.7 標準化向量
  5.8 向量的加法和減法
  5.9 距離公式
  5.10 向量點乘
  5.11 向量叉乘
  5.12 線性代數公式
  5.13 練習
  第6章 3D向量類
  ……
  第7章 矩陣
  第8章 矩陣和線性變換
  第9章 矩陣的更多知識
  第10章 3D中的方位與角位移
  第11章 C++實現
  第12章 幾何圖元
  第13章 幾何檢測
  第14章 三角網絡
  第15章 圖形數學
  第16章 可見性檢測


========


3D數學基礎_01

http://blog.csdn.net/eclaix/article/details/6366878


在進行3D編程的時候, 需要知道一些基礎的數學知識. 我做了一些整理, 希望對大家有用. 因為只是一


些重點的整理, 很多內容不是連續的. 如果希望更進一步的理解, 還是去看相關圖形學的書比較好.
?
1: ?3D游戲渲染的原理.
2D游戲的圖像很容易理解, 一副副圖片以各種方式排列在一起就OK了.
3D游戲的圖像稍微復雜一些:
首先需要使用數學方法構建一個世界. 這個世界不是真實存在的, 而且也不是直接可見—因為它們就是


一對數字. 然后選取觀察點(Camera)和觀察窗口(視窗), 根據各種數學方法, 計算出從觀察點(camera)


應該看到的圖像. 然后顯示出來.


渲染結果: 從相機這一點看到的圖像—當然, 它們不是真實存在的, 而是計算得出.
?渲染結果
?
2: 屏幕坐標系(2D)與3D坐標系
首先是屏幕坐標系. 計算機的顯示屏幕是2D的. 不管玩的是2D游戲, 還是3D游戲.
而且需要注意的是, 屏幕坐標系中左上腳為原點(0, 0). 向右, 向下延伸. 在做GUI相關編程時需要注意


這一點.
??
之后是3D坐標系. 首先3D坐標系與2D坐標系有一個重要的不同, 就是有兩個3D坐標系: 左手坐標系和右


手坐標系.
(而2D坐標系只有一個: 不管將2D坐標系畫成什么樣子, 總可以根據旋轉, 將它們重合. 也就是所有2D坐


標系都是等價的. )


可以看到, 左手坐標系不管怎么旋轉, 都不可能與右手坐標系重合. 但是左手坐標系之間, 或者右手坐


標系之間是等價的. 所以3D的世界中有兩種坐標系. 它們之間沒有任何優劣之分. DirectX使用左手坐標


系, OpenGL和OGRE中使用右手坐標系. 搞錯坐標系的話, 會出現位置不對等奇怪現象, 需要注意.
??
3: 多坐標系
游戲編程中, 最常見的有三種坐標系: 世界坐標系, 物體坐標系, 相機坐標系. (還有一個是慣性坐標系


, 游戲中不常用, 就不提了.)
A: 世界坐標系描述的是絕對位置, 也叫作全局坐標系或者宇宙坐標系.?
對應Global Position.
?B: 物體坐標系是以某個物體的中心為原點的坐標系.
對應Local Position
? ? 一般物體自轉的話, 一定要在物體坐標系中作.
?C: 相機坐標系. 相機坐標系就是以相機為原點的坐標系. 其實它是一個特殊的物體坐標系. (相機也是


一個物體)
? ? 另外, 左手坐標系中, +Z為觀察方向; 右手坐標系中 –Z為觀察方向.
? ? 在手動計算位置(各種Debug)的時候, 非常重要.
為什么要引入這么多坐標系? 其實就是為了處理簡單. 具體原因的話參考相關書籍, 使用中記住有這么


三種重要的坐標系就OK了.


4: 向量, 矩陣與變換
向量&矩陣的定義和運算, 請參考線性代數教科書.
這里主要介紹3D引擎中經常出現的4D矩陣.
它的寫法是:


其中的R代表旋轉部分, T代表平移部分. 旋轉的R部分比較復雜,請參考專業書籍; T的換比較簡單X,Y,Z


分別代表在X軸, Y軸, Z軸上的平移量.
如果在3D引擎中看到一個4*4矩陣, 那么很大的可能是以上形式的矩陣.
?
3D引擎中的變換主要包括平移, 旋轉, 縮放, 投影, 鏡像變換等. 其中投影又包括正交投影和透視投影.
?
5: 方位(Orientation)與角位移
3D引擎中處理最多的, 應該就是平移與旋轉了. 上邊的4D矩陣定義中也可以發現, 就有2塊: 旋轉和平移


. 平移的話比較簡單, 沿著X, Y, Z移動的量構成了這個物體在3D空間中的平移. 旋轉的話, 就非常復雜


了. ( 至少我這么想-_-)
首先, 需要明確一下概念: 方向(Direction)與方位(Orientation).
一開始可能比較難區分這兩個概念…..其實搞清除了也簡單, 方位(Orientation)是方向(Direction)加


自轉.
?
兩架飛機. 它們都沿著同一個方向飛行. 假設是北(N).
它們的方向雖然相同, 但它們的方位不同. 第二架飛機相比第一架飛機, 自轉了90度.
?
方位的概念.
描述物體位置時, 必須指定一個原點, 位置是相對于原點的偏移量.
同樣, 描述方位時, 也必須指定一個已知方位(起始方位), 相對已知方位的旋轉的量就是這個物體的方


位. 這個旋轉的量叫做角位移.
(概念上雖然不同, 角位移的值與方位的值時一樣的. 類似與偏移量與位置的關系)
3D引擎中有三種方法表示方位: 矩陣, 歐拉角, 四元數.
通常情況下, 用矩陣和四元數表示角位移(用于計算); 用歐拉角表示方位(用于人來查看).
(這部分十分繞, 反正我理解的時候累死了無數腦細胞…大家慢慢琢磨吧)
?
A: 歐拉角
? ?要想知道一個物體的方位, 那么只要知道它與X, Y, Z軸之間的夾角就可以了.
對人來說, 這是最直觀也是最簡潔的方式. 相對于各個軸的夾角被命名
為Roll-Pitch-Yaw. (也有一種Heading-Pitch-Bank的命名法, 不過與慣性坐標系相關,
于是忽略掉)
? ?Roll(Bank) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?與Z軸的夾角
Pitch ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?與X軸的夾角
Yaw(類似Heading) ? ? ? 與Y軸的夾角
歐拉角優點是簡潔(只有三個數), 便于人理解; 但缺點是不方便計算.
于是有了以下兩種表示方法.
?
B: 矩陣
? ?矩陣數字最多, 3*3一共9個. 概念也比較簡單, 直接作乘法就可以了.
但缺點就是需要存儲的數字多.
?
C: 四元數
? ?個人以為這個是最難理解的概念之一… 但是它的優點就是比較簡潔(四個數),
而且便于計算, 尤其是插值運算. 四元數的誕生還有一段有趣的小故事,
有興趣的同學可以趣看看.
?
? ?一個四元數包括一個標量分量和一個3D向量分量. 一般記為[w, v] = [w, x, y, z].
? ?四元數通過以下方式應用于3D引擎中.
? ?首先是概念基礎: 一個旋轉序列(也就是很多個旋轉)等價于一個單個旋轉. -> 也就是
任何角位移都能表示為 繞單一軸的單一旋轉. 這個軸叫做旋轉軸, 它可以是任意方向.
然后是四元數記法: 設 n 為旋轉軸, a 為旋轉角, 那么四元數
Q = [ cos(a/2), sin(a/2)*n ] = [ cos(a/2), sin(a/2)*nx, sin(a/2)*ny, sin(a/2)*nz ]
注意, 角的值a與軸的方向x,y,z都沒有直接出現. 都經過了三角函數的換算.
(這樣作是為了方便插值運算, 不過…嗯, 隨便吧, 寫一遍都覺得累. 至少知道里邊的
值是經過三角函數變換的. 如果直接拿出來當角度值, 那就窘了.)
另外, 只用單位四元數(模為1)來表示方位.
?
這三種表現方式之間是可以互相轉換的. 給一個最簡單的: 四元數到歐拉角
Pitch角 ? ?= asin(-2(yz + wx))
Yaw角 ? ?= atan2(xz – wy, 1/2 – x^2 - y^2) ?cos(pitch角) != 0
? ? ? ? ? ? ? ?= atan2(xz – wy, 1/2 – y^2 - z^2) ?cos(pitch角) == 0
Roll角 ? ? = atan2(xy – wz, 1/2 – x^2 - z^2) ?cos(pitch角) != 0
? ? ? ? ? ? ? ?= 0 ?cos(pitch角) == 0
?
其他n長的轉換公式大家自己找圖形學書. 其實看看就行, 知道有這么回事兒就可以. 在圖形引擎中已經


將這些東西都實現好了. 一般還是會用是最終目標.
========

3D數學基礎_02



6: 幾何圖元
幾何圖元就是指點, 線, 面, 體之類.
這個沒什么特別好說的. 主要需要注意兩個縮寫:
AABB和OBB. 它們都是指矩形邊框,
AABB指 axially aligned bounding box. ?沿著坐標軸的矩形框
OBB 指 oriented bounding box. 任意方向的矩形框
(作幾何檢測的時候, 有時候按照AABB和OBB分成兩類. 知道是什么東西就可以, 別被縮寫騙了. 不知道


是什么的時候, 覺得玄乎玄乎還挺神秘的, 知道了以后, 原來就是四方塊…)
幾何檢測的幾種方式。其中的(a),(b),(c)比較常用。


7: 3D模型


3D模型主要包括三類: 多邊形網格模型, 曲面模型和離散模型. 其中, 在游戲中應用最廣泛的是多邊形


網格. 而由于OpenGL和Direct3D都使用三角形為最基本的圖形單元, 所以我們只討論三角形與三角網格.


一組相連的三角形稱為三角網格.


3D數學中三角形有正面和反面, 并且擁有一條法線. 三角形的正面是其法線伸出的方向.


三角形的優點:只有三個頂點且不可被拆分. 一個三角形一定處于同一個平面中. 其他多變形都可能處于


不同平面. 所有其他多邊形都可以使用三角形來表示.


?三角形頂點的順序十分重要. 而且左手坐標系和右手坐標系中, 它們的順序也不盡相同. 如果手動指定


了3個頂點, 但是沒有顯示對應的三角形. 那么很有可能是它們的順序不對. 這時候你需要確認一下系統


的坐標系和頂點的位置和順序.


?
三角網格中因為存在大量重復使用的頂點, 所以一般常用索引三角網格方式來進行描述.


在索引三角網格中, 需要維護兩個列表: 頂點(Vertex)表和三角形的索引(Index)表.


其中:


? A: 每個頂點必須包括一個3D位置. 可選包括紋理坐標, 表面法向量, 光照值等可選數據.


? B: 三角形索引表包含構成三角形的索引. 所以索引是三個一組出現.
??
這是一個普通的立方體模型. 它有8個頂點和6個面. 每個面都是四方形, 一個四方形由2個三角形構成.?


所以它有12個三角形.


如果采用純頂點方式, 那么它需要保存 12 * 3 = 36個頂點數據.


如果采用索引三角網格方式, 那么它需要保存8個頂點, 36個索引. 之后的文章中我會介紹典型的頂點和


索引定義. 通常索引只是一個4字節整數, 而頂點可能包含多個數據(一般超過20個字節). 那么, 在渲染


時, 動則需要向GPU傳遞幾萬個點信息的情況下, 使用索引是非常經濟的選擇.


8: 一個典型的圖形管道


最后, 介紹一個典型的現代圖形管道(pipe line).


主要通過數據流來介紹管道的各個部分.


這只是一條理論上的管道, 之后會介紹DirectX9的缺省pipe line(一個具體的例子.)


當然, 大家會發現, 它們之間還是非常相似的.


? A: 建立場景. 在開始渲染之前, 首先需要設置整個場景. 比如相機的位置, 方向. 視錐(可視范圍),?


環境光照, 霧化參數. 渲染的輸出—視圖窗口等.


視錐?
?
? B: 可見性檢測. 當選定好相機, 指定了視錐參數以后, 就可以決定那些物體是可見的, 那些是不可見


的. 根據這些信息, 我們可以去掉那些不可見的物體. 因為計算并渲染看不見的東西是在浪費時間.


? C: 設置物體的渲染狀態. 主要是物體的紋理屬性.


? D: 幾何體的生成與提交. 這一步是向3D API提交幾何體. 通常提交的數據是各種三角形或者三角網格


.


? E: 變換與光照. 幾何體數據傳遞完成之后, 就可以計算頂點光照. 通常有四種形式的光: 環境光, 直


線光, 點光, 錐形光. 物體上可以漫反射, 鏡面反射照射過來的光線. 物體也可以自發光. (通常自發光


的屬性在物體材質中設置.)


點光
直線光
直線光
?
探照燈形光
錐形光
? ?
? F: 背面剔除與裁減(3D). 背對相機的面會被剔除(背面剔除). 因為它們不可見. 三角形在視錐外的部


分也會被剔除, 同樣因為它們不可見. 這是3D空間中的裁減. 不過這種裁減可能導致多邊形出現.
? G: 投影到屏幕空間與裁減(2D) 之后, 3D世界中的幾何體會被投影到2D屏幕空間中. 之后, 屏幕顯示


范圍以外的部分會被裁減掉(2D裁減). 這種裁減相比之下簡單易行. 但是必須在投影運算之后進行。
?
? H: 光柵化. 當完成多邊形到屏幕的轉換之后, 就進入光柵化階段. 光柵化指根據投影過來的幾何信息


, 那些象素需要被繪制. 很多圖形學的核心算法在這里體現. 比如抗鋸齒等. 不過因為大多是硬件實現,?


所以這里不具體討論. 只要知道它是一個很復雜且重要的過程即可.?


數學世界中的圖形 轉換到 屏幕上的像素點
?
? I: 象素著色. 最后, 在圖形管道的最后階段, 計算各個象素的顏色值. 這個過程叫做著色.材質的顏


色, alpha混合, 深度buffer都在這里應用. 而且在現代顯卡上, 這一步是可以編程的. DirectX中叫做


Pixel Shader, OpenGL中叫做Fragment Shader. 它們中可以包含一些復雜的算法. 而現在各種華麗的效


果基本都通過它們實現. 比如HDR, 卡通渲染等等.
?
一個HDR和卡通渲染出來的茶壺. 可以雖然是同樣的模型, 但他們的表現方式卻可以千差萬別.而這都是


通過著色來實現的.
另外, 學習3D的人應該已經發現, 茶壺是出現頻率非常高的一種物體, 基本快趕上立方體了… 不知道大


家有沒有想過原因?:)
========

總結

以上是生活随笔為你收集整理的3d数学基础学习总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 成在人线av| 国产色视频 | 老头吃奶性行交 | 激情开心成人网 | 91色吧 | av最新地址 | 国产欧美日韩精品在线观看 | 夜夜干天天操 | 日韩一区二区三区在线播放 | 日韩色在线| 国产91在线免费观看 | 天天射夜夜骑 | 一级特黄欧美 | 欧美成本人视频 | av在线不卡播放 | 开心成人激情 | 最新国产拍偷乱偷精品 | 日韩欧美亚洲精品 | 黄色成人在线 | 中文字幕在线视频一区 | 国产乱码一区 | 午夜毛片视频 | 国产乱淫av一区二区三区 | 国产黑人| 欧美乱妇狂野欧美视频 | 99热成人 | 国产中文字幕在线免费观看 | 综合国产精品 | 尤物在线精品 | 刘玥91精选国产在线观看 | 日本伦理中文字幕 | 黄色一及毛片 | a在线观看视频 | 亚洲无吗在线观看 | wwww在线观看 | 久久综合加勒比 | 亚洲a毛片 | 亚洲国产欧美一区二区三区深喉 | 播播开心激情网 | 五月天堂婷婷 | 蜜桃臀aⅴ精品一区二区三区 | 欧美中文在线观看 | 最新国产精品 | 一级片国产 | 又色又爽又黄 | 欧美日韩国产伦理 | 国产又粗又猛又爽69xx | 亚洲高清视频网站 | 亚洲自拍激情 | 免费三片在线观看网站v888 | 神马久久久久久久久久久 | 天天躁日日躁aaaa视频 | www.香蕉视频 | 伊人视频| 亚洲av无码国产精品久久不卡 | 顶级嫩模啪啪呻吟不断好爽 | 91免费大片 | 亚洲最黄视频 | 在线观看久草 | 一亲二脱三插 | 免费视频久久久 | 久视频在线观看 | 天天干天天干天天操 | 午夜tv影院| 久久888 | 欧美xxxx吸乳 | 在线国产中文字幕 | 日韩精品在线观看一区二区三区 | 日韩123区 | 国产精品入口免费 | 91黄色看片| 国产对白在线 | japansexxxxhd医生| 91亚洲国产 | 日韩精品视频在线看 | 日韩精品在线不卡 | 女仆裸体打屁屁羞羞免费 | 秋霞欧美在线观看 | 2020国产精品视频 | 91学生片黄 | 亚洲自偷自偷偷色无码中文 | 浓精喷进老师黑色丝袜在线观看 | 美女视频黄色 | 正在播放一区二区 | 久久久99久久 | 四虎成人精品永久免费av | 奇米网7777 | 欧美日韩在线视频免费播放 | 黄色激情毛片 | av资源在线播放 | 亚洲欧美强伦一区二区 | 樱花影院电视剧免费 | 91看片就是不一样 | 欧美一级二级三级 | 国产精品igao | 黄色毛毛片 | 亚洲女同在线 | 国产片淫乱18一级毛片动态图 | 啪啪的网站 |