2014-10-18 46 views
0

是否可以在GLSL中編寫着色器,以便將OpenGL轉換爲光線跟蹤器?像下面這樣。在正常使用OpenGL的情況下是否可以使用GLSL進行光線跟蹤

glUseProgram(rayTracer); 
//than do anything you do in OpenGL normally 
glEnable(GL_LIGHT0); 
gl....//Set light parameters 
... 
//Draw The theme 
glDrawArray(.......); 

比結果結果將通過光線跟蹤呈現。例如:物理上正確的照明

我試過這個。但是我失敗了,我無法獲得頂點/片段着色器中的所有三角形頂點和顏色/紋理,以便進行光線追蹤。

是否有可能創建這種着色器?如果可能的話,我應該從哪裏開始?

+0

總之一句話:不可以。使用OpenGL實現光線跟蹤器是可能的(儘管不是很微不足道),但它不會像你想象的那樣工作。 – Damon 2014-10-18 17:51:01

回答

1

不,這是不可能的。光線追蹤是一種全球照明模式。這意味着需要使用所有物體和光源訪問整個場景,原因很明顯。渲染pipleine OpenGL實現一次不會看到多個單一的基元。雖然人們可以在GPU上進行光線測量,但與僅編寫一些着色器完全不同,後者可用作替代替換,同時保持渲染算法的其餘部分相同。您需要完全重新編制數據,並且GL繪圖功能根本無法使用。

0

從OpenGl superbible中檢查這個例子。 http://www.openglsuperbible.com/example-code/

有一個叫做「raytracer」的例子。

在Windows/Visual Studio速成,使其正常運行, 你可能想在「load_shaders()」函數來改變路徑,以絕對的,用「\\」目錄分隔符,而不是「/」 。

然後,+/-鍵更改遞歸深度,您在源代碼中找到的其他控制鍵。

也許這個例子並不像你期望的那麼簡單, 但是......這裏是你可以開始的地方。

相關問題