Trang chủ | Email | W2G.,JSC | Liên hệ-Góp ý | SearchWiki:

W2G.,JSC

Quảng cáo

Project

Simulationvn

Tài liệu lập trình

3D Graphics - Đồ họa 3D

Xử lý ảnh

Sách điện tử

sửa SideBar

Open GL là một thư viện đồ hoạ tốc độ cao, độc lập với các hệ điều hành, do hãng Silicon Graphics Inc. phát triển cho các máy trạm đồ hoạ tốc độ cao với tên IRIS GL từ năm 1982.

Open GL đã trở thành một chuẩn công nghiệp và các đặc tính kỹ thuật của Open GL do Uỷ ban kỹ thuật ARB (Architectural Review Board) phê chuẩn. ARB được những hãng phần mềm hàng đầu như Silicon Graphics Inc, Intel, Microsoft, IBM, Intergraph... lập ra năm 1990. Open GL đã được triển khai trên nhiều hệ thống khác nhau từ Microsoft Windows 95/ 98/ NT/ 2000, Macintosh, Unix, Linux...

Open GL cho phép phát triển các ứng dụng đồ hoạ sử dụng những ngôn ngữ lập trình khác nhau, như C/C++, Fortran, Java, Delphi, Ada...

Thư viện Open GL

Về cơ bản thư viện Open GL bao gồm khoảng 150 hàm hỗ trợ các thao tác:

  • hể hiện các đối tượng cơ bản như điểm, đường, đa giác, và từ đó có thể tạo ra những đối tượng đồ hoạ phức tạp hơn như mặt cầu, mặt nón, mặt hình trụ...hoặc các đối tượng do lập trình viên tạo ra.
  • Quan sát đối tượng : các đối tượng sau khi được vẽ ra có thể được quan sát từ những góc nhìn khác nhau thông qua các phép biến hình (transformation)
  • Định màu sắc : các đối tượng có thể được thể hiện với màu sắc bằng nhiều cách chỉ định màu khác nhau: RGBA hay color-index...
  • Sử dụng ánh sáng : ánh sáng có thể được sử dụng để tạo ra những cảnh "thật" từ những đối tượng đã có. Open GL cho phép sử dụng nhiều loại nguồn sáng khác nhau như phát xạ (emitted), bao quanh(ambient), phân tán (diffuse) và phản chiếu (specular).
  • Các kỹ thuật tăng chất lượng hiện thị ảnh như chống răng cưa (anti-aliasing), trộn màu (blending), sương khói trong ảnh (fog)...
  • Thao tác trên các ảnh bitmap : lập trình viên có thể "dán" các ảnh của cảnh thật lên trên bề mặt các đối tượng tạo ra bằng Open GL (texture mapping), …

Các thư viện hỗ trợ lập trình Open GL

Open GL đã được chuẩn hoá, các chương trình Open GL cơ bản có thể chuyển sang các hệ thống khác nhau biên dịch mà không cần hoặc cần rất ít sửa đổi. Tuy nhiên vì Open GL độc lập với các hệ thống, nên các chương trình sử dụng Open GL trên các hệ thống khác nhau cần triển khai phần giao tiếp với các hệ thống giao diện riêng. Ví dụ các chương trình đồ hoạ sử dụng Open GL trên Microsoft Windows 95/NT cần sử dụng thư viện giao tiếp WGL, trên Apple Macintosh sử dụng AGL, trên Unix/Linux X Window System sử dụng GLX.... Phần giao tiếp này không khả chuyển.

Thư viện giao tiếp GLUT (Open GL Utility Toolkit của tác giả Mark Kilgard) giúp tạo các ứng dụng đồ hoạ ban đầu đơn giản. Thư viện này xây dựng một phương thức giao tiếp giữa Open GL và hệ thống theo một cách thức thống nhất, do vậy chương trình đồ hoạ sử dụng Open GL và GLUT khả chuyển giữa tất cả các hệ thống hỗ trợ GLUT. Hiện đã GLUT có phiên bản trên tất cả các hệ điều hành chủ yếu như Microsoft Windows 95/NT, Unix/Linux X Window System, Apple Macintosh...

