OpenGL (Open Graphics Library) là một tiêu chuẩn kỹ thuật đồ họa, định nghĩa một giao diện lập trình ứng dụng (API) cho việc hiển thị đồ họa 3D. Trước khi OpenGL ra đời, các công ty phát triển ứng dụng đồ họa thường phải viết lại phần đồ họa cho từng nền tảng hệ điều hành và phần cứng khác nhau. OpenGL giải quyết vấn đề này bằng cách cung cấp một “ngôn ngữ đồ họa” độc lập, tương thích với nhiều nền tảng và phần cứng, thậm chí cả những máy tính không hỗ trợ đồ họa cao cấp. Ứng dụng sử dụng OpenGL có thể tạo ra các hiệu ứng đồ họa tương tự trên bất kỳ hệ điều hành nào hỗ trợ bộ điều hợp đồ họa OpenGL.
OpenGL hoạt động bằng cách chỉ định một tập hợp các “lệnh” hoặc hàm được thực thi ngay lập tức. Mỗi lệnh này thực hiện một hành động vẽ hoặc tạo ra các hiệu ứng đặc biệt. Các lệnh này được tập hợp lại để tạo ra các hiệu ứng lặp đi lặp lại, độc lập với hệ điều hành. Tuy nhiên, OpenGL vẫn cung cấp các quy trình “glue” đặc biệt cho từng hệ điều hành, cho phép nó hoạt động trơn tru trong môi trường của hệ thống đó.
Sơ đồ OpenGL
OpenGL tích hợp nhiều tính năng, được chỉ định và yêu cầu thông qua API, bao gồm loại bỏ bề mặt ẩn, trộn alpha, khử răng cưa, làm mịn, tính toán pixel, theo dõi và biến đổi mô hình, và các hiệu ứng về không khí (sương mù, khói).
Silicon Graphics (SGI), nhà sản xuất máy trạm đồ họa tiên tiến, là đơn vị tiên phong trong việc phát triển OpenGL. Sau đó, các công ty khác trong Architecture Review Board, bao gồm DEC, Intel, IBM, Microsoft và Sun Microsystems, cũng tham gia. Việc phát triển ứng dụng sử dụng API OpenGL là miễn phí (ngoài chi phí học tập). Microsoft cũng cung cấp các thư viện OpenGL miễn phí cho người dùng trên các hệ thống Windows.
Mục Lục
Mục Đích và Tác Dụng Của OpenGL
OpenGL được thiết kế để đáp ứng các mục đích chính sau:
- Đơn giản hóa tương tác 3D: Cung cấp một giao diện lập trình thống nhất để tương tác với các mô hình không gian 3 chiều.
- Hỗ trợ phần cứng: Tối ưu hóa hiệu năng bằng cách tận dụng tối đa các chức năng của phần cứng đồ họa 3D khác nhau. Khi phần cứng không hỗ trợ đầy đủ, OpenGL có thể sử dụng sức mạnh phần mềm để xử lý.
- Chuyển đổi hình học: Tiêu chuẩn OpenGL nhận các nguyên hàm hình học như điểm, đường thẳng và đa giác, sau đó chuyển đổi chúng thành các điểm đồ họa (pixel) trên màn hình. Quá trình này được thực hiện thông qua luồng ống dẫn đồ họa (graphics pipeline), còn được gọi là “bộ máy trạng thái OpenGL”.
Hướng Dẫn Cài Đặt OpenGL Trên Các Hệ Điều Hành
Cài Đặt OpenGL Trên Ubuntu
Để cài đặt OpenGL trên Ubuntu, bạn có thể sử dụng lệnh sau trong Terminal:
sudo apt-get install freeglut3-dev
Để biên dịch chương trình OpenGL trên Ubuntu:
gcc filename.c -lGL -lGLU -lglut
Trong đó, filename.c là tên của file chứa chương trình của bạn.
Cài Đặt OpenGL Trên Windows (Code::Blocks)
- Tải và cài đặt Code::Blocks: Truy cập trang chủ Code::Blocks để tải xuống và cài đặt phiên bản mới nhất.
- Tải và giải nén FreeGLUT: Tải file zip từ liên kết “Download freeglut 3.0.0 for MinGW” (hoặc phiên bản mới hơn nếu có) và giải nén vào một thư mục dễ nhớ.
- Chỉnh sửa template của Code::Blocks:
- Mở Notepad với quyền Administrator.
- Mở file
sentayho.com.vntừ đường dẫnC:Program Files (x86)CodeBlocksshareCodeBlockstemplates. Chọn “All Files” để hiển thị tất cả các file. - Tìm và thay thế tất cả các chuỗi
glut32bằngfreeglut. - Mở file
sentayho.com.vntừ đường dẫnC:Program Files (x86)CodeBlocksshareCodeBlockstemplateswizardglut. Chọn “All Files” để hiển thị tất cả các file. - Tìm và thay thế tất cả các chuỗi
glut32bằngfreeglut.
- Sao chép các file FreeGLUT:
- Từ thư mục FreeGLUT đã giải nén, vào thư mục
includeGLvà sao chép tất cả các file. - Dán các file đã sao chép vào thư mục
C:Program Files (x86)CodeBlocksMinGWincludeGL. - Từ thư mục FreeGLUT đã giải nén, vào thư mục
libvà sao chép hai file.a. - Dán các file đã sao chép vào thư mục
C:Program Files (x86)CodeBlocksMinGWlib. - Từ thư mục FreeGLUT đã giải nén, vào thư mục
binvà sao chép filefreeglut.dll. - Dán file đã sao chép vào thư mục
C:WindowsSysWOW64.
- Từ thư mục FreeGLUT đã giải nén, vào thư mục
- Tạo project OpenGL trong Code::Blocks:
- Mở Code::Blocks.
- Chọn
File > New > Project > GLUT project > Next. - Đặt tên cho project và chọn
Next. - Chọn đường dẫn đến thư mục MinGW (thường là
C:Program Files (x86)CodeBlocksMinGW) làm vị trí của GLUT. - Nhấn
OK > Next > Finish.
Kiểm Tra Hoạt Động Của OpenGL
Đoạn code C sau đây minh họa cách vẽ một hình tròn đơn giản bằng OpenGL:
// C program to demonstrate
// drawing a circle using
// OpenGL
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <GL/glut.h>
#define PI 3.142857
// function to initialize
void myInit (void)
{
// making background color black as first
// 3 arguments all are 0.0
glClearColor(0.0, 0.0, 0.0, 1.0);
// making picture color green (in RGB mode), as middle argument is 1.0
glColor3f(0.0, 1.0, 0.0);
// breadth of picture boundary is 1 pixel
glPointSize(1.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
// setting window dimension in X- and Y- direction
gluOrtho2D(-780, 780, -420, 420);
}
void display (void)
{
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_POINTS);
float x, y, i;
// iterate y up to 2*pi, i.e., 360 degree
// with small increment in angle as
// glVertex2i just draws a point on specified co-ordinate
for ( i = 0; i < (2 * PI); i += 0.001)
{
// let 200 is radius of circle and as,
// circle is defined as x=r*cos(i) and y=r*sin(i)
x = 200 * cos(i);
y = 200 * sin(i);
glVertex2i(x, y);
}
glEnd();
glFlush();
}
int main (int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
// giving window size in X- and Y- direction
glutInitWindowSize(1366, 768);
glutInitWindowPosition(0, 0);
// Giving name to window
glutCreateWindow("Circle Drawing");
myInit();
glutDisplayFunc(display);
glutMainLoop();
}
Để biên dịch chương trình trên trong Ubuntu, sử dụng lệnh:
gcc filename.c -lGL -lGLU -lglut -lm
Trong đó, filename.c là tên file chứa chương trình.
Kết quả của chương trình sẽ hiển thị một hình tròn màu xanh lá cây trên nền đen.
Đầu ra của chương trình mẫu
