OpenGL学习笔记 第二周:光

光源基础

  • glEnable(GL_LIGHTING) 开启光的使用
  • glEnable(GL_LIGHT0) 使用第一个光,在OpenGL中默认有8个light可以使用

DirectionLight

  • 平行光最重要的属性是位置。可以通过下面的代码设置:
1
2
   float LightPos[] = { 0.0f,1.0f,0.0f,0.0 };
glLightfv(GL_LIGHT0, GL_POSITION, LightPos);
  • glLightfv可以用来设置光对象的各种属性,比如环境光、漫反射、高光等属性
1
2
3
glLightfv(GL_LIGHT0, GL_AMBIENT, whiteColor);
glLightfv(GL_LIGHT0, GL_DIFFUSE, whiteColor);
glLightfv(GL_LIGHT0, GL_SPECULAR, whiteColor);

PointLight

  • 点光源的基本参数

image

  • 从图中也可以看出来有三个属性,分别是
1
2
3
4
5
6
7
8
9
10
   // 注意此处w的值是1
float pos[] = { x, y, z, 1.0f };
glLightfv(mLightIdentifier, GL_POSITION, pos);

// 常量衰减
glLightf(mLightIdentifier, GL_CONSTANT_ATTENUATION, v);
// 线性衰减
glLightf(mLightIdentifier, GL_LINEAR_ATTENUATION, v);
// 平方衰减
glLightf(mLightIdentifier, GL_QUADRATIC_ATTENUATION, v);

SpotLight

  • 如图所示,探照灯中最重要的是三个属性:
    • 朝向
    • 聚光度(exponent),某个范围内光是不衰减的
    • 范围(cutoff),超出了就不收光的影响
    • 后面两个是角度

image

1
2
3
glLightfv(mLightIdentifier, GL_SPOT_DIRECTION, dir);
glLightf(mLightIdentifier, GL_SPOT_EXPONENT, v);
glLightf(mLightIdentifier, GL_SPOT_CUTOFF, v);

总结

  • 其实从GL.h这个头文件就可以看到OpenGL中光的基本操作,从这些define中就可以看到前四个是光的基本属性,同时适用于平行光。聚光度和点光源各有自己的属性。
1
2
3
4
5
6
7
8
9
10
11
/* LightParameter */
#define GL_AMBIENT 0x1200
#define GL_DIFFUSE 0x1201
#define GL_SPECULAR 0x1202
#define GL_POSITION 0x1203
#define GL_SPOT_DIRECTION 0x1204
#define GL_SPOT_EXPONENT 0x1205
#define GL_SPOT_CUTOFF 0x1206
#define GL_CONSTANT_ATTENUATION 0x1207
#define GL_LINEAR_ATTENUATION 0x1208
#define GL_QUADRATIC_ATTENUATION 0x1209
  • 支持的光源
1
2
3
4
5
6
7
8
9
/* LightName */
#define GL_LIGHT0 0x4000
#define GL_LIGHT1 0x4001
#define GL_LIGHT2 0x4002
#define GL_LIGHT3 0x4003
#define GL_LIGHT4 0x4004
#define GL_LIGHT5 0x4005
#define GL_LIGHT6 0x4006
#define GL_LIGHT7 0x4007
  • 目前还没学习到的
1
2
3
#define GL_LIGHT_MODEL_LOCAL_VIEWER       0x0B51
#define GL_LIGHT_MODEL_TWO_SIDE 0x0B52
#define GL_LIGHT_MODEL_AMBIENT 0x0B53
# OpenGL
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×