Open GL là một thư viện lập trình đồ hoạ thủ tục (procedural) và chỉ chứa những lệnh đồ hoạ cơ bản, các thư viện thương phẩm như Open Inventer?, Performer... được xây dựng dựa trên Open GL cung cấp những thao tác phức tạp hơn trên các cảnh (scene), ánh sáng, vật liệu, giao tiếp với người dùng... Và nhờ vậy việc xây dựng các ứng dụng đồ hoạ 3 chiều sẽ nhanh chóng hơn Thực thể cơ sở và tập lệnh (primitives and commands):

Open GL vẽ các primitives (điểm, đoạn thẳng, đa giác) theo một vài chế độ khác nhau. Chúng ta có thể điều khiển các chế độ này một cách độc lập với nhau. Tức là thiết lập một chế độ không làm ảnh hưởng đến các chế độ khác (mặc dù nhiều chế độ có thể kết hợp với nhau để tạo ra ảnh cuối cùng ở trong framebuffer). Để xác định các primitives, thiết lập chế độ, và thực hiện các lệnh khác của Open GL, ta đưa chúng vào trong khuôn dạng lời gọi hàm.

Thực thể cơ sở được xác định bởi một nhóm các đỉnh. Một đỉnh định nghĩa một điểm, một mút của một đường thẳng, hoặc một góc của một đa giác nơi hai cạnh gặp nhau. Dữ liệu (bao gồm tọa độ đỉnh, màu sắc, normals, tọa độ kết cấu (texture coodinates)) là tương ứng với các đỉnh, mỗi đỉnh và dữ liệu tương ứng với nó được xử lý một cách độc lập, theo thứ tự và theo cùng một cách. Trường hợp ngoại lệ duy nhất cho quy tắc này là các đỉnh phải bị cắt đi để cho một thực thể cơ sở nằm trọn trong một vùng. Trong trường hợp này, các đỉnh dữ liệu có thể bị thay đổi và các đỉnh mới được tạo ra. Phương pháp cắt xén hình này phụ thuộc vào từng loại thực thể cơ sở.

Các lệnh luôn được thực hiện theo thứ tự mà chúng được nhận vào, mặc dù vẫn có thể có một chút thời gian trễ trước khi một lệnh có thể thực thi. Điều đó có nghĩa rằng một thực thể cơ sở luôn được vẽ hoàn tất trước khi lệnh tiếp theo nó có thể tác động. Điều đó cũng có nghĩa rằng các lệnh trả về dữ liệu luôn nhất quán với các lệnh trước nó.

Các điều khiển đồ họa trong Open GL (Open GL Graphic Control):

Open GL cho phép ta điều khiển trực tiếp thông qua các lệnh cơ bản trong đồ họa hai và ba chiều, như là ma trận biến đổi, hệ số chiếu sáng, phương pháp chống răng cưa, các lệnh trên điểm ảnh. Tuy nhiên, nó không cung cấp cho ta các công cụ để mô tả và mô hình hóa các đối tượng hình học phức tạp. Vì vậy, các lệnh Open GL mà ta đưa ra chỉ xác định một kết qủa tương đối hơn là kết qủa chính xác như thế nào. Bởi vì Open GL chỉ là ngôn ngữ mang tính thủ tục cơ sở chứ không phải là ngôn ngữ mô tả. Để hiểu hết được cách sử dụng Open GL, thì nên hiểu cặn kẽ thứ tự thực hiện các lệnh của nó.

Mô hình thực hiện lệnh (Execution Model):

Mô hình thông dịch của Open GL là mô hình khách chủ (client/server). Mã của ứng dụng (bên khách) đưa ra các lệnh, các lệnh này sẽ được thông dịch và xử lý bởi Open GL (bên chủ). Chủ (server) có thể hoặc không nằm trên một máy tính với khách (client). Theo cách này Open GL là một mạng trong suốt (network-transparent). Một chủ có thể duy trì một vài ngữ cảnh (contexts) của Open GL, mỗi context có một trạng thái Open GL độc lập. Khách có thể kết nối tới bất kỳ context nào của chủ. Giao thức mạng cần thiết có thể được thực hiện bằng cách thêm vào các giao thức mạng đã có (như là giao thức mạng cho X Windows System) hoặc có thể sử dụng một giao thức độc lập. Open GL không có một lệnh nào để lấy dữ liệu từ người dùng.

