回覆列表
  • 1 # 易店無憂網店轉讓平臺

    易店無憂認為:

    計算機圖形學需要多少數學知識

    數學在計算機圖形學中的應用 Greg Turk, August 1997 “學習計算機圖形學需要多少的數學?”這 是初學者最經常問的問題。答案取決於你想在計算機圖形學領域鑽研多深。如果僅僅使用周圍唾手可得的圖形軟體,你不需要知道多少數學知識。如果想學習計算機 圖形學的入門知識,我建議你讀一讀下面所寫的前兩章(代數,三角學和線性代數)。如果想成為一MISTRA形學的研究者,那麼對數學的學習將是活到老,學到老。如 果你並不特別喜歡數學,是否仍有在計算機圖形學領域工作的機會?是的,計算機圖形學的確有一些方面不需要考慮太多的數學問題。你不應該因為數學成績不好而 放棄它。不過,如果學習了更多的數學知識,似乎你將在研究課題上有更多的選擇餘地。對於在計算機圖形學中哪些數學才是重要的還沒有明確的答案。這領域裡不 同的方面要求掌握不同的數學知識,也許興趣將會決定了你的方向。以下介紹我認為對於計算機圖形學有用的數學。別以為想成為一MISTRA形學的研究者就必須精通各 門數學!為了對用於圖形學的數學有一個全面的看法,我特地列出了很多方面。但是許多研究者從不需要考慮下面提到的數學。最後,雖然讀了這篇文章後,你應該 會對數學在計算機圖形學中的應用有所瞭解,不過這些觀點完全是我自己的。也許你應該閱讀更多的此類文章,或者至少從其他從事計算機圖形學工作的人那裡瞭解 不同的學習重點。現在開始切入正題。代數和三角學對於計算機圖形學的初學者來說,高中的代數和三角學可能是最重要的數學。日復一日,我從簡單的方程解出一 個或更多的根。我時常還要解決類似求一些幾何圖形邊長的簡單三角學問題。代數和三角學是計算機圖形學的最基礎的知識。那麼高中的幾何學怎麼樣呢?可能讓人 驚訝,不過在多數計算機圖形學裡,高中的幾何學並不經常被用到。原因是許多學校教的幾何學實際上是如何建立數學證明的課程。雖然證明題對提高智力顯然是有 效的,但對於計算機圖形學來說,那些與幾何課有關的定理和證明並不常被用到。如果你畢業於數學相關領域(包括計算機圖形學),就會發現雖然你在證明定理, 不過這對開始學習圖形學不是必要的。如果精通代數和三角學,就可以開始讀一本計算機圖形學的入門書了.下一個重要的用於計算機圖形學的數學——線性代數,多數此類書籍至少包含了一個對線性代數的簡要介紹。推薦的參考書: Computer Graphics: Principles and Practice James Foley, Andries van Dam, Steven Fein

    er, John Hughes Addison-Wesley [雖然厚重,可

    是我很喜歡] 線性代數線性代數的思想貫穿於計算機圖形學。事實上,只要牽涉到幾何數值表示法,就常常抽象出例如x,y,z坐 標之類的數值,我們稱之為向量。圖形學自始至終離不開向量和矩陣。用向量和矩陣來描述旋轉,平移,或者縮放是再好不過了。高中和大學都有線性代數的課程。 只要想在計算機圖形學領域工作,就應該打下堅實的線性代數基礎。我剛才提到,許多圖形學的書都有關於線性代數的簡要介紹——足夠教給你圖形學的第一門課。推薦的參考書: Linear Algebra and Its Applications Gilbert Strang Academic Press 微積分學 微 積分學是高階計算機圖形學的重要成分。如果打算研究圖形學,我強烈建議你應該對微積分學有初步認識。理由不僅僅是微積分學是一種很有用的工具,還有許多研 究者用微積分學的術語來描述他們的問題和解決辦法。另外,在許多重要的數學領域,微積分學被作為進一步學習的前提。學習了基本代數之後,微積分學又是一種 能為你開啟多數計算機圖形學與後繼的數學學習之門的課程。微積分學是我介紹的最後一箇中學課程,以下提及的科目幾乎全部是大學的課程。 微分幾何學微分幾何學研究支配光滑曲線,曲面的方程組。如果你要計算出經過某個遠離曲面的點並垂直於曲面的向量(法向向量)就會用到微分幾何學。讓一輛汽車以特定速度在曲線上行駛也牽涉到微分幾何學。有一種通用的繪製光滑曲面的圖形學技術,叫做“凹凸帖圖”,這個技術用到了微分幾何學。如果要著手於用曲線和曲面來創造形體(在圖形學裡稱之為建模)你至少應該學習微分幾何學的基礎。推薦的參考書: Elementary Differential Geometry Barrett O"Neill Academic Press 數值方法幾乎任何時候,我們在計算機裡用近似值代替精確值來表示和運算元值,所以計算過程總是會有誤差。而且對於給定的數值問題,常常有多種解決的方法,一些方法會更塊,更精確或者對記憶體的需求更少。數值方法研究的物件包括“計算方法”和“科學計算”等等。這是一個很廣闊的領域,而且我將提及的其他幾門數學其實是數值方法的一些分支。這些分支包括抽樣法理論,矩陣方程組,數值微分方程組和最最佳化。推薦的參考書: Numerical Recipes in C: The Art of Scientific Computing William Press, Saul Teukolsky, William Vetterling and Brian Flannery Cambridge University Press [這本參考書很有價值可是很少作為教材使用] 抽 樣法理論和訊號處理在計算機圖形學裡我們反覆使用儲存在正規二維數組裡的數字集合來表示一些物件,例如

    圖片和曲面。這時,我們就要用抽樣法來表示這些對 象。如果要控制這些物件的品

    質,抽樣法理論就變得尤為重要。抽樣法應用於圖形學的常見例子是當物體被繪製在螢幕上時,它的輪廓呈現鋸齒狀的邊緣。這鋸齒狀 的邊緣(被認為是“混淆”現象)是非常讓人分散注意力的,用抽樣法中著名的技術例如迴旋,傅立葉變換,空間和頻率的函式表示就能把這個現象減少到最小。這些思想在影象和音訊處理領域是同樣重要的。推薦的參考書: The Fourier Transform and Its Applications Ronald N. Bracewell McGraw Hill 矩 陣方程組計算機圖形學的許多問題要用到矩陣方程組的數值解法。一些涉及矩陣的問題包括:找出最好的位置與方向以使物件們互相匹配(最小二乘法),建立一個 覆蓋所給點集的曲面,並使皺摺程度最小(薄板樣條演算法),還有材質模擬,例如水和衣服等。在圖形學裡矩陣表述相當流行,因此在用於圖形學的數學中我對矩陣 方程組的評價是很高的。推薦的參考書: Matrix Computations Gene Golub and Charles Van Loan Johns Hopkins University Press 物 理學物理學顯然不是數學的分支,它是自成一家的學科。但是在計算機圖形學的某些領域,物理學和數學是緊密聯絡的。在圖形學裡,牽涉物理學的問題包括光與物 體的表面是怎樣互相影響的,人與動物的移動方式,水與空氣的流動。為了模擬這些自然現象,物理學的知識是必不可少的。這和解微分方程緊密聯絡,我將會在下 一節提到微分方程。 微 分方程的數值解法我相信對於計算機圖形學來說,解微分方程的技巧是非常重要的。像我們剛才討論的,計算機圖形學致力於模擬源於真實世界的物理系統。波浪是 怎樣在水裡形成的,動物是怎樣在地面上行走的,這就是兩個模擬物理系統的例子。模擬物理系統的問題經常就是怎樣解微分方程的數值解。請注意,微分方程的數 值解法與微分方程的符號解法是有很大差異的。符號解法求出沒有誤差的解,而且時常只用於一些非常簡單的方程。有時大學課程裡的“微分方程”只 教符號解法,不過這並不會對多數計算機圖形學的問題有幫助。在對物理系統的模擬中,我們把世界細分為許多表示成向量的小元素。然後這些元素之間的關係就可 以用矩陣來描述。雖然要處理的矩陣方程組往往沒有很精確的解,但是取而代之的是執行了一系列的計算,這些計算產生一個表示成數列的近似解。這就是微分方程 的數值解法。請注意,矩陣方程的解法與微分方程數值解法的關係是很密切的。 最最佳化在計算機圖形學裡,我們常常為了期望的目標尋

    求一種合適的描述物件或者物件集的方法。例如安排燈的位置使得房間的照明看起來有種特殊的“感覺”,動畫裡的人物要

    怎樣活動四肢才能實現一個特殊的動作,怎樣排版才不會使頁面混亂。以上這些例子可以歸結為最最佳化問題。十年前的計算機圖形學幾乎沒有最最佳化技術的文獻,不過最近這個領域越來越重視最最佳化理論。我認為在計算機圖形學裡,最最佳化的重要性將會日益增加。 機率論與統計學計算機圖形學的許多領域都要用到機率論與統計學。當研究者涉足人類學科時,他們當然需要統計學來分析資料。圖形學相關領域涉及人類學科,例如虛擬現實和人機互動(HCI)。另外,許多用計算機描繪真實世界的問題牽涉到各種未知事件的機率。兩個例子:一棵成長期的樹,它的樹枝分杈的機率;虛擬的動物如何決定它的行走路線。最後,一些解高難度方程組的技巧用了隨機數來估計方程組的解。重要的例子:蒙特卡羅方法經常用於光如何傳播的問題。以上僅是一部分在計算機圖形學裡使用機率論和統計學的方法。 計算幾何學計算幾何學研究如何用計算機高效地表示與操作幾何體。典型問題如,碰撞檢測,把多邊形分解為三角形,找出最靠近某個位置的點,這個學科包括了運演算法則,資料結構和數學。圖形學的研究者,只要涉足建立形體(建模),就要大量用到計算幾何學。推薦的參考書: Computational Geometry in C Joseph O"Rourke Cambridge University Press [大學教材] Computational Geometry: An Introduction Franco Preparata and Michael Shamos Springer-Verlag [很經典,不過有點舊了] 總 結:數學應用和數學理論對於圖形學來說,以上提到的許多數學學科都有個共同點:比起這些數學的理論價值,我們更傾向於發掘它們的應用價值。不要驚訝。圖形 學的許多問題和物理學者與工程師們研究的問題是緊密聯絡的,並且物理學者與工程師們使用的數學工具正是圖形學研究者們使用的。多數研究純數學理論的學科從 不被用於計算機圖形學。不過這不是絕對的。請注意這些特例:分子生物學正利用節理論來研究DNA分 子動力學,亞原子物理學用到了抽象群論。也許有一天,純數學理論也能推動計算機圖形學的發展,誰知道呢?有些看來重要的數學實際上在計算機圖形學裡不常被 用到。可能拓撲學是此類數學中最有意思的。用一句話來形容拓撲學,它研究油炸圈餅與咖啡杯為什麼在本質上是相同的。答案是他們都是隻有一個洞的曲面。我們 來討論一下拓撲學的思想。雖然曲面是計算機圖形學的重要成分,不過微分幾何學的課程已經涵蓋了多

    數對圖形學有用的拓撲學知識。微分幾何學研究曲面的造型, 可是拓撲學研究曲面的相鄰關係。我覺得拓撲學對於圖形學來說幾乎沒用,這是由於拓撲學關心抽象的事

    物,而且拓撲學遠離了多數圖形學的核心——三維歐氏空間的概念。對於圖形學來說,拓撲學的形式(符號表示法)是表達思想的簡便方法,不過圖形學很少用到抽象拓撲學的實際工具。對圖形學來說,拓撲學像一個好看的花瓶,不過別指望它能立即帶給你回報。有人曾經這麼問我,計算機圖形學是否用到了抽象代數(群論,環,等等….)或者數論。我沒怎麼遇到過。和拓撲學一樣,這些學科有很多美好的思想。可是很不幸,這些思想很少用於計算機圖形學。 --The End--

    分享到:

    =================================================================

    windows下安裝opengl的glut庫(轉)

    windows下安裝opengl的glut庫

    GLUT不是OpenGL所必須的,但它會給我們的學習帶來一定的方便,推薦安裝。

    Windows環境下的GLUT下載地址:(大小約為150k)

    http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip

    無法從以上地址下載的話請使用下面的連線:

    http://upload.programfan.com/upfile/200607311626279.zip

    Windows環境下安裝GLUT的步驟:

    1、將下載的壓縮包解開,將得到5個檔案

    2、在“我的電腦”中搜索“gl.h”,並找到其所在資料夾(如果是VisualStudio2005,則應該是其安裝目錄下面的“VC/PlatformSDK/include/gl資料夾”)。把解壓得到的glut.h放到這個資料夾。

    3、把解壓得到的glut.lib和glut32.lib放到靜態函式庫所在資料夾(如果是VisualStudio2005,則應該是其安裝目錄下面的“VC/lib”資料夾)。

    4、把解壓得到的glut.dll和glut32.dll放到作業系統目錄下面的system32資料夾內。(典型的位置為:C:/Windows/System32)

    OpenGL study

    The OpenGL Programming Guide,這就是著名的red book(“紅皮書”)

    如果你英語不好,那麼推薦你閱讀:

    《OpenGL超級寶典》是一本相當不錯的中文教程。可以在http://www.vrforum.cn/forumdisplay.php?fid=29找到它的例子程式碼

    《OpenGL程式設計權威指南》他是red book的中文譯本,它的例子也就是red book的例子。

    *Nate Robin的例子對你理解OpenGL很有幫助。http://www.gamedev.net/reference/articles/article839.asp

    *The OpenGL Reference Manual(blue book)並不是一本入門教材,而是一本函式參考手冊,可以從http://www.OpenGL.org的Documentation中下載下來,在實際學習中查詢用

    *NeHe的例子也

    是大家所喜愛的初學者例子。http://nehe.gamedev.net,在http://www.chinagamedev.net還有一部分的中文譯文

    ***nehe的簡單視窗例子(第二課)幾乎含蓋世界上的所有語言,如果想用自己喜歡的獨特語言,可以參考http://nehe

    .gamedev.net/data/lessons/lesson.asp?lesson=02最下方的聯接,並結合C++的例子學習(大多數教材都是基於C++的,不過幸好我們真正關注的是OpenGL本身)

    OpenGL的例子大都需要用到OpenGL應用工具包:GLUT庫,下面講講怎樣安裝它

    Visual C++ 6.0 HOWTO:

    1。下載GLUT庫:http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip

    2。將壓縮包內的glut.h放到.../Microsoft Visual Studio/VC98/Include/GL目錄下

    將glut32.lib放到.../Microsoft Visual Studio/VC98/Lib目錄下

    將glut32.dll放到X:/windows/systom32目錄下(win98使用者放到X:/windows/systom目錄下)

    3。建立一個控制檯工程Win32 Console Application,加入hello.c並執行:

    #i nclude <GL/glut.h>

    void display(void)

    {

    glClear (GL_COLOR_BUFFER_BIT);/* clear all pixels */

    glColor3f (1.0, 1.0, 1.0);

    glBegin(GL_POLYGON);/* draw white polygon with corners at(0.25, 0.25, 0.0) and (0.75, 0.75, 0.0)*/

    glVertex3f (0.25, 0.25, 0.0);

    glVertex3f (0.75, 0.25, 0.0);

    glVertex3f (0.75, 0.75, 0.0);

    glVertex3f (0.25, 0.75, 0.0);

    glEnd();

    glFlush ();/* start processing buffered OpenGL routines */

    }

    void init (void)

    {

    glClearColor (0.0, 0.0, 0.0, 0.0);/* select clearing color */

    glMatrixMode(GL_PROJECTION);

    glLoadIdentity();

    glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);/* initialize viewing values */

    }

    int main(int argc, char** argv)

    {

    glutInit(&argc, argv);

    glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);/*Declare initial display mode(single buffer and RGBA).*/

    glutInitWindowSize (250, 250); /*Declare initial window size.*/

    glutInitWindowPosition (100, 100);/*Declare initial window position.*/

    glutCreateWindow ("hello");/*Open window with "hello"in its title bar.*/

    init ();/*Call initialization routines.*/

    glutDisplayFunc(display); /*Register callback function to display graphics.*/

    glutMainLoop();/*Enter main loop and process events.*/

    return 0; /* ANSI C requires main to return int. */

    }

    OpenGL是目前用於開發可移植的、可互動的2D和3D圖形應用程式的首選環境,也是目前應用最廣泛的計算機圖形標準。OpenGL是SGI公司開發的一套的計算機圖形處理系統,是圖形硬體的軟體介面,GL代表圖形庫(Graphics Library)。OpenGL具有可移植性,任何一個OpenGL應用程式無須考慮其執行環境所在平臺與作業系統,在任何一個遵循OpenGL標準的環境下都會產生相同的可視效果。

    OpenGL不是一種程式語言,而是一種API(Application Programming Interface,應用程式程式設計介面)。當我們說某個程

    序是基於OpenGL的或者說它是個OpenGL程式是,意思是說它是用某種程式語言如C或C++編寫的,其中呼叫了一個或多個OpenGL庫函式。作為一種API,OpenGL遵循C語言的呼叫約定。

    OpenGL主要包括三

    個函式庫,它們是核心庫、實用函式庫和程式設計輔助庫。核心庫中包含了OpenGL最基本的命令函式。核心庫提供了一百多個函式,這些函式都以”gl”為字首,用來建立各種各樣的幾何模型、進行座標變換、產生光照效果、進行紋理對映、產生霧化效果等所有的二維和三維圖形操作。實用函式庫是比核心庫更高一層的函式庫,它提供四十多個函式,這些函式都以”glu”為字首。由於OpenGL是一個圖形標準,是獨立於任何視窗系統或作業系統的,在OpenGL中沒有提供視窗管理和訊息事件響應的函式,也沒有滑鼠和鍵盤讀取事件的功能,所以在程式設計輔助庫提供了一些基本的視窗管理函式、事件處理函式和簡單的事件函式。這類函式以”aux”作為字首。值得一提的是,目前AUX程式設計輔助庫已經很大程度上被GLUT庫取代了。以下介紹以GLUT庫為例。

    GLUT代表OpenGL應用工具包(OpenGL Utility Toolkit),是一個與視窗系統無關的工具包。它作為AUX庫的功能更強的替代品,用於隱藏不同視窗系統API的複雜性。GLUT的子程式的字首使用”glut”。

    一、下面以windows及visualC++為例介紹使用預編譯庫進行安裝的過程:

    (1)將gult32.dll複製到windows系統system32下

    (2)將gult32.lib複製到vc的lib目錄下

    (3)將gult.h複製到vc的include/GL下

    二、一個簡單的OpenGL程式

    #i nclude <windows.h>

    #i nclude <gl/glut.h>

    //繪圖子程式

    void display( void ) {

    glClearColor( 1.0f,1.0f,1.0f,1.0f ); // 設定清除視窗時將視窗設為白色

    glClear( GL_COLOR_BUFFER_BIT );// 執行視窗清理

    glFlush(); // 重新整理OpenGL中的命令佇列和緩衝區,使所有尚未被執行的命令執行

    }

    void main( int argc,char** argv ) {

    glutInit( &argc, argv ); // 初始化GLUT庫

    glutInitDisplayMode( GLUT_SINGLE| GLUT_RGB ); // 顯示模式

    glutCreateWindow( "Hello OpenGL!" ); // 建立一個視窗,引數為視窗的標題

    glutDisplayFunc( display ); // 繪製當前視窗

    glutMainLoop();//通常用於程式的結尾,表示開始執行程式.顯示出所有建立的視窗

    }

  • 2 # 卯秋民

    計算機圖形學內容很多,方向很多,層次由淺到深,從本科到研究生都有可以學習相關的知識,我們學校計算機學院數字媒體專業是大二下學期開的,主要學一些概念性的內容,高數的內容基本用不上,如果是研究生的話那就需要很高的數學基礎了,特別是現在比較熱門的影象識別匹配演算法,沒有紮實的高數,線代,功底根本做不了。

  • 中秋節和大豐收的關聯?
  • NBA歷史投籃最好的球員有哪些?麻煩列出你認為的前15位?