Opengl là gì

Rất vui vị bạn đang phát âm loạt bài bác lí giải này. Đây là loạt bài về trái đất 3D. Cụ thể là OpenGL. Tôi đang tập trung toàn thể thời gian trong 6 tháng vừa rồi để khám phá về technology 3D, Tôi đã xong Engine 3 chiều của mình (chắc là là 1 dự án công trình lớn số 1 mà lại tôi đã từng có lần làm) cùng bây chừ là thời gian tôi share với bạn về đều gì mà tôi đã thu gom được - tất cả tư liệu, toàn bộ sách, giải đáp, cùng tất yếu bao hàm cả gần như chủ ý ý kiến của các bạn.

You watching: Opengl là gì

Loạt bài xích này bao gồm 3 phần:

Phần 1 - Khái niệm cơ bạn dạng về 3D với OpenGLPhần 2 - Đi sâu vào OpengGL ES 2.0Phần 3 - Kỹ năng Jedi trong OpenGL ES 2.0 và đồ họa 2D

Nếu bạn thích coi code luôn luôn thì hãy ngó qua phần 2/3 trước do vào phần đầu tôi chỉ trình diễn về các quan niệm thôi.

Nào, bước đầu thôi.

Tổng quan

Có ai trước đó chưa từng nghe về OpenGL không? OpenGL là viết tắt mang lại "mở cửa Graphics Library" với nó được dùng rất nhiều trong ngữ điệu máy vi tính. OpenGL là nơi gần nhất giữa CPU (dòng nhưng mà họ - đầy đủ developer - chạy các áp dụng trên các ngữ điệu lập trình) và GPU (chip giải pháp xử lý đồ vật họa). Vì vậy OpenGL rất cần phải được cung cấp vị những công ty cung cấp thẻ hình ảnh (vd: NVidia) cùng được cài đặt bởi phần nhiều đối tác doanh nghiệp cải tiến và phát triển hệ điều hành và quản lý (giống như Apple xuất xắc Microsoft) và ở đầu cuối OpenGL mang đến bọn họ một API thống tuyệt nhất để làm bài toán. API này là những "Ngôn ngữ miễn phí" (hoặc hầu như miễn phí). Việc này thừa dễ dãi vì nếu khách hàng sử dụng C hoặc C++ tốt thậm chí là là Objective-C, Perl, C# tuyệt Javascript tuyệt bất kỳ ngữ điệu như thế nào bạn muốn, API của OpenGL luôn luôn tương đương nhau, cách xử lý giống như nhau, phổ biến tác dụng, mẫu lệnh cùng là vị trí mà loạt bài bác giải đáp này bắt đầu!

Trước khi nói về OpenGL API chúng ta rất cần được tất cả kỹ năng và kiến thức về 3 chiều. Lịch sử của 3 chiều vào ngôn ngữ laptop được gói trong lịch sử vẻ vang của OpenGL. Vì vậy hãy cùng khám phá sang 1 chút ít về lịch sử hào hùng của nó.

Một câu chuyện nhỏ

*

Khoảng trăng tròn năm ngoái bao gồm một bạn thương hiệu là Silicon Graphics (SGI) tạo thành một một số loại thiết bị bé dại. Thiết bị này hoàn toàn có thể hiện ra các ảo hình ảnh khôn xiết thực tiễn. Với hình ảnh 2D, sản phẩm kia dám hiện tại được các hình ảnh phong cách 3D, mô bỏng tầm nhìn cùng chiều sâu theo mắt của nhỏ fan. Thiết bị đó được Call là IrisGL (chắc hẳn rằng bởi vì nó vậy thử mô rộp theo mắt của nhỏ người).

Ghê chưa, vật dụng sẽ là tlỗi viện hình ảnh thứ nhất. Nhưng nó chết thừa nkhô giòn bởi để gia công được như vậy, anh ta đề nghị tinh chỉnh và điều khiển quá nhiều đồ vật vào máy tính như thẻ bối cảnh, khối hệ thống windows, các ngôn từ lập trình sẵn và hình ảnh liên quan với người tiêu dùng cuối. Quá những thứ thậm chí là nhằm cho một chủ thể cai quản, không nói đến 1 người. Vì vậy SGI bắt đầu chuyển qua 1 sản phẩm công nghệ giống như "thẻ sản xuất đồ gia dụng họa", "hệ thống quản lý cửa sổ", "tạo thành hình ảnh fan dùng" cho những công ty khác cùng triệu tập vào phần đặc trưng nhất của tlỗi viện bối cảnh. Năm 1992 vẫn ra đời OpenGL cố kỉnh hệ trước tiên.

Vào năm 1995 Microsoft trình làng Direct3D, đối thủ tuyên chiến đối đầu và cạnh tranh đáng ghờm cùng với OpenGL.Và chỉ cho tới năm 1997 OpenGL 1.1 đã có tung ra. Nhưng tới tận năm 2004, OpenGL new hoàn toàn có thể lôi cuốn được tôi, OpenGL 2.0 với phần lớn chức năng tuyệt đối hoàn hảo. Tôi thực sự mê say Shaders, thiết kế pipeline (programmable pipeline).

Cuối cùng vào 2007 OpenGL ES 2.0 đã có sức khỏe của Shader cùng Programmable pipeline tới những hệ thống nhúng.

Ngày ni, bạn có thể thấy hình ảnh của OpenGL (hoặc OpenGL ES) vào rất nhiều trò đùa, ứng dụng 3 chiều, 2D cùng hết sức nhiều phần mượt không giống (đặc biệt là phần mềm 3D). OpenGL ES được sử dụng vày PlayStation, Android, Nintenbởi 3DS, Nokia, Samsung, Symbian với tất nhiên cả Apple với MacOS với iOS.

Đối thủ lớn nhất của OpenGL

Vâng, chúng ta đang nhắc đến hệ quản lý Windows.

Quý Khách có ghi nhớ tôi đang nói rằng bạn dạng trước tiên của OpenGL là 1992? cùng thời điểm đó, Microsoft vẫn có Windows 3. Như Microsoft luôn luôn tin rằng "ko gì được tạo nên, phần đa sản phẩm được copy", Microsot đã tất cả thay copy OpenGL Một trong những gì bọn họ call là DirectX và được reviews lần đầu năm 1995 vào Windows 95 tương ứng.

Một năm tiếp theo, 1996, Microsoft trình làng Direct3D, một phiên phiên bản copy của OpenGL. Điểm nên để ý là Microsoft đã chiếm ưu ráng trên Thị trường trong vô số năm tức thì, và DirectX hoặc (Direct3D) đang lấn sâu vào những máy tính xách tay PCs và Khi Microsoft ban đầu chuyển thanh lịch Thị phần di động với Video trò chơi, DirectX cũng lấn Sảnh sang trọng.

Ngày ni DirectX có kết cấu cực kỳ tương tự với OpenGL: cần sử dụng ngôn từ Shader, cũng đều có programmable pipeline, thậm chí là cũng hỗ trợ cả fix pipeline, không chỉ có thế là tên của những hàm trong API tương tự như luôn luôn. Sự không giống nhau chỉ nên OpenGL là miễn giá tiền, luôn luôn luôn luôn msinh sống, mà lại DirectX là đóng góp. OpenGL đến iOS, MacOS, hệ thống Linux trong lúc DirectX chỉ dành riêng cho hệ điều hành quản lý của Microsoft.

Giờ là dịp chúng ta có thể bước đầu khám phá quả đât thiết kế 3 chiều được rồi!

3 chiều - Con góc nhìn trang bị nhất

Từ dịp tôi mập lên, tôi vẫn say đắm công nghệ 3D với các trò chơi game 3 chiều. Tất cả những nhân đồ dùng trong số ấy, con người, biết về mô bỏng thế giới thực trong số hiệu ứng 3 chiều đến từ một nơi duy nhất: nhỏ đôi mắt.

Con mắt là cơ phiên bản vào trái đất 3D. Tất cả đông đảo điều chúng ta làm là tế bào phỏng nó, làm thế nào thật đẹp nhất, thật thu hút y như số đông gì mắt nhỏ tín đồ hoàn toàn có thể thấy. Những định nghĩa tương quan tới đôi mắt như góc nhìn, trung bình nhìn, ống kính, thấu kính, các một số loại sự trang bị là sẽ được nói tới nhiều lúc chúng ta làm cho thân quen cùng với 3 chiều.

Mọi sản phẩm họ làm là nỗ lực tái sinh sản trường đoản cú mắt fan hồ hết thứ: ánh mắt, điểm mù, biến dạng, độ sâu hình ảnh, tiêu cự, mắt nhìn...

Không gian 3 chiều

Nghe dường như dại nhưng thực thụ cần nói rằng: nhân loại 3D là 3 chiều bởi nó tất cả 3D. Tôi nói điều này vị nó cực kỳ quan trọng đặc biệt nhằm nói thêm rằng nó nhiều hơn thế nữa 2D một chiều và phức hợp hơn siêu rất nhiều so với 2D.

Hãy xem, trong thế giới 2 chiều khi họ buộc phải cù một hình vuông vắn vô cùng solo giản: 45 độ luôn luôn là 45 độ. Nhưng với 3 chiều, để quay một hình vuông đề nghị 3 trục X, Y, Z. Phú trực thuộc bên trên lắp thêm từ của góc xoay, kết quả sau cùng hoàn toàn có thể khôn xiết khác nhau. Những sản phẩm bình thường sẽ trsống lên linch tinc Lúc chúng ta thử cù cùng với những trục khác biệt. Ví dụ: xoay x=25, y=20 là một mẫu mã, x=10, y=20 cùng kế tiếp x=10 lại tạo nên một tác dụng new.

do đó nói theo cách khác Lúc thêm 1 chiều khác tạo cho quá trình của họ phức tạp lên gấp nhiều lần.

Không đề xuất 3 chiều mà buộc phải là 4D

Hmmm, lại thêm một chiều nữa ư?

Chính xác, điểm ở đầu cuối tôi ao ước nhắc tới chính là vấn đề này. Chúng ta không chỉ có làm việc trong nhân loại 3D, chúng ta còn tồn tại chiều sản phẩm công nghệ 4: thời hạn. Những sự đồ dùng vào nhân loại 3D đề nghị địa chỉ lẫn nhau, cần được dịch rời, va đụng, biến đổi. Và nlỗi tôi đã nói ở trên, bài toán biến đổi đó trong trái đất 3 chiều tạo ra nhiều tác dụng không giống nhau.

Vậy mang đến hôm nay chúng ta vẫn có mang được 3 chiều là: "Việc tế bào rộp mắt của nhỏ người cùng mô rộp sự vận động của các sự vật".

Áp dụng OpenGL vào quả đât 3D

Bây giờ new là thời điểm nói về mẫu thú vui của bài blog này: Hãy nói tới OpenGL. Thứ nhất bọn họ bắt buộc cảm ơn những bên toán học nlỗi Ơ-le, Hamilton, Pythago với không hề ít công ty kỹ thuật khác. Nhờ gồm họ nhưng ngày này họ tất cả vô số phương pháp với giải pháp để gia công Việc với không gian 3 chiều. OpenGL sẽ sử dụng toàn bộ kỹ năng và kiến thức đó để tạo nên một thế giới 3 chiều ngay trước khía cạnh bọn họ. Có hàng trăm, thậm chí hàng nghìn phxay tính toán bên trên một giây thực hiện các cách làm toán học để mô bỏng lại vẻ đẹp nhất mà đôi mắt bạn phát hiện ra.

OpenGL là 1 trong MÁY TRẠNG THÁI (state machine) - điều này có nghĩa là toàn bộ OpenGL thao tác làm việc trên quy mô thi công theo trạng thái. Để minh họa mang lại OpenGL, hãy tưởng tượng một đồ vật Cần Trục cảng Hải Phòng chẳng hạn. Ở kia có không ít những thùng hàng (container) cùng với không ít các kiện hàng nhỏ bên trong. OpenGL y như toàn cục quần thể cảng kia bao gồm:

Các thùng sản phẩm (container) là các đối tượng vào OpenGL (Textures, Shaders, Meshes, và các vật dụng tương tự)Các khiếu nại mặt hàng phía bên trong từng container là tất cả những gì chúng ta tạo nên vào áp dụng áp dụng OpenGL. Đó là các đồ vật họ thấy được.Máy đề xuất trục là những OpenGL API, cái mà lại chúng ta đang thực hiện.

Vậy Khi họ thực hiện một hàm trong OpenGL hệt như câu hỏi sử dụng phải trục. Chiếc buộc phải trục lấy các container vào cảng, nâng nó lên, xử trí phần đa gì phía bên trong và sau cuối thả xuống vào một trong những chỗ đã định sẵn. Quý khách hàng chưa hẳn thẳng áp dụng cảng đó, quan yếu thay đổi câu chữ những thùng hàng, tất yêu thay thế bọn chúng, chúng ta cũng quan trọng thẳng chạm va vào những thùng mặt hàng trong cảng. Tất cả chỉ cần bạn sai khiến cho cái đề xuất trục thực hiện. Chỉ có cái đề xuất trục kia bắt đầu rất có thể tác động ảnh hưởng lên các thùng hàng trong container. Hãy lưu giữ điều này! Nó là cực kỳ đặc biệt về OpenGL cho tới bây chừ. Chiếc yêu cầu trục chỉ là một trong đồ vật hoàn toàn có thể quản lý các thùng sản phẩm trong cảng.

*

Có vẻ OpenGL bị số lượng giới hạn bởi vì các API? dẫu vậy ko, các phải trục của OpenGL là rất là mạnh mẽ. Nó rất có thể lặp lại vấn đề xử trí gắp-và-thả hàng ngàn cho tới hàng nghìn những container trong một giây. Một thiết bị tốt với khác của OpenGL là áp dụng mô hình State Machine, chính là họ chưa phải lưu giữ bất kỳ miêu tả nào, bọn họ không cần phải sản xuất các đối tượng người sử dụng trực tiếp, họ chỉ cần giữ lại những id, hoặc vào ví dụ trên: bọn họ chỉ nên biết về id của những container.

Vậy OpenGL làm việc như thế nào?

Đi sâu vào CPU tính tân oán của OpenGL, ta thấy OpenGL thực hiện tính tân oán trực tiếp trên GPU - Hartware xử trí hình ảnh mang đến máy tính - cùng thực hiện vết phảy hễ (floating points). CPU (Central Processing Unit) là chip cách xử trí của sản phẩm tính. Còn GPU (Graphics Processing Unit) là chip cách xử lý giao diện. CPU giao diện này giúp cho CPU sút tgọi các quá trình nặng nhọc: nó hoàn toàn có thể cách xử lý hình ảnh trước khi hiện ra screen. Hay sâu rộng, đa số gì OpenGL tiến hành đó là trên GPU, cố gắng vị tính toán thù bên trên CPU. GPU nkhô cứng hơn rất tương đối nhiều cùng với các số thực so với CPU. Đây là nguyên do cơ bản nhằm các trò đùa 3D chạy nhanh hao hơn khi bao gồm thẻ giao diện. Đây cũng chính là lý do cho những phần mềm cách xử trí 3D chuyên nghiệp giúp họ làm việc với "Software"s Render" (cách xử lý trên CPU) hoặc "Graphics Card"s Render" (xử lý trên GPU). Một vài phần mềm cũng đến bọn họ một tùy chọn: Có sử dụng OpenGL tốt không? Và kia, giờ đồng hồ bạn vẫn biết rồi. Tùy chọn đó đó là giành cho câu hỏi cách xử trí đã sinh hoạt bên trên GPU hay là không. Vì vậy, OpenGL đã hoàn toàn làm việc cùng với GPU xuất xắc không? câu trả lời là ko kiên cố. Chỉ các làm việc xử lý ảnh cùng vài ba thứ không giống thôi. OpenGL cho chúng ta rất nhiều tính năng nhằm lưu trữ hình họa, tài liệu, ban bố vào một format cụ thể. Những định dạng này được cách xử lý thẳng do GPU. Vì vậy OpenGL nhờ vào vào phần cứng. Nếu phần cứng không cung ứng OpenGL, bọn họ tất yêu sử dụng nó. Quá buồn! Các phiên bạn dạng mới của OpenGL tiếp tục cần những tính năng lạ của GPU. Nhưng cũng đừng lo ngại, OpenGL luôn cần những bên cung cấp tích hòa hợp vào, chúng ta (gần như developer - coder) vẫn thao tác trên những phiên phiên bản OpenGL new chỉ Lúc lắp thêm đang chuẩn bị. Trong thực tế, tât cả những chip bối cảnh bây giờ đa số cung ứng OpenGL. Vì vậy bạn có thể sử dụng OpenGL với rất nhiều ngôn ngữ và sản phẩm công nghệ. Thậm chí cùng với Microsoft Windows.

Logic của OpenGL

OpenGL là thỏng viện đồ họa hơi ngắn gọn gàng cùng logic. Những gì bạn thấy trong những ứng dụng xử lý 3D bài bản là cực kì tinh vi chuyển động bên trên OpenGL. Vì Logic của OpenGL có những sản phẩm sau:

Primitives (Các đối tượng người tiêu dùng cơ bản)Buffers (Lưu vào bộ đệm)Rasterize (Xử lý đồ vật họa)

OpenGL vận động xoay quanh 3 định nghĩa này. Mỗi quan niệm sinh sống bên trên hòa bình nhau cùng có tác dụng rứa làm sao để cả 3 rất có thể với mọi người trong nhà tạo thành những cảm giác 3 chiều ưa nhìn (tuyệt kể cả cùng với những hình ảnh 2D vì chưng nó chỉ là dạng 3D với độ sâu Z=0, chúng ta vẫn nói vụ việc này sau).

Primitives

Bao có 3 nhiều loại đói tượng:

Các điểm trong hệ không gian 3D (x, y với z)Các con đường thẳng trong không gian (sự phối hợp của 2 điểm)về một tam giác trong không gian (sự phối hợp của 3 điểm)

Một điểm 3 chiều rất có thể coi nhỏng một hạt trong không khí.Một mặt đường trực tiếp luôn luôn hoàn toàn có thể coi như một vector.Một tam giác rất có thể xem là một mặt trong 1 dòng lưới với hàng trăm, triệu tam giác kết hợp lại.

Một vài phiên phiên bản OpenGL cung cấp quads (hình tứ đọng diện cùng với 4 điểm), cũng là 1 nhiều loại của tam giác, nhưng lại để OpenGL ES đạt hiệu quả cao nhất thì dòng này không được hỗ trợ.

Buffers

Nói một giải pháp đơn giản và dễ dàng, buffer là 1 trong những vùng lưu trữ trong thời điểm tạm thời hỗ trợ cho vấn đề tối ưu. Có 3 các loại Buffer:

Frame BufferRender BufferBuffer Object

