OpenGL (Open Graphics Library[3]) là một API đa nền tảng, đa ngôn ngữ cho render đồ họa vector 2D3D. API thường được sử dụng để tương tác với bộ xử lý đồ họa (GPU), nhằm đạt được tốc độ render phần cứng.

OpenGL
Opengl-logo.svg
Video games thuê ngoài tính toán render thời gian thực cho GPU qua OpenGL. Kết quả render không được gửi trở lại bộ nhớ chính mà thay vào đó là bộ đệm khung của bộ nhớ video. Sau đó bộ điều khiển hiển thị sẽ gửi dữ liệu này đến thiết bị hiển thị.
Video games thuê ngoài tính toán render thời gian thực cho GPU qua OpenGL. Kết quả render không được gửi trở lại bộ nhớ chính mà thay vào đó là bộ đệm khung của bộ nhớ video. Sau đó bộ điều khiển hiển thị sẽ gửi dữ liệu này đến thiết bị hiển thị.
Thiết kế bởiSilicon Graphics
Phát triển bởiKhronos Group
(trước đây ARB)
Phát hành lần đầu30 tháng 6 năm 1992; 28 năm trước (1992-06-30)
Phiên bản ổn định
4.6 / 31 tháng 7 năm 2017; 3 năm trước (2017-07-31)
Viết bằngC[1]
Thể loạiAPI đồ họa 3D
Giấy phép
  • Giấy phép nguồn mở để sử dụng S.I: Đây là một Free Software License B được mô phỏng chặt chẽ trên các giấy phép BSD, X và Mozilla.
  • Giấy phép nhãn hiệu cho những người được cấp phép mới muốn sử dụng nhãn hiệu và biểu trưng OpenGL và yêu cầu sự tuân thủ.[2]
Websiteopengl.org

Silicon Graphics, Inc. (SGI) Bắt đầu phát triển OpenGL năm 1991 và phát hành nó vào 30 tháng 6 năm 1992;[4][5] Nó dùng trong các ứng dụng CAD, thực tế ảo, mô phỏng khoa học, mô phỏng thông tin, video game. Từ năm 2006, OpenGL được quản lý bởi consortium công nghệ phi lợi nhuận Khronos Group. Đối thủ chính của OpenGL là DirectX của Microsoft.

Thiết kếSửa đổi

 
An illustration of the graphics pipeline process

Đặc tả OpenGL mô tả một API trừu tượng để vẽ đồ họa 2D và 3D. Mặc dù API có thể được triển khai hoàn toàn trong phần mềm, nhưng nó được thiết kế để triển khai hầu hết hoặc hoàn toàn trong phần cứng.

API được định nghĩa là một tập hợp các hàm có thể được gọi bởi chương trình khách, cùng với một tập hợp các hằng số nguyên được đặt tên (ví dụ, hằng số GL_TEXTURE_2D, tương ứng với số thập phân 3553). Mặc dù các định nghĩa hàm bề ngoài tương tự như các định nghĩa của ngôn ngữ lập trình C, chúng không phụ thuộc vào ngôn ngữ. Vì vậy, OpenGL có nhiều language bindings, một số liên kết đáng chú ý nhất là WebGL ràng buộc JavaScript (API, dựa trên OpenGL ES 2.0, cho render 3D từ trong trình duyệt web); C binding WGL, GLXCGL; C binding cung cấp bởi iOS; và Java, C bindings cung cấp bởi Android.

Ngoài việc không phụ thuộc vào ngôn ngữ, OpenGL cũng đa nền tảng. Đặc tả kỹ thuật không nói gì về chủ đề lấy và quản lý ngữ cảnh OpenGL, để lại điều này như một chi tiết của windowing system. Vì lý do tương tự, OpenGL hoàn toàn quan tâm đến việc hiển thị, không cung cấp API nào liên quan đến đầu vào, âm thanh hoặc windowing.

Phát triểnSửa đổi

OpenGL là một API hiện đang được phát triển. Các phiên bản mới của thông số kỹ thuật OpenGL được Khronos Group phát hành thường xuyên, mỗi phiên bản đều mở rộng API để hỗ trợ nhiều tính năng mới khác nhau. Chi tiết của mỗi phiên bản được quyết định bởi sự đồng thuận giữa các thành viên của Nhóm, bao gồm các nhà sản xuất card đồ họa, nhà thiết kế hệ điều hành và các công ty công nghệ nói chung như MozillaGoogle.