Hệ thống (Windows, Linux,…) chứa tài nguyên bộ đệm ảnh, cuối cùng sẽ quản lý tác động của các lệnh của Open GL trong bộ đệm ảnh. Hệ thống:

  • Quyết định phần nào của bọ đệm ảnh Open GL có thể truy cập được tại thời điểm cụ thể.
  • Giao tiếp với Open GL để biết cấu trúc của phần đang được xử lý trong bộ đệm ảnh.

Vì vậy không có một lệnh nào của Open GL để cấu hình cho bộ đệm ảnh hoặc khởi tạo cho Open GL. Cấu hình của bộ đệm ảnh được thực hiện bên ngoài Open GL trong sự liên hệ với hệ thống (Windows, Linux, …); Việc khởi tạo Open GL xảy ra khi hệ thống xác định một cửa sổ cho Open GL.

Các bước xử lý cơ bản trong Open GL (....)

Sơ đồ dưới đây mô tả cách mà Open GL xử lý dữ liệu. Như ta thấy, các lệnh vào từ bên trái và xử lý dọc theo đường ống. Một vài lệnh xác định các đối tượng hình học để vẽ, và một số lệnh khác điều khiển cách mà các đối tượng được quản lý trong suốt rất nhiều bước trong qúa trình xử lý.

Các bước xử lý cơ bản trong Open GL như sau:

  • Display list: Thay vì xử lý tất cả các lệnh ngay lập tức thông qua đường ống, ta có thể lựa chọn cho một số lệnh vào trong một display list để xử lý sau.
  • Evaluator: cung cấp cho chúng ta một cách rất hiệu quả để xấp xỉ đường cong và bề mặt hình học bằng cách đánh giá các lệnh đa thức của dữ liệu vào.
  • Per-vertex operations and primitive assembly: Open GL xử lý các đối tượng hình học cơ sở (điểm, đoạn thẳng, đa giác), mà tất cả chúng được mô tả bằng tập các đỉnh. Các đỉnh được biến đổi và chiếu sáng, và các đối tượng hình học cơ sở được cắt vào trong khung nhìn (viewport) để chuẩn bị cho giai đoạn tiếp sau (rasterization).
  • Rasterization: là bước đưa ra một tập các địa chỉ của bộ đệm ảnh và tương ứng chúng với các giá trị sử dụng trong mô tả hai chiều của điểm, đoạn thẳng, đa giác.
  • Per-fragment operations: Đây là các lệnh cuối cùng thực hiện trên dữ liệu trước khi nó được lưu trữ thành các điểm ảnh trong bộ đệm ảnh.

Per-fragment operations bao gồm việc cập nhật có điều kiện tới bộ đệm ảnh dựa trên giá trị z đầu vào hoặc giá trị z cũ và pha trộn màu của các điểm ảnh gửi tới với màu đã được lưu trữ. Nó cũng thực hiện mặt nạ và các lệnh logic khác trên các giá trị điểm ảnh.

Dữ liệu cũng có thể được đưa vào thông qua điểm ảnh hơn là các đỉnh. Dữ liệu đưa vào theo kiểu điểm ảnh (như là mô tả ảnh để sử dụng cho texture mapping), bỏ qua công đoạn đầu tiên của qúa trình xử lý trên và thay vào đó là xử lý điểm ảnh.

Các hàm mở rộng để hỗ trợ Open GL

Open GL là một thư viện đồ hoạ tốc độ cao thích hợp với nhiều nền phần cứng khác nhau, có thể làm việc với nhiều hệ thống window khác nhau. Tuy nhiên, trong định nghĩa cơ bản của phần lớn các hệ thống window không hỗ trợ một thư viện phức tạp như Open GL. Sự phức tạp này được thể hiện trong việc định dạng điểm ảnh phong phú và phức tạp gồm cả các vùng đệm chiều sâu (depth buffer), vùng đệm stencil (stencil buffer), vùng đệm tích luỹ (accumulation buffer) cũng như vùng đệm kép (double buffer). Bởi vậy trong phần lớn các hệ thống window đều có các hàm mở rộng để hỗ trợ Open GL.