Frame Buffer là trừu tượng và khó gọi độc nhất vô nhị vào cả 3 các loại. Khi chúng ta chế tạo một cảnh, chúng ta cũng có thể gửi hình ảnh trực tiếp cho tới screen của máy hoặc cho tới Frame Buffer. Về cơ phiên bản Frame Buffer là 1 vùng để giữ dữ liệu ảnh nhất thời. Cụ thể rộng, chúng ta có thể tưởng tượng nó nlỗi một cổng output trường đoản cú bộ render của OpenGL với gồm không hề ít ảnh, không phải chỉ tất cả một. Những hình ảnh đó là gì? Đó là phần lớn hình họa về các đối tượng người tiêu dùng 3 chiều, về độ gần/xa của những đối tượng người sử dụng trong không gian, những vùng giao nhau của những đối tượng người sử dụng với về những phần được chỉ ra. Vì vậy Frame Buffer giống hệt như một tập bao gồm nhiều ảnh. Tất cả phần đa được lưu trữ dưới dạng công bố mảng các giá trị px.

Render Buffer là một trong những vùng lưu giữ trợ thì của một hình ảnh độc nhất vô nhị. Giờ chúng ta cũng có thể rõ ràng hơn khi 1 Frame Buffer chính là bao gồm các Render Buffer. Có vài một số loại Render Buffer: Màu, độ sâu, hình khối hận.

Màu: tàng trữ hầu như màu cuối cùng được sinh vì OpenGL render cùng lưu giữ bên dưới dạng hình họa màu (RGB).Độ sâu lưu trữ quý hiếm Z của đối tượng người tiêu dùng. Nếu các bạn sẽ quen với các ứng dụng 3D, bạn sẽ biết về độ sâu của hình họa là gì. Nó là tỉ lệ thành phần độ color xám của hình họa phụ thuộc vào theo địa chỉ so với màn hình. Trong ngôi trường hòa hợp khá đầy đủ độ white Khi đối tượng ở gần nhất với màu sắc đen trọn vẹn khi nó sinh hoạt xa duy nhất.Hình kân hận ám chỉ về yếu tố chỉ ra của đối tượng người sử dụng. Giống như một tờ mask cho những vùng được thấy được. Được lưu lại dưới dạn hình ảnh chỉ có 2 white color & đen.

Buffer Object là một trong vùng nhớ mà lại OpenGL Call là "server side" (hoặc không khí can dự lưu lại trữ). Buffer Object cũng là một trong vùng nhớ tạm thời, nhưng có vẻ lâu dài ra hơn các các loại trước. Một Buffer Object có thể lưu trữ trong suốt quá trình áp dụng áp dụng. Buffer Object rất có thể giữ những thông tin về đối tượng 3D bên dưới dạng đã được buổi tối ưu. Những công bố này có thể có 2 loại: Structure cùng Indice.

