簡體   English   中英

處理多個燈光和GLSL着色器程序

[英]Handling multiple lights and GLSL shader programs

我有一個點光源陰影貼圖程序,但是在如何控制多光場景中有些迷路。 如何設置多盞燈,並且每盞燈都有自己的“深度紋理”? 如果是這樣,如何將它們組合在一起以進行場景的最終渲染(很明顯,並非所有的光都會一直激活)?

考慮這一點時,擁有單獨的(較小的)深度立方體貼圖似乎更合乎邏輯,而不是用於整個場景(尤其是封閉區域而不是開放式景觀),但是要實現系統只是讓我盯着屏幕。

謝謝。

您可以通過多種方法來完成所需的工作。 該方法取決於您的確切需求。 如果您使用的是OpenGL 2.1或更早版本,則可以通過啟用多個OpenGL光源來設置多個光源:

glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glLightfv(GL_LIGHT0, <light 0 settings>);
glEnable(GL_LIGHT1);
glLightfv(GL_LIGHT1, <light 1 settings>);
...etc. with up to GL_MAX_LIGHTS lights

例如,如果要使用超過GL_MAX_LIGHTS的燈光,或者使用的是OpenGL 3或更高版本,則需要將燈光數據作為制服傳遞到着色器程序中。

過去處理陰影時,每盞燈都使用深度紋理。

要組合它們,通常需要針對每個光線測試每個片段。 如果片段對燈光可見(即不在陰影中),則添加燈光的貢獻。 如果片段在陰影下(對燈光不可見),則無需添加該燈光的貢獻。

如果您需要數百盞燈或類似的燈,也可以查看Deferred Shading (另請參見Wikipedia關於Deferred Shading的條目 。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM