2017-07-04 33 views
0

我試圖實現一個OpenGL程序來生成一個由中心球​​體組成的場景動畫,其中場景中的每個對象(減去中心球體)執行旋轉運動它的質心和中心球體周圍。球由拋光不鏽鋼製成,其表面具有像鏡子一樣的場景中其他物體的反射。對於場景中的每個對象(減去球體),我需要使用不同的紋理進行紋理映射。使用「環境地圖」方法在中央球體上產生鏡面效果。我研究了與這個過程有關的問題,而我絕對不能理解的是如何讓這個動畫中反映的場景中的其他對象。我在這裏看到的一個話題(這是我需要做的最接近的事情),可以幫助我,但沒有回答,在鏈接OpenGL Environment mapping ReflectionOpenGL中場景中其他對象的反射

如果有人能給我任何想法,我將非常感激。這是一項大學工作,對象構建和輪換部分之前已經完成。非常殘酷的問題是如何在這個中心領域實現這些運動物體的反射。

+0

對不起,忘記把這個信息,我用的是java的opengl4。 – wgrt

+0

您的標籤應反映該信息。我已經刪除了多餘的標籤。 –

+0

有點phisics:[菲涅耳方程](https://en.wikipedia.org/wiki/Fresnel_equations#Power_or_intensity_equations)說,源(你的對象中的一個像素)和表面法線(一個平面與球體相切)與正常和你的眼睛(相機位置)相同 – Ripi2

回答

0

通常的解決方案是創建一個動態立方體貼圖。在每一幀中,從中心球的視點渲染場景(錐體:fov = 90,縱橫比= 1,接近平面=半徑+ epsilon)6次(每個方向一次),並將結果放入一個立方體貼圖。

然後爲中心球體寫一個像素着色器,它從這個立方體貼圖中抽樣。

它不會是完美的,但接近。

這個問題還有其他解決方案,但我認爲這是OpenGL最容易開發的。

如果需要更正確的解決方案,那麼您不得不訴諸其他技術,恐怕。像光線追蹤。如果您只有簡單的幾何圖形(平面,球體),那麼您可以在像素着色器或計算着色器中編寫一個小光線追蹤引擎。

+0

對不起,請問你有什麼樣的代碼嗎? – wgrt

+0

我已經實現了這一點,但不幸的是我無法分享它。但我認爲應該有一些開源代碼實現了這一點。就像Ogre3D或其他開源遊戲引擎一樣。 – geza

+0

啊啊謝謝你! – wgrt