OpenGL – C++ Bài 6: Display List trong OpenGL

Hi. Chào mừng các bạn đến với chủ đề Học Lập Trình OpenGL Tại blog: Phát Triển Phần Mềm 123a-z
Bài viết hôm nay, chúng ta sẽ cùng tìm hiểu về Display list trong OpenGL.
1. Lý Thuyết Cơ Bản.

Thông thường khi chúng ta render một đối tượng nào đó.

Ví dụ như vẽ một cube, một sphere hay một đối tượng nào đó mà là một tập hợp của nhiều vertext.

Thì chúng ta thường xây dựng trong hàm RenderScene. Trong khi RenderScene là một hàm chạy liên tục và do đó đó chúng sẽ liên tục vẽ lại đối tượng.

Điều này làm cho chương trình trở nên chậm chạp, ì ạch nhất là khi đối tượng càng phức tạp và kích thước to lớn.

Do đó Display List được xây dựng để giải quyết vấn đề này.

Display List chỉ thực hiện gọi hàm render đối tượng một lần khi trong hàm Init().

Sau đó chúng sẽ lưu kết quả render đó vào trong bộ nhớ của display list.

Và khi nào cần đến đối tượng. Chỉ việc thực hiện gọi kết quả đã thực hiện xong.

Do đó những tính năng nào của sản phẩm trong đồ họa OpenGL mà ít thay đổi sẽ được đưa vào Display List để giải quyết cho bài toán tối ưu.

Note:

Giải quyết được vấn đề tối ưu, nhưng display list cũng có nhược điểm của nó.

Đó là khi đã thực hiện xong display list rồi thì kết quả đó sẽ không thể bị tác động bởi các nhân tốt khác thực hiện sau đó.

Bên cạnh đó. Không phải câu lệnh nào của OpenGL cũng có thể được đưa vào trong display list

glFlush, glFinish, glRenderMode, glEnableClientState, glVertextPointer….

2. Các Step thực hiện Display list trong OpenGL
+ Khái báo 1 biến toàn cục g_box

GLuint g_box;

+ Viết một hàm render một đối tượng nào đó mà bạn muốn. Ví dụ ở đây tôi viết hàm tạo cube như sau:

+ Gọi hàm Render đối tượng có Display List trong hàm Init của Opengl

và gán kết quả trả về cho biến toàn cục định nghĩa trong step 1

+ Cuối cùng trong hàm RenderScene ta chỉ việc dùng kết quả của Display List.

glCallList(g_box);

Đối tượng sẽ được render một cách rất tối ưu.

Full Code:

 

 

 

One thought on “OpenGL – C++ Bài 6: Display List trong OpenGL

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.