See more: Connection Manager ( Cm Là Gì ? Cm Là Viết Tắt Của Từ Gì? Cm Nghĩa Là Gì

Structure là mảng diễn tả các đối tượng người dùng 3 chiều, vd: một mảng những đỉnh, mảng các tọa độ texture hoặc một mảng của các gì bạn muốn. Indice thì ví dụ hơn, mảng này được dùng làm xác định gồm bao nhiêu tam giác vào lưới sẽ tiến hành tạo nên dựa trên mảng structure.

Quý khách hàng vẫn nặng nề gọi ư? Hãy xem ví dụ dưới đây:

Tưởng tượng một kân hận 3D. Kân hận này có 6 khía cạnh được hiện ra vị 8 đỉnh?

*

Mỗi khía cạnh là một trong những hình vuông vắn, tuy nhiên chúng ta có đừng quên OpenGL chỉ biết về các tam giác đúng không? Vì vậy bọn họ buộc phải gửi hầu hết hình vuông kia thành những tam giác để triển khai bài toán cùng với OpenGL. vì thế chúng ta gồm 12 tam giác tất cả!Ảnh ngơi nghỉ trên được tạo thành bởi vì ứng dụng Mobởi vì, hãy xem góc bên dưới mặt cần. Chúng là số đông ban bố về đồ gia dụng thể của bọn họ. Quý Khách rất có thể thấy bao gồm 8 đỉnh với 12 mặt (GL: 12).

Các tam giác trong OpenGL là sự việc phối hợp của những đỉnh 3D. Vì vậy để tạo thành mặt phẳng của dòng vỏ hộp, chúng ta bắt buộc OpenGL chế tạo ra theo cách nlỗi này: đỉnh 1, đỉnh 2, đỉnh 3, đỉnh 1, đỉnh 3, đỉnh 4.

Hay có thể nói rằng, họ buộc phải tái diễn 2 đỉnh tại một mặt của hình vuông vắn. Nếu cầm hình vỏ hộp bởi một hình tất cả 12 phương diện thì mỗi đỉnh cần lặp 4 lần, nếu như cố kỉnh bằng một hình 16 khía cạnh, bọn họ đề xuất 6 lần lặp lại. Và cứ đọng cố gắng, bài toán tăng số lặp của các đỉnh lên nhanh lẹ.

Vì vậy OpenGL chất nhận được chúng ta một phương pháp làm cho đơn giản và dễ dàng hơn: sử dụng một mảng các Indice. Ở ví dụ bên trên, bạn cũng có thể bao gồm một mảng 8 đỉnh: đỉnh 1, đỉnh 2, đỉnh 3, đỉnh 4,... với nạm bởi viết lại hầu như thông báo cho mỗi khía cạnh, họ chế tạo ra một mảng những Indicate: 0,1,2,0,2,3,2,6,3,2,5,6,.... Mỗi sự phối hợp 3 phần tử vào mảng 0,1,2-0,2,3-2,6,3 trình diễn một phương diện tam giác. Với đặc điểm này, chúng ta cũng có thể viết biết tin những đỉnh 1 lần cùng tái sử dụng các lần trong mảng các indicate.

Giờ quay trở lại với Buffer Object, nhiều loại thứ nhất là 1 mảng những structure, như đỉnh 1, đỉnh 2, đỉnh 3, đỉnh 4,... cùng nhiều loại thứ hai là mảng các indice 0,1,2,0,2,3,2,6,3,2,5,6....

Lợi ích của Buffer Object là chúng được tối ưu để triển khai vấn đề trực tiếp với GPU và các bạn không bắt buộc duy trì mảng kia vào áp dụng của công ty sau thời điểm chế tạo một Buffer Object.

Rasterize

Rasterkích cỡ là quy trình cách xử trí vì OpenGL dấn tất cả thông báo về đối tượng người dùng 3 chiều (bao gồm đỉnh, tọa độ, tính toán...) nhằm tạo ra một ảnh 2 chiều. Ảnh này sẽ ảnh hưởng một vài chuyển đổi với tiếp nối hiện trên màn hình của đồ vật.

Nhưng sống bước ở đầu cuối này, bài toán kết nối giữa ban bố các pixel và thứ màn hình ở trong về những bên phân phối thiết bị. Nhóm Khronos cung cấp API không giống Điện thoại tư vấn là EGL, nhưng lại phía trên chỉ là api của những đơn vị tiếp tế. Chúng ta, các developer sẽ không làm việc trực tiếp với Khronos EGL, nhưng mà cùng với phiên bạn dạng đã có được thay đổi của những bên cung ứng.

Vì vậy khi bạn sản xuất một OpenGL render, bạn có thể lựa chọn quy trình render trực tiếp lên screen, sử dụng EGL, hoặc render cho tới những Frame Buffer. Việc render cho tới các Frame Buffer, chúng ta vẫn sinh sống vào OpenGL API, tuy nhiên nội dụng đã không được hiện ra trên screen. Việc hiển thị lên screen ở ngoại trừ phạm vi của OpenGL API, nó là của EGL API. Vì vậy trên thời gian render, bạn cũng có thể chọn một vào 2 nhiều loại để xuất ra.

Nhưng đừng trải nghiệm luôn, vì chưng như tôi đang nói, mỗi đơn vị cung cấp sinh sản riêng rẽ mang lại bọn họ các EGL API riêng rẽ. lấy một ví dụ Apple ko cho phép bạn render thẳng cho tới màn hình hiển thị sản phẩm công nghệ, chúng ta luôn luôn luôn bắt buộc render cho tới Frame Buffer và tiếp đến dùng EGL (bởi vì Appple) nhằm hiện nay ngôn từ lên màn hình hiển thị.

OpenGL pipelines

Nlỗi tôi sẽ nói đến "Programmable pipeline" cùng "fixed pipeline", Programmable pipeline là thư viện bối cảnh chất nhận được chúng ta làm mọi sản phẩm công nghệ liên quan tới Camera, Ánh sáng sủa, Chất liệu với hiệu ứng. Và chúng ta cũng có thể thao tác này với Shader. Vì vậy từng khi bạn nghe về "programmable pipeline" hãy nghĩ về Shader!

Thử thuộc khám phá Shader là gì thất thoát.

Shader hệt như một đoạn code, hình dạng nlỗi một lịch trình nhỏ, thao tác làm việc thẳng vào GPU nhằm tiến hành các phép tính phức tạp. Nếu diễn đạt một biện pháp phức hợp thì như vậy này: Màu nhan sắc cuối cùng của bề mặt thiết bị thể, chiếc cơ mà bao gồm một texture là T, bị đổi khác lúc đâm vào một thứ tất cả texture là TB, áp dụng màu sắc SC cùng với bội phản chiếu nút SL, dưới ánh sáng L với độ mạnh LPhường theo góc LA trường đoản cú khoảng cách Z cùng với độ rọi F với toàn bộ đang quan sát vị mắt của Camera C trên địa chỉ P với ống kính T.

Những điều này còn có nghĩa nó rất là tinh vi nhằm giải pháp xử lý bên trên CPU cùng quá nhiều trang bị đề xuất làm đẩy mang đến thư viện giải pháp xử lý bối cảnh. Vì vậy programmable pipeline chỉ nên phương pháp chúng ta làm chủ rất nhiều thiết bị đó ra sao.

Còn fixed pipeline ngược cùng với programmable pipeline! Fixed pipeline là thỏng viện đồ họa cách xử trí về tất cả các các loại với đến chúng ta api nhằm thiết lập Camera, Material, ánh nắng, hiệu ứng.

Để sản xuất Shader chúng ta dùng ngôn ngữ giống như như C, sẽ là OpenGL Shader Language (GLSL). OpenGL ES thực hiện cùng với một chút số lượng giới hạn được Call là OpenGL ES Shader Language (GLSL ES hoặc ESSL). Sự khác biệt là bạn có thêm một số hàm với có thể viết thêm những đổi mới trong GLSL rộng với GLSL ES, dẫu vậy cú pháp là tương đương nhau.

Điểm một chút ít về nguyên lý làm việc của rất nhiều Shader này:

quý khách tạo ra bọn chúng trong các file riêng lẻ hoặc viết thẳng trong code của bạn, miễn làm sao nội dung cuối cùng cất Shader Language sẽ được gửi mang đến OpenGL với biên dịch Shader cho chính mình (chúng ta thậm chí còn rất có thể dùng tiền-biên-dịch dưới dạng mã nhị phân, nhưng không ở trong trong ngôn từ bài viết này).

Shader thao tác làm việc theo cặp: Vertex Shader và Fragment Shader. Chủ đề này buộc phải khôn xiết đặc trưng, hãy coi chi tiết Vertex và Fragment thế nào. Để phát âm mọi gì từng một số loại shader làm cho, hãy quay trở lại ví dụ hình hộp ngơi nghỉ bên trên.

Vertex Shader

Vertex Shader cũng được biết đến như thể VS hoặc VSH là 1 lịch trình nhỏ tuổi sẽ tiến hành xúc tiến ngơi nghỉ từng đỉnh của mesh (mỗi vật thể được khiến cho bằng một lưới các tọa độ, Hotline là mesh). Hãy coi hình vỏ hộp sinh sống trên, hộp này có 8 đỉnh (giờ đồng hồ vào hình họa chỉ có 5 đỉnh đang rất được chỉ ra thôi), các bạn sẽ hiểu ngay lập tức sau đây thôi. vì vậy VSH sẽ tiến hành xử lý 8 lần bởi vì CPU.

Những gì Vertex Shader đang làm cho là xác xác định trí sau cùng của đỉnh. Quý Khách gồm hãy nhớ là Programmable pipeline cho phép họ điều khiển camera? đó là tại chỗ này, địa chỉ và độ msống của ống kính camera có thể biến hóa địa chỉ sau cuối của những đỉnh. Vertex Shader cũng có trách nhiệm chuẩn bị cùng xuất ra vài variable (giá trị, biến) mang lại Fragment Shader. Trong OpenGL chúng ta có mang các biến đổi ngơi nghỉ Vertex Shader, mà lại không phải mang đến Fragment Shader trực tiếp. Vì vậy, Vertex Shader đề nghị gửi những đổi thay cho tới Fragment Shader.

Nhưng tại vì sao chúng ta quan yếu thẳng truy cập cho tới Fragment Shader?

Hãy xem FSH (Fragment Shader) cùng bạn sẽ hiểu.

Fragment Shader

Giờ hãy xem lại hình lập phương một lần tiếp nữa.

quý khách hàng gồm thấy đỉnh số 5 bị ẩn tốt không? Vì cùng với địa điểm ví dụ, góc cù cụ thể, họ chỉ có thể bắt gặp 3 mặt được sinh ra trường đoản cú 7 đỉnh.

Đây là các thứ Fragment Shader thực hiện! FSH sẽ được cách xử lý sinh sống mỗi mặt được hiện của ảnh cuối cùng (được hiện tại trên màn hình). Ở trên đây chúng ta có thể gọi một fragment nhỏng là một trong những pixel. Nhưng nói phổ biến Chưa hẳn chính xác như pixel, do thân OpenGL render cùng bài toán chỉ ra hình họa sau cùng trên màn hình máy sẽ bị giãn nở ra theo cả 2 chiều (ví dụ camera thu lại theo tỉ lệ 4:3 mà màn hình là tỉ trọng 16:9 vậy). Vì vậy một fragment hoàn toàn có thể bao gồm thấp hơn hoặc nhiều hơn thế số pixel thực tế, nhờ vào trên máy và cấu hình vấn đề render. Trong hình lập phương sinh hoạt trên, Fragment Shader sẽ tiến hành cách xử lý sinh hoạt từng pixel của ba phương diện sẽ tồn tại trường đoản cú 7 đỉnh kia.

Bên trong Fragment Shader, họ đang làm việc với mọi thiết bị liên quan cho tới bề mặt của vật dụng thể, nhỏng cấu tạo từ chất, hiệu ứng phản chiếu, đổ nhẵn, ánh sáng, tương phản, khúc xạ, tổ chức triển khai với ngẫu nhiên những cảm giác khác mà lại bạn muốn. Sản phẩm sau cuối là màu của những px dưới định hình RGBA.

Giờ sản phẩm sau cùng cơ mà các bạn nên biết sẽ là về VSH và FSH thao tác làm việc cùng nhau ra làm sao. Đó là sẽ phải có một Vertex Shader và chỉ 1 Fragment Shader, không hơn không hề thua kém, đề nghị và đúng là đơn. Để bảo vệ bọn họ ko phạm lỗi, OpenGL bao gồm một đồ vật Hotline là Program. Một program vào OpenGL chỉ được biên dịch theo cặp 1 VSH và 1 FSH cơ mà thôi.

Tổng kết

Đây là toàn bộ về khái niệm OpenGL. Hãy nhớ đông đảo điểm này:

OpenGL lô ghích được tạo nên bởi 3 có mang cơ bản: Primitive sầu, Buffer và Rasterize.Primitives gồm điểm, mặt đường, tam giácBuffer hoàn toàn có thể là Frame Buffer, Render Buffer hoặc Buffer Object.Rasterize là quy trình chuyển đổi OpenGL tính toán thù ra các pixelOpenGL làm việc đối với cả Fixed hoặc Programmable pipeline.Fixed pipeline có từ lâu, lờ đờ, cồng kềnh. Có rất nhiều hàm thao tác làm việc cùng với Camera, tia nắng, vật liệu, hiệu ứngProgrammable pipeline dễ dàng dùng rộng, nhanh và dễ dàng nắm bắt rộng, bởi vào Programmable được cho phép OpenGL xây dựng được cùng với Camera, ánh nắng, vật liệu và hiệu ứng.Programmable pipeline là y như Shader: Vertex Shader, mỗi đỉnh của mesh, và Fragment Shader - ở từng phần hiện ra của mesh. Mỗi cặp Vertex Shader và Fragment Shader được biên dịch trong một thứ Điện thoại tư vấn là Program.

Hãy xem cả 3 bài xích, OpenGL có vẻ khôn xiết dễ dàng với dễ dàng nắm bắt. Đúng! nó đơn giản nhằm phát âm tuy thế nhằm học thì....haizzz3 điểm ở trên liệt kê ra những nhánh của OpenGL và để học tập toàn bộ bọn chúng bạn có lẽ rằng cần vài mon hoặc hơn thế.

Những gì tôi nỗ lực kể ở cả 2 phần tiếp sau của loạt bài bác này chính là toàn bộ phần đông gì tôi đã học được trong nửa năm cực kì tập trung, đi sâu vào OpenGL. Trong phần tiếp sau tôi đã cho bạn coi những hàm cơ phiên bản cùng cấu trúc của một vận dụng 3D thực hiện OpenGL. Độc lập cùng với ngôn từ xây dựng mà lại ai đang sử dụng hoặc với sản phẩm công nghệ nhiều người đang sử dụng.

Nhưng trước khi sang phần tiếp theo, tôi muốn nói cùng với bạn thêm 1 trang bị nữa:

OpenGL Error API

OpenGL là 1 thứ tâm lý tuyệt vời thao tác làm việc y như một cần trục làm việc cảng TP. Hải Phòng cùng các bạn không nhất thiết phải thẳng tiến hành rất nhiều gì xảy ra bên trong. Vậy giả dụ bao gồm lỗi xẩy ra thì sao? không có gì xảy ra với ứng dụng vị OpenGL hoàn toàn là ngơi nghỉ bên phía ngoài.

Nhưng làm rứa như thế nào để tìm hiểu Khi shader của khách hàng gồm lỗi? Làm nuốm như thế nào để biết giả dụ tiệm trình render vào các buffer không vận động đúng thật mong mỏi muốn?

Để bắt được những lỗi kia, OpenGL mang lại họ Error API. Đây là API cực kỳ dễ dàng và đơn giản, nó tất cả vài ba hàm cung ứng sẵn theo từng cặp. Một chiếc bình chọn dễ dàng, có/không, chỉ để tìm hiểu ví như tất cả thứ nào đó chạy đúng hay không. Cặp khác là để lấy ra được thông tin lỗi rõ ràng. Vì vậy cực kỳ dễ dàng và đơn giản. Trước tiên các bạn chất vấn, khôn xiết nkhô nóng, ví như tất cả một lỗi, chúng ta rước thông báo ra.

Nói tầm thường chúng ta đặt vài điểm bình chọn ở phần lớn khu vực hoàn toàn có thể xẩy ra lỗi, gioogns như việc biên dịch Shader hoặc thông số kỹ thuật Buffer nhằm tách các lỗi cơ phiên bản.

See more: Bạn Biết Gì Về Edm Là Gì ? Top Web Nghe Nhạc Edm Điện Tử Hay Gây Nghiện

Phần tiếp theo

Tại phần tiếp sau, Chúng ta hãy xem cụ thể bên phía trong đoạn code thực tiễn, các bạn sẽ đươc code rất nhiều.