2011-06-19 34 views
0

我正在OpenGL中構建3D房屋。我決定使用GLObjViewer加載模型和紋理。這工作正常。 但GLObjViewer的着色模塊僅支持「單個固定定向光源照亮OpenGL默認負Z軸」,因爲其文檔狀態如此。 所以當我修好燈光時,有些牆壁會變黑;當我用照相機使光線移動時,牆壁的陰影會不斷變化。GLObjViewer中的多個燈(OpenGL)

我現在想要的是讓所有的牆壁都很好地照亮,移動攝像機後它們的陰影不會改變。請建議我如何負擔得起? (如何在GLObjViewer或其他解決方案中使用多個燈光)。

可以找到GLObjViewer文檔和源代碼在這裏:http://www.dhpoware.com/demos/glObjViewer.html

回答

1

OpenGL的2光定位由模型視圖矩陣變換。這意味着在放置攝像機之後但在應用對象局部變換之前,您必須設置光源位置。

版本3之前的OpenGL支持至少8個指示燈(GL_LIGHT0 ... GL_LIGHT7)。可以獨立啓用和設置。後來的OpenGL版本完全由着色器驅動;燈光通過適當的着色器實現,燈光參數通過制服。

OpenGL-3兼容性和早期版本都有預定義的制服,例如gl_LightPosition[],它在本應用中使用。您可以通過相應的OpenGL狀態設置器來設置這些預定義的制服。 glLight…你的情況。

OpenGL-3.1核心,稍後放棄預定義的燈光制服,並將重擔放在程序員的實施上。

0

您還可能有一些運氣做:

glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, 1); 

這將計算從眼睛的原點的鏡面反射的座標系,而不是靜態地(平行的方向並朝着-Z軸)。