OpenGL Là Gì? Tổng Quan Về Tiêu Chuẩn Đồ Họa 3D

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ơ đồ OpenGLSơ đồ 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 Đí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)

  1. 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.
  2. 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ớ.
  3. Chỉnh sửa template của Code::Blocks:
    • Mở Notepad với quyền Administrator.
    • Mở file sentayho.com.vn từ đường dẫn C: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 glut32 bằng freeglut.
    • Mở file sentayho.com.vn từ đường dẫn C: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 glut32 bằng freeglut.
  4. Sao chép các file FreeGLUT:
    • Từ thư mục FreeGLUT đã giải nén, vào thư mục includeGL và 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 lib và 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 bin và sao chép file freeglut.dll.
    • Dán file đã sao chép vào thư mục C:WindowsSysWOW64.
  5. 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Đầu ra của chương trình mẫu