2011-12-26 56 views
1

我想在我的环境中使用C++在opengl中创建路灯。我需要为此创建聚光灯,我已经编写了下面的代码,但它不能用作聚光灯。我做错了什么,或者你有什么解决方案来解决我的问题?在opengl中创建路灯

GLfloat ambientLight[] = {0.7f, 0.2f, 0.2f, 1.0f}; 
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambientLight); 
GLfloat directedLight[] = {0.7f, 0.7f, 0.7f, 1.0f}; 
GLfloat directedLightPos[] = {-10.0f, 15.0f, 20.0f, 0.0f}; 
glLightfv(GL_LIGHT0, GL_DIFFUSE, directedLight); 
glLightfv(GL_LIGHT0, GL_POSITION, directedLightPos); 

谢谢。

回答

2

如果这是你所有的光代码,你缺少一些重要的线。您只能定义环境光/漫反射光的颜色和明亮的位置。

  • 您需要启用与照明:glEnable(GL_LIGHTING)
  • 您需要启用您所使用的光:如:我不知道glEnable(GL_LIGHT0)
  • ,但我想你也需要定义一个材料(glMaterial) 。
  • 您需要定义你的光的方向:glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, direction);

两个其他注意事项:

  • 确保您的正常矢量设置正确,否则将无法看到结果
  • 如果我记得正确固定功能照明只适用于顶点而不适用于像素。所以如果你有一个光源超过一个单一的四边形,你将看不到任何光点。
+0

+1。另外:对于聚光灯,位置上的最后一个元素不需要为零,并且GL_SPOT_CUTOFF需要小于90(对于light0,默认为180)。 – 2011-12-26 16:56:55

+0

感谢您的回答。我编辑我的代码如下,但环境仍然很暗。我错过了什么? glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); GLfloat spotLightColour [] = {1.0,0.0,1.0}; GLfloat spotlightDirection [] = {0.0,-1.0,0.0}; GLfloat directedLightPos [] = {100.0f,100.0f,100.0f,10.0f}; glLightf(GL_LIGHT0,GL_SPOT_CUTOFF,45); glLightfv(GL_LIGHT0,GL_SPOT_DIRECTION,spotlightDirection); glLightfv(GL_LIGHT0,GL_POSITION,directedLightPos); glLightfv(GL_LIGHT0,GL_SPECULAR,spotLightColour); glLightf(GL_LIGHT0,GL_SPOT_EXPONENT,120); – goncag 2011-12-27 17:23:42

0

请注意,在“新”opengl(核心3. +)没有“照明”的支持。所有这些枚举和函数都被弃用。

所以,你可能想寻找其他的解决方案:

另外值得一说的是那些“老”的照明功能非常易于使用,他们有很多教学优势。