2013-06-04 50 views
1

我的場景很簡單,我有兩個球體彼此靠得很近。我在場景中有一個點光源,並將它的位置設置在兩個球體中的一個球體內。但其他球體仍然可以從該點光線獲得光線。我想要的是光線被球體遮擋。從點光源的GL遮擋

我的背景是如下:

glShadeModel(GL_SMOOTH); 

glEnable(GL_DEPTH_TEST); 
glDepthFunc(GL_LEQUAL); 
glEnable(GL_CULL_FACE); 
glCullFace(GL_BACK); 

glEnable(GL_MULTISAMPLE); 
glHint(GL_LINE_SMOOTH_HINT, GL_NICEST); 
glHint(GL_POINT_SMOOTH_HINT, GL_NICEST); 
glHint(GL_POLYGON_SMOOTH_HINT, GL_NICEST); 

glClearColor(0.0f, 0.0f, 0.0f, 0.0f); 
glEnable(GL_COLOR_MATERIAL); 
glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE); 
glEnable(GL_LIGHTING); 
// Light's color 
GLfloat ambientColor[] = { 0.3f, 0.3f, 0.3f, 1.0f }; 
GLfloat diffuseColor[] = { 1.0f, 0.0f, 1.0, 1.0f }; 
GLfloat lightPosition[] = {0, 0, 0, 1.0f }; 
glLightfv(GL_LIGHT0, GL_AMBIENT, ambientColor); 
glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuseColor); 
glLightfv(GL_LIGHT0, GL_POSITION, lightPosition); 
glEnable(GL_LIGHT0); 

難道我錯過了什麼?

回答

5

當光線被表面與光線之間的插入物體阻擋時,稱爲影子。固定功能的OpenGL照明系統不會做陰影。 OpenGL只是一個三角形渲染器;它不知道對象,場景或任何東西。任何光線的基本假設是光線和三角形之間沒有遮擋表面。

如果你想要陰影,那麼你將不得不手動實現各種陰影技術之一。