我是OpenGL ES世界的新手,並在Android OpenGL ES上學習一些關於3D圖形的基礎知識。我想知道如何創建一個發光的圖像平面?這很容易在3D模型軟件(如Blender)中使用(使用Cycles Render),請參閱下面的圖片以瞭解我正在尋找的效果。通過一些研究,我瞭解到它們可能與使用着色器的Blur或Bloom效果有關。但我不太確定,而且我不知道如何實施它們。OpenGL ES - 如何創建飛機發光
0
A
回答
1
按照保羅 - 揚的評論,你想要的是遠在OpenGL基礎。
OpenGL的默認方法是向前渲染。即每次指定一個幾何圖形時,計算將從三角形向像素前進,應用函數來確定每個像素的顏色,並將它們轉發到幀緩衝區。所以開始的立場是每個像素都沒有周圍世界的概念。每個都是孤立存在的。
在你的場景中,箱子下方的地板不知道它應該是藍色的,因爲它不知道它上面有一個方框。
像Blender這樣的程序使用不同的方法,在這種情況下可以準確地稱爲向後渲染。它從每個像素開始,並詢問它背後的幾何圖形。這樣做明確地瞭解場景中的所有幾何體。所以當它發現地板在某個位置後面時,它可以繼續並詢問「地板看到哪些光源?」建立照明。
對於實時渲染,默認的OpenGL方法已經建立。如果你看看舊的視頻遊戲,你會發現它遍佈整個地方的證據:物體通常不會互相投影(或者這種陰影是非常粗略的近似),只有一個光源是無限遠的(即就幾何而言它處於固定位置;不需要真正瞭解場景)。
因此解決方案是投資幾何知識的整個場景。通常的做法是從光源的角度對場景進行內部渲染。這會生成深度緩衝區。通過將光照位置和深度緩衝區交給場景中的每個幾何圖形,他們可以計算出它們是否對光源可見。如果是這樣,那麼他們就會被照亮。如果不是,那麼他們不是。
另一種選擇是延遲渲染;您可以對場景進行標準傳遞,在每個像素處填充深度,表面顏色和表面法線等。因此,您可以從相機的角度將全部場景信息分解爲逐像素存儲。然後你假裝照相機可以看到的所有東西都是存在的。所以你只需要傳遞像素的緩衝區,大概可以解決哪些光源可以看不到。您也可以讓屏幕的不同部分僅考慮通過廣泛的2d距離檢查足夠接近的燈,這可以節省時間。
在這兩種情況下,我們實際上都在談論相對高級的OpenGL東西。
相關問題
- 1. 如何繪製「發光」線在OpenGL ES
- 2. OpenGL ES強光閃光燈
- 3. 如何確保飛機在OpenGL ES中完美填充視口
- 4. 如何創建OpenGL ES 2.0 SkyBox?
- 5. 如何在OpenGL ES 2.0中獲得「發光」着色器效果?
- 6. 如何在OpenGL ES/OpenGL中創建透明玻璃杯?
- 7. OpenGL-ES 2.0(適用於Android),如何創建2D動態光照效果?
- 8. 從OpenGL ES紋理創建GLSurfaceView
- 9. GL ES 2.0無法創建opengl對象
- 10. 創建網格上的OpenGL-ES
- 11. OpenGL ES在運行時創建對象
- 12. Android - 相機和OpenGL ES
- 13. OpenGL ES 2.0相機問題
- 14. OpenGL ES中的高光紋理?
- 15. 看不到燈光工作openGL ES 2.0
- 16. OpenGL ES 2.0點光源着色器
- 17. OpenGL或OpenGL ES
- 18. 如何在OpenGL ES中創建廣告牌?
- 19. 如何使用OpenGL ES(C++)創建普通方形? (請舉例)
- 20. 如何在本地活動中創建OpenGL ES 2上下文?
- 21. 如何在OpenGL ES中創建彩色矩形?
- 22. 如何在OpenGL ES 2.0中使用GL_FLOAT創建紋理?
- 23. 我如何使用openGL ES創建曲線android
- 24. 如何在OpenGL ES 2.0中創建多色方形網格?
- 25. Qt + OpenGL ES + N900
- 26. iPhone OpenGL ES
- 27. osmesa OpenGL ES 2.0
- 28. 使用Opengl ES 3.0實現內部和外部發光
- 29. 併發使用OpenGL ES + CoreData
- 30. OpenGL ES跨平臺開發
您在該圖像中看到的是全局照明,具有紋理矩形光源。 *基本* 3D圖形或多或少的相反,特別是在像Android OpenGL ES這樣有限的環境中。 – 2014-11-23 09:12:27