Chiếu sáng bằng mô hình OpenGL cung cấp

Một phần của tài liệu Xây dựng game engine đa nền tảng hiệu ứng ánh sáng và vật liệu (Trang 30 - 32)

OpenGL cung cấp các API để định nghĩa nguồn sáng, thiết lập thông số về vật liệu cho các đối tượng được chiếu sáng bởi nguồn sáng.

Hình 18: Lớp LightSceneNode

Mỗi nguồn sáng cũng được coi là một nút, tức là lớp LightSceneNode dẫn xuất từ lớp SceneNode. Ngoài những thông tin được lưu ở SceneNode, lớp LightSceneNode lưu thông tin về Loại nguồn sáng (type), hướng (direction), cường độ các thành phần ánh sáng (Ka, Kd, Ks), góc giới hạn vùng chiếu sáng (outerCone), và sự thay đổi cường độ sáng theo khoảng cách (kC, kL, kQ). Phương thức render() được lớp LightSceneNode triển khai quá trình “bật” nguồn sáng bằng các câu lệnh OpenGL.

Như đã giới thiệu, ngoài ba thành phần sáng cơ bản, nguồn sáng còn có những tính chất riêng đặc tả sự khác nhau giữa các nguồn sáng. Dựa vào các tính chất này, GEM chia các nguồn sáng được chia làm 04 loại sau:

21

- Nguồn sáng môi trường (ambient light): nguồn sáng mô tả ánh sáng môi trường, có cường độ và màu sắc đồng đều ở mọi nơi trong khung cảnh 3D. - Nguồn sáng điểm (point light): nguồn sáng mô tả ánh sáng phát ra từ một vị

trí xác định trong khung cảnh 3D, phát ra theo mọi hướng và có cường độ giảm dần theo khoảng cách.

- Nguồn sáng có góc giới hạn chiếu (spot light): nguồn sáng này giống với nguồn sáng điểm, chỉ khác là ánh sáng phát ra trong một vùng giới hạn nhất định – vùng giới hạn này được đặc trưng bởi hình nón có đỉnh ở vị trí nguồn sáng và đường cơ sở hợp với trục chính một góc outerCone (ví dụ như đèn học, đèn sân khấu).

- Nguồn sáng có hướng song song (directional light): nguồn sáng này mô tả các nguồn sáng ở rất xa vật bị chiếu sáng, và có cường độ sáng gần như không đổi (ví dụ như mặt trời). Loại nguồn sáng này chỉ cần quan tâm đến hướng ánh sáng.

22

Do loại nguồn sáng được đặc trưng bởi các thuộc tính khác nhau, nên quá trình “bật” nguồn sáng của từng loại cũng khác nhau, theo các bước sau (Hình 19):

- Cập nhật ma trận Model: tính lại ma trận và định lại vị trí mới trong trong khung cảnh 3D nếu có sự thay đổi vị trí của nguồn sáng.

- Thiết lập vị trí, Cường độ, Màu sắc các thành phần sáng: Các bước này được thực hiện với tất cả các loại nguồn sáng.

- Nếu nguồn sáng là:

+ Nguồn sáng có góc giới hạn chiếu: Thiết lập vùng chiếu sáng.

+ Nguồn sáng có hướng song song: Thiết lập hướng chiếu sáng.

Các thiết lập thông số này sử dụng phương thức glLightfv(GLenum light, GLenum pname, const GLfloat * params) [8][12].

Một phần của tài liệu Xây dựng game engine đa nền tảng hiệu ứng ánh sáng và vật liệu (Trang 30 - 32)