Hàm chất liệu (Texture Functions)

Một phần của tài liệu Tài liệu Giới thiệu về lập trình game 3D sử dụng OpenGL doc (Trang 35 - 39)

71

Trong phần trước chúng ta đã biết cách làm thế nào

để nạp một ảnh bitmap và hiển thị nó như là chất liệu của đối tượng. Bạn đã được giới thiệu ngắn gọn về hàm glTexParameterf.

Phần này sẽ thảo luận tiếp về chức năng này với nhiều khía cạnh khác nhau.

Texture Filters: bộ lọc chất liệu cho phép chất liệu được hiện thị cùng với các chất lượng khác nhau

Repeating and Clamping: chất liệu có thể được lặp đi lặp lại trên đối tượng.

Mipmaps: Mipmaps là tạo ra thêm chất liệu của cùng một hình ảnh. Nếu bạn có một bức ảnh cỡ 64x64. Hình ảnh thêm được tạo ra (32x32, 16x16, ..., 1x1). Chất liệu chính xác sẽ được hiện thị tùy thuộc vào khoảng cách của mảng đối tượng. rõ ràng các mảng đối tượng ở xa hơn thì sử dụng lớp chất liệu nhỏ hơn. Điều này có thể tiết kiệm được thời gian xử lý.

Demo code

Chúng ta sẽ tạo ra 4 chất liệu khác nhau trong hướng dẫn này. Chúng tôi cũng muốn theo dõi chất liệu bằng cách sử dụng biến filter.

Tọa độ chất liệu chúng ta vẫn giữ nguyên ngoại trừ các bề mặt bên. Lưu thông tin mà chúng tôi cho rằng có giá trị từ 0 đến 1. Chúng ta có thể sử dụng giá trị lớn hơn 1. Nhưng điều này sẽ gây ra lạp lại chất liệu hay dừng khi đạt được 1. điều này sẽ được giải thích rõ hơn ở phần dưới.

73

Chúng ta xây dựng hàm loadTextures và nạp file .bmp như phần trước.

Chúng ta cần phải tạo ra 4 tên chất liệu

Chúng ta lựa chọn chất liệu đầu tiên và thiết lập các thuộc tính như ở hướng dẫn trước. Sự khác biệt ở đây là chúng ta dùng cờ GL_NEAREST trong thuộc tính của bộ lọc thay cho GL_LINEAR. Bộ lọc này nhanh hơn nhưng nhìn không được tốt lắm.

75

Trong chất liệu thứ hai chúng tôi sử dụng GL_LINEAR để tạo ra chất liệu nhìn tốt hơn. Đây là những gì đã được sử dụng trong hướng dẫn trước.

Chất liệu thứ ba cũng giống như chất liệu thứ hai ngoại trừ hai thuộc tính mới được thiết lập. Đấy là thuộc tính GL_TEXTURE_WRAP_S và GL_TEXTURE_WRAP_T. Điều này chỉ ra chất liệu làm thế nào để bao bọc theo các hướng ngang và dọc tương ứng.

Thứ tư là sử dụng các kĩ thuật cao của mipmaps. Mipmaps yêu cầu bộ nhớ nhiều hơn nhưng nó có thể làm cho chương trình của bạn chạy nhanh hơn rất nhiều. Để tự động tạo ra mipmaps bạn có thể thiết lập thuộc tính L_GENERATE_MIPMAP tới GL_TRUE bằng lời gọi hàm glParameterf.

77

Bộ lọc này phải được thiết lập GL_X_MIPMAP_Y nơi mà X và Y có thể LINEAR hoặc NEAREST. Điều này dùng để xác định chất lượng của chất liệu được hiển thị. Rõ ràng NEAREST nhìn không tốt bằng LINEAR.

Một phần của tài liệu Tài liệu Giới thiệu về lập trình game 3D sử dụng OpenGL doc (Trang 35 - 39)