Có lẽ bạn chưa biết, một số tựa game gắn liền với tuổi thơ của bạn như America's Army, Call of Duty, CounterStrike 1.6, Half-Life, Minecraft được xây dựng bằng OpenGL.
Open GL (tên đầy đủ là Open Graphics Library) là một tiêu chuẩn kỹ thuật đồ họa được tạo ra nhằm mục đích định ra một giao diện lập trình ứng dụng đồ họa ba chiều hoặc hai chiều.
Hãy cùng mình thử tìm hiểu về thư viện này nhé!



1. OpenGL là gì
OpenGL là bộ thư viện đồ họa có khoảng 150 hàm giúp xây dựng các đối tượng và giao tác cần thiết trong các ứng dụng tương tác 3D.
- Những thứ OpenGL không hỗ trợ.
- Bản thân OpenGL không có sẵn các hàm nhập xuất hay thao tác trên window.
- OpenGL không có sẵn các hàm cấp cao để xây dựng các mô hình đối tượng,
thay vào đó, người dùng phải tự xây dựng từ các thành phần hình học cơ bản (điểm, đoạn thẳng, đa giác).
Rất may là một số thư viện cung cấp sẵn một số hàm cấp cao được xây dựng nên từ OpenGL. GLUT (OpenGL Utility Toolkit) là một trong số đó và được sử dụng rộng rãi. Trong tài liệu này, chúng ta sẽ sử dụng chủ yếu là OpenGL và GLUT.
Những thứ OpenGL hỗ trợ là các hàm đồ họa:
- Xây dựng các đối tượng phức tạp từ các thành phần hình học cơ bản (điểm, đoạn, đa giác, ảnh, bitmap).
- Sắp xếp đối tượng trong 3D và chọn điểm thuận lợi để quan sát.
- Tính toán màu sắc của các đối tượng (màu sắc của đối tượng được quy định bởi điều kiện chiếu sáng, texture của đối tượng, mô hình được xây dựng hoặc là kết hợp của cả 3 yếu tố đó).
- Biến đổi những mô tả toán học của đối tượng và thông tin màu sắc thành các pixel trên màn hình (quá trình này được gọi là resterization).
2. Cấu trúc lệnh trong OpenGL
OpenGL sử dụng tiền tố gl và tiếp theo đó là những từ được viết hoa ở chữ cái đầu để tạo nên tên của một lệnh, ví dụ glClearColor(). Tương tự, OpenGL đặt tên các hằng số bắt đầu bằng GL_ và các từ ti ếp sau đều được viết hoa và cách nhau bởi dấu “_”.
Ví dụ: GL_COLOR_BUFFER_BIT.
Bên cạnh đó, với một số lệnh, để ám chỉ số lượng cũng như kiểu tham số được truyền, một số hậu tố được sử dụng như trong bảng sau:


Ví dụ: glVertex2i (1,3) tương ứng với xác định một điểm (x,y) với x, y nguyên (integer).
Lưu ý: OpenGL có định nghĩa một số kiểu biến, việc sử dụng các định nghĩa này thay vì định nghĩa có sẵn của C sẽ tránh gây lỗi khi biên dịch code trên một hệ thống khác. Một vài lệnh của OpenGL kết thúc bởi vậy ám chỉ rằng tham số truyền vào là một vector.
Ví dụ: glColor3fv(color_array) thì color_array là mảng 1 chiều có 3 phần tử là float.
3. OpenGL Utility Toolkit (GLUT)
Để khắc phục một số nhược điểm của OpenGL, GLUT được tạo ra với với nhiều hàm hỗ trợ
- Quản lý window
- Display callback
- Nhập xuất (bàn phím, chuột,...)
- Vẽ một số đối tượng 3D phức tạp (mặt cầu, khối hộp,...)
Tên các hàm của GLUT đều có tiền tố là glut. Để hiểu rõ hơn về GLUT, người đọc tham khảo