官术网_书友最值得收藏!

第 4 章 變換向量和圖形

本章內容

  • 運用數學函數變換和繪制三維對象
  • 變換向量圖形來創建計算機動畫
  • 識別不改變直線和多邊形形狀的線性變換
  • 計算線性變換對向量和三維模型的影響

有了前兩章的技術再加上一點兒創造力,你就可以渲染你能想到的任何二維或三維圖形。所有物體、角色乃至整個世界都可以通過由向量定義的線段和多邊形來構建。但是,要基于此做一部長篇計算機動畫電影或生動的動作視頻游戲,還需要能夠繪制隨時間變化的對象。

動畫在計算機圖形學中的工作方式和在電影中一樣:每秒顯示幾十幅靜態渲染的圖像。顯示移動對象的大量快照會使圖像看起來是連續不斷地變化的。第2章和第3章涉及的一些數學運算可以接收現有向量,對其進行幾何變換,并輸出新的向量。將連續的小變換鏈接在一起,就可以創造出連續運動的假象。

可以將旋轉二維向量的示例記在心里,作為一個心智模型。你可以寫一個Python函數rotate,它接收一個二維向量并將其逆時針旋轉45°。如圖4-1所示,rotate函數可被看作一臺接收向量并對其變換后輸出新向量的機器。

圖4-1 把向量函數想象成一臺有輸入槽和輸出槽的機器

如果將這個函數類推至三維,應用到定義了一個三維形狀的每個多邊形中的每個向量上,就可以得到整個形狀旋轉后的結果。這個三維形狀可以是上一章中的八面體,甚至可以是一個茶壺。在圖4-2中,旋轉機器將茶壺作為輸入,并輸出旋轉后的副本。

圖4-2 可以將同一個變換應用于構成三維模型的每一個向量,從而以相同的幾何變換方法變換整個模型

如果不是一次旋轉45°,而是旋轉45次1°,可以生成顯示旋轉茶壺的電影幀(見圖4-3)。

圖4-3 從左上角開始,茶壺每次旋轉1°,連續旋轉45次

旋轉是一個很好的示例,因為將線段上的每一個點都相對于原點旋轉相同的角度,仍然會得到相同長度的線段。這使得旋轉構成二維或三維對象輪廓的所有向量后,仍可識別該對象。

本書將介紹一類通用的向量變換,稱為線性變換。與旋轉一樣,線性變換將位于直線上的向量轉換為同樣位于直線上的新向量。線性變換在數學、物理學和數據分析中有眾多應用。在這些應用場景中再次遇到它時,知道如何用幾何圖形來描述是很有幫助的。

為了實現旋轉、線性變換以及其他向量變換的可視化,本章將使用更強大的繪圖工具。我們將把Matplotlib換成用于高性能圖形繪制的行業標準庫OpenGL。大多數OpenGL編程使用C或C++完成,但本章將使用更加易用的Python庫PyOpenGL。除此之外,我們還將使用Python的PyGame視頻游戲開發庫。具體地說,是使用PyGame中將連續圖像渲染成動畫的功能。附錄C包含所有新工具的配置方式,這樣我們可以快速上手并專注于數學向量變換。如果你想跟著本章的代碼一起學習(強烈推薦!),那么應該跳到附錄C,讓代碼能夠運行后再返回這里閱讀。

主站蜘蛛池模板: 清水河县| 醴陵市| 庆城县| 澄江县| 海阳市| 南岸区| 镇沅| 乡城县| 柏乡县| 华蓥市| 焦作市| 南溪县| 罗源县| 南丰县| 株洲县| 张家港市| 鸡西市| 岢岚县| 揭东县| 武强县| 驻马店市| 株洲县| 澜沧| 铜山县| 壶关县| 栖霞市| 陇南市| 阜康市| 隆尧县| 阿拉尔市| 平乡县| 勃利县| 绥中县| 北海市| 嘉兴市| 蒙城县| 北海市| 张掖市| 清镇市| 濮阳县| 罗甸县|