Chương 5: Áp dụng OpenGLES để tạo ứng dụng 3D trên Andro
5.7 Màu sắc và tơ bóng (Color and Shading):
Tất cả màu sắc trong OpenGL được đại diện bởi 4 giá trị, 3 giá trị màu đỏ, xanh lá cây và xanh lam, cuối cùng là giá tri alpha, điều này chỉ thể hiện rõ ràng 1 màu. Để hiển thị nhiều màu pha trộng nhau, ta sẽ sử dụng một mảng màu.
Ví dụ:
Khởi tạo một mảng tam giác:
float[] triangle = {
0.25f, 0.25f, 0.0f, 0.75f, 0.25f, 0.0f,
0.25f, 0.75f, 0.0f, };
Tiếp theo, tạo ra một mảng màu, mỗi đỉnh là một màu sắc khác nhau, màu đỏ, xanh lá cây và xanh lam:
float[] colors = {
1.0f, 0.0f, 0.0f, 1.0f, // point 0 red 0.0f, 1.0f, 0.0f, 1.0f, // point 1 green 0.0f, 0.0f, 1.0f, 1.0f, // point 2 blue
};
Một biến boolean shaded được tạo để theo dõi xem có được đánh bóng hay khơng:
boolean shaded = false;
Thiết lập phép chiếu trực giao:
private void init(GL10 gl) {
gl.glClearColor(0.0f, 0.0f, 0.0f,0.0f);
gl.glMatrixMode (GL10.GL_PROJECTION); gl.glLoadIdentity ();
gl.glOrthof(0.0f, 1.0f, 0.0f, 1.0f, -1.0f, 1.0f);
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, triangle);
Sử dụng hàm glColorPointer để thiết lập cho mảng màu, hàm này làm việc giống như hàm glVertexPointer, chúng có 4 tham số và tham số đầu tiên để xác định có 4 float (một giá trị màu) cho mỗi đỉnh:
gl.glColorPointer(4, GL10.GL_FLOAT, 0, colors);
Kích hoạt các đỉnh và mảng màu:
gl.glEnableClientState (GL10.GL_VERTEX_ARRAY); gl.glEnableClientState (GL10.GL_COLOR_ARRAY);
Bây giờ ta thêm màu và shading (tơ bóng) vào hình. Có 2 loại tơ bóng, được xác định bằng cách sử dụng hàm glShadeModel, hàm này sẽ đưa ra một trong hai tham số GL_FLAT và GL_SMOOTH để xác định loại tơ bóng và GL_SMOOTH được thiết lập theo mặc định.
}
Thiết lập chế độ màn hình hiển thị, trong lời gọi hàm glDrawArrays ta sử dụng
cờ GL_TRIANGLES để vẽ 3 đỉnh của tam giác. Kết quả:
Hình 21 – Kết quả màu sắc và tơ bóng