Định nghĩa một nguồn sáng

Một phần của tài liệu đồ án kỹ thuật cơ khí Mô phỏng quá trình gia công CNC trên máy DENFORD (Trang 52)

IV. Chiếu sáng đối tượng

2. Định nghĩa một nguồn sáng

OpenGL cho phép khởi tạo và quản lý tám nguồn khác nhau trong một chương trình, mỗi nguồn sáng có nhiều thuộc tính để kiểm soát các ánh sáng tác động đến một cảnh. Các ánh sáng này bao gồm ánh sáng môi trường, ánh sáng khuyếch tán, ánh sáng phản chiếu và ánh sáng vị trí. Cần xác định các thành phần phần trăm màu đỏ, xanh dương, xanh lục trong các thuộc tính ánh sáng môi trường, khuyếch tán, và phản chiếu; đồng thời phải xác định các tọa độ X, Y, Z và W của nguồn sáng. Công việc này được quản lý bằng các mảng chứa các giá trị yêu cầu.

a. Thiết lập các mảng giá trị ánh sáng

Các mảng sau chứa các giá trị dương định nghĩa một nguồn sáng: GLfloat ambientLight()[]={0.3f,0.3f,0.3f,0.1f};

GLfloat diffuseLight()[]={0.5f,0.5f,0.5f,0.1f}; GLfloat specularLight()[]={0.0f,0.0f,0.0f,0.1f}; GLfloat positionLight()[]={0.0f,0.0f,1.0f,0.0f};

Trong mảng ambientLight()[], lượng màu được thiết lập cho ánh sáng môi trường gồm 30% đỏ và 30% xanh dương, 30% xanh lục. (Giá trị 1.0 là thành phần alpha, có thể bỏ qua). Mảng diffuselightO[], chứa lượng màu cho ánh sáng khuyếch tán, gồm 50% đỏ và 50% xanh dương, và 50% xanh lục. Do các thành phần màu trong các mảng trên bằng nhau, chúng định nghĩa ánh sáng môi trường và ánh sáng khuyếch tán là ánh sáng trắng với tốc độ sáng riêng. Thay đổi tỷ lệ phần trăm các thành phần màu sẽ mang lại ánh sáng màu; Ví dụ lượng màu đỏ lớn hơn lượng màu khác, thì ánh sáng sẽ mang màu đỏ. (Các giá trị RBGA từ 0.0 đến 1.0). Mảng specularaLight0[]

chứa các giá trị của ánh sáng trắng tối nhất (hay không có tí ánh sáng nào). Cuối cùng, mảng positionLight0[] chứa vị trí nguồn sáng, xác định bởi các tọa độ X, Y, X, và W. Trong đó, W chỉ có hai giá trị 1 và 0. Nếu W bằng 0, ta có nguồn sáng theo hướng, là nguồn sáng ở khoảng cách vô hạn

so với cảnh, tức các tia sáng đến đối tượng là song song với nhau. Mặt trời là ví dụ cho nguồn sáng vô hướng. Nếu W bằng 1, ta có nguồn sáng theo vị trí, là nguồn sáng có vị trí gần cảnh, nên các tia sáng chiếu vào đối tượng theo các góc khác nhau. Đèn là nguồn sáng theo vị trí.

b. Chuyển mảng cho Open GL

Các giá trị định nghĩa nguồn sáng được chuyển cho Open GL bằng cách gọi hàm glLight() nh sau:

glLightfv(GL_LIGHT0,GL_AMBIENT, ambientLight0); glLightfv(GL_LIGHT0,GL_DIFFUSE, diffuseLight0); glLightfv(GL_LIGHT0,GL_SPECULAR, specularLight0);

glLightfv(GL_LIGHT0,GL_POSITION, positionLight0);

Do một số chương trình Open GL có thể có tám nguồn sáng, đối số đầu tiên là hằng số từ GL_LIGHT0 đến GL_LIGHT7.

Đối số thứ hai là một trong mười hằng số ở bảng 4.4. Các hằng số thường dùng với các hàm này là GL_AMBIENT, GL_DIFFUSE, GL_SPECULAR,

và GL_POSITION.

Bảng 4.4. Hằng số tính chất cho hàm glight()

Hằng sè Ý nghĩa

GL_AMBIENT Xác định ánh sáng môi trường

GL_CONSTANT_ÂTTENUTION Xác định lượng giảm ánh sáng theo một hệ số

GL_DIFFUSE Xác định ánh sáng khuyếch tán

GL_POTION Xác định vị trí nguồn sáng

GL_QUADRATIC_ATTENUATIO N

Xác định lượng giảm ánh sáng theo bình phương khoảng cách từ nguồn sáng đến đối tượng

GL_SPECULAR Xác định ánh sáng khoảng chiếu

GL_SOT_CUTOFF Xác định góc trải của đèn chiếu GL_SPOT_DIRECTION Xác định hướng đèn chiếu

GL_SPOT_EXPONENT Xác định cường độ đèn chiếu, có tính đến góc của ánh sáng

Khi đã có định nghĩa nguồn sáng, ta phải kích hoạt chúng, tương tự nh việc bật công tắc đèn, bằng hàm glEnable();

glEnable (GL_LIGHTING); glEnable (GL_LIGHT0);

Một phần của tài liệu đồ án kỹ thuật cơ khí Mô phỏng quá trình gia công CNC trên máy DENFORD (Trang 52)

Tải bản đầy đủ (DOC)

(78 trang)
w