Để xây dựng hình ảnh cho một hạt lửa, chúng ta sẽ sử dụng kỹ thuật alpha channel. Đây là một kỹ thuật tạo mặt nạ cho ảnh bipmap trong đồ họa vi tính. Đầu vào của quá trình này là một ảnh bipmap gốc ban đầu và một ảnh bipmap đen trắng dùng để làm alpha channel. Thực chất của quá trình này là thêm vào mỗi pixel ảnh gốc một chỉ số A cho độ trong suốt của pixel đó. Ngoài 3 giá trị R, G, B của màu sắc. A = 1 tương ứng với điểm màu đen trên alpha channel, khi đó pixel của ảnh gốc sẽ bị mờ hoàn toàn. A = 0 tương ứng với điểm màu trắng trên alpha channel, khi đó pixel của ảnh gốc sẽ hoàn toàn không bị mờ. Sở dĩ ảnh đen trắng được chọn làm alpha channel bởi vì với loại ảnh này, mỗi pixel có các giá trị R, G, B bằng nhau, do đó ta chỉ cần lựa chọn một trong những chỉ số này để làm chỉ số A của ảnh cần xử lý [9].
Hình 2.15.Cộng ảnh Alpha Channel vào ảnh để tạo mặt nạ
Thuật toán để thêm một alpha channel vào một ảnh bipmap như sau: char* addAlphaChannel(Image* image, Image* alphaChannel) { // An pixel have 4 byte to store values of RED, GREEN, BLUE, // ALPHA
char* pixels = new char[image->width * image->height * 4]; // With each pixel, the 3 third bytes store RED, GREEN, BLUE // value of original image
// The 4th value (ALPHA value) will be the RED value of alpha // channel image
for(int y = 0; y < image->height; y++) { for(int x = 0; x < image->width; x++) {
// Assign 3 values of original image to new image for(int j = 0; j < 3; j++) {
pixels[4 * (y * image->width + x) + j] =
image->pixels[3 * (y * image->width + x) + j]; }
// Assign RED value of alpha image to the 4th value of // new image pixels[4 * (y * image->width + x) + 3] = alphaChannel->pixels[3 * (y * image->width + x)]; } } return pixels; }
Sau khi thực hiện thuật toán này, ta sẽ có một ảnh mới với màu sắc của ảnh gốc, thêm vào một chỉ số của độ trong suốt cho từng pixel của ảnh alpha channel. Hình ảnh hạt lửa ban đầu được xây dựng theo cách này, do đó màu sắc và hình dạng của hạt lửa sẽ phụ thuộc vào hai ảnh được chọn làm ảnh gốc và alpha channel. Hình ảnh tổng hợp sẽ tham gia vào các chuyển động và biến đổi của riêng từng hạt cho ta cảm giác về màu sắc và độ trong suốt của ngọn lửa. Màu sắc của ngọn lửa theo nhiệt độ
Màu đỏ
Vẫn có thể nhìn thấy: 525 °C (980 °F)
Đỏ tối: 800 °C (1,500 °F) Đỏ vừa: 900 °C (1,700 °F) Đỏ sáng: 1,000 °C (1,800 °F) Màu cam Sậm: 1,100 °C (2,000 °F) Sáng: 1,200 °C (2,200 °F) Màu trắng Hơi trắng: 1,300 °C (2,400 °F) Sáng: 1,400 °C (2,600 °F) Sáng lóa: 1,500 °C (2,700 °F)
Hình 2.16. Tạo Particle System mô phỏng ngọn lửa từ các hạt được cộng thêm Alpha Channel