Ngoài các tính năng được yêu cầu bởi API lõi, các nhà cung cấp bộ xử lý đồ họa (GPU) có thể cung cấp thêm chức năng ở dạng tiện ích mở rộng. Các tiện ích mở rộng có thể giới thiệu các chức năng mới và hằng số mới, đồng thời có thể nới lỏng hoặc loại bỏ các hạn chế đối với các chức năng OpenGL hiện có. Các nhà cung cấp có thể sử dụng tiện ích mở rộng để hiển thị các API tùy chỉnh mà không cần sự hỗ trợ từ các nhà cung cấp khác hoặc toàn bộ Nhóm Khronos, điều này làm tăng đáng kể tính linh hoạt của OpenGL. Tất cả các tiện ích mở rộng được thu thập và được xác định bởi OpenGL Registry.

Mỗi tiện ích mở rộng được liên kết với một số nhận dạng ngắn, dựa trên tên của công ty đã phát triển nó. Ví dụ: định danh của Nvidia là NV, là một phần của tên mở rộng GL_NV_half_float, hằng số GL_HALF_FLOAT_NV và hàm glVertex2hNV. Nếu nhiều nhà cung cấp đồng ý triển khai cùng một chức năng bằng cách sử dụng cùng một API, thì một tiện ích mở rộng dùng chung có thể được phát hành, sử dụng số nhận dạng EXT. Trong những trường hợp như vậy, cũng có thể xảy ra trường hợp Ban Đánh giá Kiến trúc của Khronos Group chấp thuận rõ ràng cho phần mở rộng, trong trường hợp đó ARB định danh được sử dụng.

Các tính năng được giới thiệu bởi mỗi phiên bản OpenGL mới thường được hình thành từ các tính năng kết hợp của một số tiện ích mở rộng được triển khai rộng rãi, đặc biệt là các tiện ích mở rộng thuộc loại ARB hoặc EXT.

OpenGL được thiết kế nhằm thỏa mãn mục đích chính sau:

  • Che giấu sự tương tác phức tạp với các bộ máy xúc tiến 3 chiều bằng cách đưa ra một giao diện lập trình thống nhất.
  • Che giấu các sự khác biệt giữa các phần cứng 3 chiều bằng cách bắt buộc các phần cứng tương thích OpenGL phải hỗ trợ tất cả các chức năng của giao diện OpenGL. Nếu cần, các chức năng chưa được hỗ trợ đầy đủ bởi phần cứng có thể được hỗ trợ bằng phần mềm.

Các thao tác OpenGL cơ bản là nhận các nguyên hàm hình học như điểm, đường thẳng và đa giác rồi chuyển thành các điểm đồ họa (pixel) trên màn hình. Điều này được thực hiện bởi luồng ống dẫn đồ họa (graphics pipeline). Nó còn được gọi là bộ máy trạng thái OpenGL. Đa số các lệnh OpenGL được dùng để tạo ra các hình học cơ bản đã gặp ở trên hoặc là quy định cách chuyển đổi hình học trong bộ máy trạng thái OpenGL.

Trước khi OpenGL 2.0 ra đời, mỗi giai đoạn trong luồng ống dẫn đồ họa thi hành một nhiệm vụ nhất định, khó có thể thay đổi được. Từ phiên bản OpenGL 2.0, một số giai đoạn đó có thể sửa đổi bằng cách dùng ngôn ngữ chuyển màu GLSL.

DocumentationSửa đổi

The OpenGL Architecture Review Board released a series of manuals along with the specification which have been updated to track changes in the API. These are commonly referred to by the colors of their covers:

The Red Book
OpenGL Programming Guide, 9th Edition. ISBN 978-0-134-49549-1
The Official Guide to Learning OpenGL, Version 4.5 with SPIR-V
The Orange Book
OpenGL Shading Language, 3rd edition. ISBN 0-321-63763-1
A tutorial and reference book for GLSL.

Historic books (pre-OpenGL 2.0):

The Green Book
OpenGL Programming for the X Window System. ISBN 978-0-201-48359-8
A book about X11 interfacing and OpenGL Utility Toolkit (GLUT).
The Blue Book
OpenGL Reference manual, 4th edition. ISBN 0-321-17383-X
Essentially a hard-copy printout of the Unix manual (man) pages for OpenGL.
Includes a poster-sized fold-out diagram showing the structure of an idealised OpenGL implementation.
The Alpha Book (white cover)
OpenGL Programming for Windows 95 and Windows NT. ISBN 0-201-40709-4
A book about interfacing OpenGL with Microsoft Windows.

Associated librariesSửa đổi

The earliest versions of OpenGL were released with a companion library called the OpenGL Utility Library (GLU). It provided simple, useful features which were unlikely to be supported in contemporary hardware, such as tessellating, and generating mipmaps and primitive shapes. The GLU specification was last updated in 1998 and depends on OpenGL features which are now deprecated.

