Các bạn đã thấy thông số mới trong hàm glEnable() và glDisable(), các
thông số này cho phép chúng ta sử dụng ánh sáng trong khi tạo đồ
vật.Opengl cung cấp cho chúng ta 8 nguồn sáng mà chương trình trên mới
chỉ sử dụng một nguồn sáng LIGHT0, hàm glNormal3dv() thiết lập véc tơ
pháp tuyến cho mỗi mặt chúng ta vẽ, vì thế khi vật thể quay quanh trục thì
ta sẽ thấy độ sáng tối thay đổi.
Trong chương trình light0.cpp trên chúng ta không sử dụng màu nên màu
sẽ được xác định là màu mặc định như các bạn đã thấy.Tiếp theo đây tôi xin
giới thiệu cách sử dụng vật liệu để tạo vật với các màu sắc ấn tượng khác
nhau.Chúng ta khai báo dữ liệu sau:
GLfloat ambient[]={ 0.2,0.2,0.2,1.0};
GLfloat diffuse[]={ 0.8,0.0,0.0,1.0};
GLfloat specular[]={0.5,0.5,0.5,1.0};
GLfloat shininess=40.0;
Trong đó các thông số trên đều được đặt theo hệ RGBA(như đã đề cập ở
các phần trên), chính vì thế mà chúng có 4 giá trị.Thông số ambient biểu
hiện cho độ sáng của môi trường bên ngoài, diffuse là độ khuếch tán,
specular là độ phản xạ và shininess là độ bóng(độ bóng sáng). Các thông số
trên được hàm glMaterial*() sử dụng để tạo vật thể của chúng ta.Hãy quan
sát cách khai báo hàm trên:
glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT,ambient);
glMaterialfv(GL_FRONT_AND_BACK,GL_DIFFUSE,diffuse);
glMaterialfv(GL_FRONT_AND_BACK,GL_SPECULAR,specular);
glMaterialf(GL_FRONT_AND_BACK,GL_SHININESS,shininess);
Chú ý là lệnh cuối cùng không phải là “fv” như bình thường, vì shininess
chỉ là một số.
Đây là mã nguồn của chương trình.
/*filename light1.cpp*/
#ifdef unix
#include <GL/gl.h>
#include "aux.h"
#define CALLBACK