OpenGL照明

And*_*ust 1 c++ opengl

我试图弄清楚如何在OpenGL中使用Lighting引擎.我的目标是在相机的方向模拟一个火炬.

gluLookAt(  x, y, z,
        x+lx, y+ly,  z+lz,
        0.0f, 1.0f,  0.0f);
GLfloat light_position[] = { x+1, y, z+1, 0.0f };
GLfloat light_direction[] = { x+lx,y+ly,z+lz};
GLfloat light_angle[] ={20};
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION,light_direction);
glLightfv(GL_LIGHT0,GL_SPOT_CUTOFF,light_angle);
Run Code Online (Sandbox Code Playgroud)

但是当我执行它时,只显示少量的环境光,就像方向上的光束一样.我究竟做错了什么?

Kos*_*Kos 5

OpenGL灯不会绘制"光束",它们只影响几何体的照明方式.

可见的"光束"(就像你在浓雾如雾或轻云中有强烈的定向光时所看到的)通常被称为"光轴".这是你想看到的那种效果吗?

http://developer.amd.com/media/gpu_assets/Mitchell_LightShafts.pdf


还要记住,旧的OpenGL 1照明模型是按顶点的.如果您将光线指向平坦的表面,那么要么......

  • 将表面细分为足够的顶点,使光线形状可见,
  • 在着色器中实现每像素着色.