Context and window toolkitsSửa đổi

Given that creating an OpenGL context is quite a complex process, and given that it varies between operating systems, automatic OpenGL context creation has become a common feature of several game-development and user-interface libraries, including SDL, Allegro, SFML, FLTK, and Qt. A few libraries have been designed solely to produce an OpenGL-capable window. The first such library was OpenGL Utility Toolkit (GLUT), later superseded by freeglut. GLFW is a newer alternative.[6]

  • These toolkits are designed to create and manage OpenGL windows, and manage input, but little beyond that.[7]
  • GLFW – A cross-platform windowing and keyboard-mouse-joystick handler; is more game-oriented
  • freeglut – A cross-platform windowing and keyboard-mouse handler; its API is a superset of the GLUT API, and it is more stable and up to date than GLUT
  • OpenGL Utility Toolkit (GLUT) – An old windowing handler, no longer maintained.
  • Several "multimedia libraries" can create OpenGL windows, in addition to input, sound and other tasks useful for game-like applications
  • Allegro 5 – A cross-platform multimedia library with a C API focused on game development
  • Simple DirectMedia Layer (SDL) – A cross-platform multimedia library with a C API
  • SFML – A cross-platform multimedia library with a C++ API and multiple other bindings to languages such as C#, Java, Haskell, and Go
  • Widget toolkits
  • FLTK – A small cross-platform C++ widget library
  • Qt – A cross-platform C++ widget toolkit. It provides many OpenGL helper objects, which even abstract away the difference between desktop GL and OpenGL ES
  • wxWidgets – A cross-platform C++ widget toolkit

Extension loading librariesSửa đổi

Given the high workload involved in identifying and loading OpenGL extensions, a few libraries have been designed which load all available extensions and functions automatically. Examples include GLEE, GLEW and glbinding. Extensions are also loaded automatically by most language bindings, such as JOGL and PyOpenGL.

ImplementationsSửa đổi

Mesa 3D is an open-source implementation of OpenGL. It can do pure software rendering, and it may also use hardware acceleration on BSD, Linux, and other platforms by taking advantage of the Direct Rendering Infrastructure. As of version 13.0, it implements version 4.5 of the OpenGL standard.


Hình ảnhSửa đổi

Tài liệu tham khảo thêmSửa đổi

  • GLSL - Ngôn ngữ chuyển màu OpenGL
  • Cg - Ngôn ngữ chuyển màu của hãng nVidia dùng cho OpenGL
  • Java OpenGL - OpenGL cho Java
  • OpenGL ES - OpenGL for embedded systems
  • OpenAL - Thư viện âm thanh tự do thiết kế với mục địch dùng chung với OpenGL.
  • OpenSL ES - Một thư viện âm thanh khác
  • Graphics pipeline

Thư viện hỗ trợ OpenGLSửa đổi

  • GLUT - Thư viện công cụ cho OpenGL
  • GLU - Thư viện hàm cho các ứng dụng OpenGL
  • Assimp - Thư viện nhập dữ liệu từ các tập tin đồ họa 3D

Các giao diện lập trình đồ họa khácSửa đổi

  • Mesa 3D - Một thư viện thực thi OpenGL mã nguồn mở
  • Direct3D - Thư viện đồ họa của Microsoft
  • Light Weight Java Game Library
  • VirtualGL

Tham khảoSửa đổi

  1. ^ Lextrait, Vincent (tháng 1 năm 2010). “The Programming Languages Beacon, v10.0”. Bản gốc lưu trữ ngày 30 tháng 5 năm 2012. Truy cập ngày 14 tháng 3 năm 2010. 
  2. ^ “Products: Software: OpenGL: Licensing and Logos”. SGI. Bản gốc lưu trữ ngày 1 tháng 11 năm 2012. Truy cập ngày 7 tháng 11 năm 2012. 
  3. ^ “The OpenGL Graphics System: A Specification” (PDF). 4.0 (Core Profile). 11 tháng 3 năm 2010. 
  4. ^ “SGI – OpenGL Overview”. Bản gốc lưu trữ ngày 31 tháng 10 năm 2004. Truy cập ngày 16 tháng 2 năm 2007. 
  5. ^ Peddie, Jon (tháng 7 năm 2012). “Who's the Fairest of Them All?”. Computer Graphics World. Truy cập ngày 30 tháng 5 năm 2018. 
  6. ^ “A list of GLUT alternatives, maintained by”. Khronos Group. Truy cập ngày 2 tháng 5 năm 2013. 
  7. ^ “Related toolkits and APIs”. www.opengl.org. OpenGL. Truy cập ngày 8 tháng 10 năm 2014. 

Liên kết ngoàiSửa đổi