我想從底層學習3D圖形編程的基礎知識。我現在不一定想學習DirectX或OpenGL,但是要真正理解表面下發生了什麼。我想從一個基本的射線追蹤器開始。它看起來很簡單,甚至有在線教程。「低級」3D圖形編程
之後,我想在DirectX或OpenGL之外的軟件中實現圖形管道。這是可能的還是我會試圖穿過一堵磚牆。他們確實說最好的學習方法就是通過做。
我想從底層學習3D圖形編程的基礎知識。我現在不一定想學習DirectX或OpenGL,但是要真正理解表面下發生了什麼。我想從一個基本的射線追蹤器開始。它看起來很簡單,甚至有在線教程。「低級」3D圖形編程
之後,我想在DirectX或OpenGL之外的軟件中實現圖形管道。這是可能的還是我會試圖穿過一堵磚牆。他們確實說最好的學習方法就是通過做。
三維圖形是一個很大的領域,回答你的問題確實需要更多關於你的目標的信息。
寫一個光線跟蹤器絕對是學習一些3D圖形基礎知識的好方法。 DirectX和OpenGL當然被設計爲與基於3D渲染的光柵化硬件加速器對話,所以如果您真的想要了解3D圖形卡如何在屏幕上生成三角形圖像的低層次上發生了什麼,軟件光柵化程序將是一個很好的練習。
如果您的興趣更多的是如何渲染3D場景的逼真圖像的基礎知識,那麼我不一定建議專注於編寫光柵化器的細節。我會專注於更多地瞭解諸如照明,陰影,陰影,反射和折射以及全局照明等事情。所有這些都可以在軟件射線追蹤器中相對簡單地執行,其中很大一部分來自於試圖使它們高效而不是基本原理。
如果您的目標更多的是瞭解3D硬件如何在低級別工作,那麼這是一個完整的其他大型主題。有很好的資源來了解這一點,但如果這是你的目標,編寫一個軟件光線跟蹤器不一定會有幫助。
確實DirectX和OpenGL只是管理你的圖形卡,還是它爲你做了一些工作,比如從不同的座標系轉換等等......我想要做所有事情,所以我知道它是如何工作的。 –
回到固定功能圖形API的預着色時代,DirectX和OpenGL爲您做了一些轉換和照明工作。現在,在頂點和像素着色器中完成這些工作主要取決於你。現在,OpenGL和Direct3D主要處理與圖形卡以及一些資源管理和同步的交談,以及編譯着色器代碼。 – mattnewport
因此,他們演變,他們「刪除」功能? (我知道隨着顯卡變得越來越複雜,它們變得越來越複雜)。 –
首先刷上你的矩陣。 –
我想補充一點,我並不想成爲第二個John Carmack,但是有* MODERN *書籍來解釋現代圖形管道背後的數學和低層次概念。我知道隨着使用着色器引入可編程管道,它最近發生了變化。 –
我認爲最現代化的描述應該是最新的DX/OGL的規範。 – kolenda