1.Khởi tạo: Đối với hầu hết các hệ thống window muốn hỗ trợ được thư viện Open GL đều phải có một kiểu cấu trúc dữ liệu chính để quản lý các thông tin định dạng điểm ảnh (pixel format information) về cửa sổ Open GL. Các thông tin này bao gồm: kiểu điểm ảnh (RGBA hay color index), vùng đệm đơn hay kép (single or double buffer), độ phân giải mầu sắc, sự hiện diện của các vùng đệm chiều sâu (depth buffer), vùng đệm stencil (stencil buffer), vùng đệm tích luỹ (accumulation buffer).

2.Điều khiển tô chát (controlling rendering): Hầu hết các hệ thống window đều có các hàm tạo và quản lý một ngữ cảnh tô vẽ (rendering context) của Open GL. Trong Open GL khái niệm ngữ cảnh là một tập hợp đầy đủ các biến trạng thái của Open GL. Các thủ tục này thực hiện một số nhiệm vụ như đồng bộ hoá quá trình thực hiện giữa hệ thống window và Open GL, hoán đổi các vùng đệm trước và sau (front and back buffer), sử dụng các phông chữ của hệ thống cửa sổ đó.

a. Quản lý ngữ cảnh tô vẽ của Open GL - Các hệ thống window đều có một hàm để tạo ngữ cảnh tô vẽ, hàm này có dạng chung là xxxCreateContext(). Hàm này sẽ sử dụng định dạng điểm ảnh mà ta đã lựa chọn như một thông số để tạo ra ngữ cảnh.

Để đặt một ngữ cảnh tô vẽ trở thành hiện hành các hệ thống window sử dụng hàm xxxMakeCurrent(). Tại một thời điểm chỉ có một ngữ cảnh tô vẽ được điều khiển. Hàm này sẽ cho biết phần có khả năng vẽ nào sẽ được thực hiện và ngữ cảnh tô vẽ nào sẽ sử dụng nó.

Sử dụng hàm có dạng xxxGetCurrentContext() để xác định ngữ cảnh tô vẽ sử dụng cho các hệ thống window. Mỗi hệ thống window sử dụng các hàm khác nhau để quyết định khả năng vẽ nào sẽ được thực hiện, tuỳ theo đặc trưng của từng hệ thống.

Để sao chép các biến trạng thái từ ngữ cảnh này sang ngữ cảnh khác các hệ thống window sử dụng hàm có dạng xxxCopyContext(). Khi một ngữ cảnh kết thúc hàm xxxDestroyContext() sẽ được gọi.

b. Đồng bộ hoá quá trình thực hiện (synchronizing execution) - Đồng bộ hoá quá trình thực hiện là buộc các yêu cầu của hệ thống phải chờ cho đến khi việc tô vẽ của Open GL được thực hiện xong hoàn toàn. Điều đó có nghĩa là bất cứ lệnh nào của Open GL đã được phát ra trước đó sẽ được đảm bảo thực hiện trước bất cứ lệnh vẽ nào của hệ thống gọi sau lệnh trì hoãn. Cũng có thể làm tương tự với các lệnh của Open GL.

c. Hoán chuyển bộ đệm (swapping buffer) - Phần lớn các ứng dụng Open GL đều sử dụng bộ đệm kép (front and back buffers). Tại một thời điểm, một bộ đệm được dùng để vẽ, còn một bộ đệm được dùng để hiển thị. Sau khi vẽ xong một frame thì hai bộ đệm này chuyển vị trí cho nhau, việc này làm nâng cao chất lượng của ảnh chuyển động.

OpenSceneGraph

Tài tiệu Open GL

Tài liệu OSG

Hình ảnh một số sản phẩm

vanmieu1.jpg: 800x500, 131k (December 01, 2011, at 10:13 AM)
th_vsg_13.jpg: 200x150, 29k (December 01, 2011, at 10:13 AM)
BigC-5.jpg: 800x600, 56k (December 01, 2011, at 10:13 AM)
vanmieu6_0.jpg: 250x156, 49k (December 01, 2011, at 10:13 AM)
vsg_01.jpg: 600x450, 55k (December 01, 2011, at 10:13 AM)
kho82-s1.jpg: 1280x800, 175k (December 01, 2011, at 10:13 AM)

sửa SideBar

Edit - History - Print - Recent Changes - Search
Page last modified on March 02, 2006, at 04:11 PM