Demo key-frame

Một phần của tài liệu LUẬN VĂN: XÂY DỰNG GAME ENGINE ĐA NỀN TẢNG QUẢN LÝ TÀI NGUYÊN VÀ CHUYỂN ĐỘNG CỦA CÁC ĐỐI TƯỢNG ppt (Trang 43 - 45)

Như đã trình bày trong phần triển khai, để quản lí được đối tượng có các chuyển động, ta sẽ phải quản lí tất cả các key-frame. Mỗi key-frame sẽ có các thông tin về: vị trí các đỉnh, véc tơ normal, textcoord. Và trong tất cả các key-frame số đỉnh, véc tơ normal, textcoord là như nhau, chỉ khác nhau về vị trí. Hiện tại hỗ trợ loại file chứa các đối tượng có chuyển động ở dạng MD2. Trong dạng MD2, các đối tượng sẽ được xét luôn có các loại animation như: RUN, STAND, JUMP… và các loại animation đó được xác định bởi 3 thành phần:

- Key-frame bắt đầu - Key-frame kết thúc

- Số lượng fps cho 1s (số lượng khung hình)

Số lượng fps tính trong trường hợp lý tưởng để tính toán nội suy. Tuy nhiên, khóa luận này sẽ không tính toán nội suy dựa vào số fps.

// first, last, fps { 0, 39, 9 }, // STAND { 40, 45, 10 }, // RUN { 46, 53, 10 }, // ATTACK { 54, 57, 7 }, // PAIN_A { 58, 61, 7 }, // PAIN_B { 62, 65, 7 }, // PAIN_C { 66, 71, 7 }, // JUMP { 72, 83, 7 }, // FLIP { 84, 94, 7 }, // SALUTE { 95, 111, 10 }, // FALLBACK { 112, 122, 7 }, // WAVE { 123, 134, 6 }, // POINT { 135, 153, 10 }, // CROUCH_STAND { 154, 159, 7 }, // CROUCH_WALK { 160, 168, 10 }, // CROUCH_ATTACK { 196, 172, 7 }, // CROUCH_PAIN { 173, 177, 5 }, // CROUCH_DEATH { 178, 183, 7 }, // DEATH_FALLBACK { 184, 189, 7 }, // DEATH_FALLFORWARD { 190, 197, 7 }, // DEATH_FALLBACKSLOW { 198, 198, 5 }, // BOOM

36

Các model theo chuẩn MD2 sẽ có 21 loại animation và được định nghĩa trong danh sách trên.

Cách tính nội suy như sau (dùng nội suy bậc 1):

Phương thức setAnimation(type,duration) sẽ xét loại animation nào cho model. Từ bảng trên ta sẽ xác định được vị trí key-frame bắt đầu và vị trí key-frame kết thúc của loại animation đó. Biến duration là khoảng thời gian để chạy hết một loại animation đã được xét.

Đặt:

- first: vị trí key-frame bắt đầu - last: vị trí key-frame kết thúc

- time: thời gian chạy giữa 2 key-frame liên tiếp nhau - old_time: thời điểm key-frame thứ n được render. - curr_time: thời điểm hiện tại

Từ số lượng key-frame cho một animation (xác định bởi first và last) và thời gian chạy cho animtion đó (duration) ta sẽ tính được thời gian để chạy 1 key-frame

time= duration/(last-first+1)

Tại mỗi thời điểm ta xét (curr_time-old_time)>= time không? Nếu đúng thì ta sẽ chuyển đến key-frame thứ n+1 (key-frame tiếp theo) và gán lại old_time=curr_time, ngược lại tức là thời gian cho một key-frame vẫn chưa hết thì ta sẽ tính toán nội suy ra các frame mới dựa vào key-frame thứ n và n+1 và curr_time.

Như vậy với cách tính nội suy như trên kỹ thuật key-frame được triển khai.

Kết quả thực nghiệm:

Cấu hình máy chạy demo:  CPU: T7250 (2*2.0GHZ)  RAM: 2GB

 HDH: Windows Vista

 Card đồ họa: card tích hợp Intel(R) 965 Số khung hình /1s đạt được: ~70

37

Hình 27. Demo key-frame

Một phần của tài liệu LUẬN VĂN: XÂY DỰNG GAME ENGINE ĐA NỀN TẢNG QUẢN LÝ TÀI NGUYÊN VÀ CHUYỂN ĐỘNG CỦA CÁC ĐỐI TƯỢNG ppt (Trang 43 - 45)