Opengl là gì

Rất vui vày nhiều người đang đọc loạt bài bác lí giải này. Đây là loạt bài về thế giới 3 chiều. Cụ thể là OpenGL. Tôi đã tập trung toàn bộ thời hạn trong 6 tháng vừa xong để mày mò về technology 3 chiều, Tôi đã xong Engine 3 chiều của tôi (có lẽ là một dự án công trình lớn nhất nhưng mà tôi đã từng có lần làm) và hiện thời là thời gian tôi chia sẻ với bạn về số đông gì cơ mà tôi đã thu lượm được - toàn bộ tài liệu, toàn bộ sách, lí giải, với tất nhiên bao gồm cả phần lớn chủ ý đánh giá của chúng ta.

Bạn đang xem: Opengl là gì

Loạt bài này tất cả 3 phần:

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

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

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

Tổng quan

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

Trước Lúc nói đến OpenGL API bọn họ cần được có kiến thức và kỹ năng về 3 chiều. Lịch sử của 3D trong ngôn từ laptop được gói vào lịch sử dân tộc của OpenGL. Vì vậy hãy thuộc mày mò sang 1 chút ít về lịch sử dân tộc của nó.

Một mẩu chuyện nhỏ

*

Khoảng 20 năm ngoái gồm một bạn thương hiệu là Silibé Graphics (SGI) tạo thành một nhiều loại đồ vật nhỏ. Thiết bị này có thể chỉ ra các ảo ảnh siêu thực tiễn. Với hình họa 2 chiều, lắp thêm kia dám hiện được các ảnh mẫu mã 3D, mô phỏng ánh nhìn và chiều sâu theo mắt của nhỏ tín đồ. Thiết bị này được call là IrisGL (chắc rằng vày nó cầm demo tế bào rộp theo đôi mắt của nhỏ người).

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

Vào năm 1995 Microsoft giới thiệu Direct3D, kẻ địch tuyên chiến và cạnh tranh xứng đáng ghờm cùng với OpenGL.Và chỉ cho tới năm 1997 OpenGL 1.1 đã được tung ra. Nhưng cho tới tận năm 2004, OpenGL bắt đầu rất có thể thú vị được tôi, OpenGL 2.0 cùng với mọi tính năng tuyệt vời nhất. Tôi thực sự say mê Shaders, xây dựng pipeline (programmable pipeline).

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

Ngày nay, bạn có thể thấy logo sản phẩm của OpenGL (hoặc OpenGL ES) vào không ít trò đùa, vận dụng 3D, 2D cùng cực kỳ đa số mềm khác (đặc biệt là phần mềm 3D). OpenGL ES được sử dụng vày PlayStation, Android, Nintenvì 3DS, Nokia, Samsung, Symbian và tất nhiên cả Apple cùng với MacOS với iOS.

Đối thủ lớn số 1 của OpenGL

Vâng, bọn họ đang nói tới hệ điều hành quản lý Windows.

Quý Khách có lưu giữ tôi đã bảo rằng bản thứ nhất của OpenGL là 1992? cùng thời đặc điểm này, Microsoft đã có Windows 3. Nlỗi Microsoft luôn tin rằng "không gì được tạo ra, đông đảo trang bị được copy", Microsot sẽ bao gồm cụ copy OpenGL trong những gì chúng ta call là DirectX và được trình làng lần đầu năm mới 1995 vào Windows 95 tương ứng.

Một năm tiếp theo, 1996, Microsoft ra mắt Direct3D, một phiên bạn dạng copy của OpenGL. Điểm nên để ý là Microsoft đã chiếm ưu thay bên trên thị phần trong tương đối nhiều năm ngay thức thì, với DirectX hoặc (Direct3D) sẽ lấn sâu vào những laptop PCs và khi Microsoft bắt đầu đưa thanh lịch Thị Trường di động với Video trò chơi, DirectX cũng lấn sảnh lịch sự.

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

Giờ là thời gian chúng ta có thể bắt đầu mày mò thế giới lập trình 3D được rồi!

3D - Con ánh mắt sản phẩm nhất

Từ thời điểm tôi lớn lên, tôi vẫn si mê technology 3D cùng các trò chơi trò chơi 3D. Tất cả những nhân đồ gia dụng trong các số đó, bé bạn, biết về tế bào bỏng nhân loại thực trong số cảm giác 3 chiều tới từ một khu vực duy nhất: bé đôi mắt.

Con đôi mắt là cơ phiên bản trong nhân loại 3 chiều. Tất cả phần đông điều họ làm là mô bỏng nó, làm sao thật đẹp mắt, thật hấp dẫn hệt như hầu hết gì mắt con bạn rất có thể thấy. Những định nghĩa liên quan tới mắt như góc nhìn, tầm chú ý, ống kính, thấu kính, những loại sự thứ là sẽ tiến hành nói tới thỉnh thoảng các bạn làm thân quen với 3 chiều.

Mọi vật dụng bọn họ làm là nỗ lực tái tạo nên tự đôi mắt bạn những thứ: góc nhìn, điểm mù, biến tấu, độ sâu hình họa, tiêu cự, ánh mắt...

Không gian 3 chiều

Nghe có vẻ như dại dột tuy nhiên đích thực nên nói rằng: trái đất 3D là 3 chiều bởi vì nó gồm 3 chiều. Tôi nói cái này bởi nó cực kỳ quan trọng nhằm nói thêm rằng nó nhiều hơn nữa 2D một chiều cùng phức hợp rộng rất không ít đối với 2 chiều.

Hãy xem, trong nhân loại 2D khi chúng ta nên xoay một hình vuông cực kỳ đơn giản: 45 độ luôn là 45 độ. Nhưng với 3D, nhằm xoay một hình vuông những hiểu biết 3 trục X, Y, Z. Prúc nằm trong bên trên thiết bị tự của góc con quay, tác dụng sau cuối hoàn toàn có thể hết sức khác biệt. Những máy thông thường sẽ trsống lên linch tinch Khi họ demo cù với những trục khác biệt. Ví dụ: xoay x=25, y=đôi mươi là một trong những loại, x=10, y=đôi mươi và sau đó x=10 lại tạo nên một hiệu quả new.

vì thế nói theo cách khác Lúc thêm 1 chiều không giống tạo cho các bước của bọn họ tinh vi lên vội vàng nhiều lần.

Không cần 3D mà bắt buộc là 4D

Hmmilimet, lại thêm 1 chiều nữa ư?

Chính xác, điểm ở đầu cuối tôi mong muốn nói đến đó là vấn đề này. Chúng ta không chỉ thao tác làm việc trong thế giới 3D, bọn họ còn có chiều sản phẩm công nghệ 4: thời hạn. Những sự vật vào trái đất 3 chiều đề nghị hệ trọng lẫn nhau, rất cần phải di chuyển, va va, biến hóa. Và nhỏng tôi đã nói trên, Việc biến đổi đó trong thế giới 3 chiều tạo ra các kết quả khác biệt.

Vậy mang lại lúc này họ sẽ quan niệm được 3D là: "vấn đề tế bào phỏng đôi mắt của nhỏ người với mô rộp sự hoạt động của những sự vật".

Áp dụng OpenGL vào trái đất 3D

Bây giờ mới là thời điểm nói về cái độc đáo của bài blog này: Hãy nói đến OpenGL. Thứ nhất họ phải cảm ơn các nhà toán thù học nlỗi Ơ-le, Hamilton, Pythago và rất nhiều nhà công nghệ khác. Nhờ bao gồm chúng ta mà lại ngày này họ gồm rất nhiều phương pháp cùng chính sách để làm việc với không khí 3 chiều. OpenGL vẫn áp dụng toàn bộ kiến thức kia nhằm tạo ra một quả đât 3 chiều ngay trước khía cạnh bọn họ. Có hàng nghìn, thậm chí còn hàng nghìn phxay tính tân oán bên trên một giây áp dụng những bí quyết toán học nhằm mô bỏng lại vẻ đẹp nhưng mắt tín đồ bắt gặp.

OpenGL là 1 trong MÁY TRẠNG THÁI (state machine) - điều đó có nghĩa là toàn cục OpenGL thao tác làm việc trên quy mô kiến tạo theo tâm trạng. Để minh họa mang lại OpenGL, hãy tưởng tượng một sản phẩm công nghệ Cần Trục cảng TP Hải Phòng chẳng hạn. Tại đó có tương đối nhiều những thùng mặt hàng (container) cùng với không ít các khiếu nại sản phẩm nhỏ tuổi phía bên trong. OpenGL y hệt như toàn bộ khu vực cảng đó bao gồm:

Các thùng hàng (container) là các đối tượng người sử dụng vào OpenGL (Textures, Shaders, Meshes, và những sản phẩm tương tự)Các kiện sản phẩm bên phía trong mỗi container là những gì bọn họ tạo ra vào ứng dụng áp dụng OpenGL. Đó là số đông đồ vật họ bắt gặp.Máy nên trục là những OpenGL API, loại nhưng mà họ sẽ thực hiện.

Vậy Khi bọn họ thực hiện một hàm trong OpenGL giống như bài toán thực hiện cần trục. Chiếc nên trục đem các container trong cảng, nâng nó lên, cách xử lý gần như gì bên phía trong cùng cuối cùng thả xuống vào trong 1 khu vực đang định sẵn. quý khách chưa hẳn trực tiếp sử dụng cảng đó, tất yêu biến hóa ngôn từ những thùng hàng, bắt buộc thay thế chúng, bạn cũng quan trọng trực tiếp đụng chạm vào các thùng sản phẩm vào cảng. Tất cả chỉ cần các bạn ra lệnh mang đến chiếc cần trục thực hiện. Chỉ gồm dòng đề xuất trục kia mới rất có thể tác động ảnh hưởng lên các thùng sản phẩm vào container. Hãy lưu giữ điều này! Nó là rất là đặc biệt quan trọng về OpenGL cho tới hiện thời. Chiếc cần trục chỉ là một trong đồ vật rất có thể cai quản các thùng sản phẩm vào cảng.

*

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

Vậy OpenGL thao tác như vậy nào?

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

Logic của OpenGL

OpenGL là tlỗi viện đồ họa tương đối nđính thêm gọn gàng cùng xúc tích và ngắn gọn. Những gì bạn thấy trong những phần mềm cách xử lý 3D chuyên nghiệp hóa là cực kỳ phức hợp chuyển động bên trên OpenGL. Vì Logic của OpenGL gồm có trang bị sau:

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

OpenGL hoạt động luân chuyển quanh 3 khái niệm này. Mỗi có mang ở trên chủ quyền nhau cùng có tác dụng nạm như thế nào nhằm cả 3 hoàn toàn có thể cùng mọi người trong nhà tạo nên những hiệu ứng 3 chiều ưa nhìn (tuyệt bao gồm cả cùng với những hình họa 2 chiều vày nó chỉ cần dạng 3 chiều với độ sâu Z=0, chúng ta vẫn nói vấn đề này sau).

Primitives

Bao có 3 một số loại đói tượng:

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

Một điểm 3D hoàn toàn có thể coi nlỗi một hạt trong không gian.Một con đường thẳng luôn luôn rất có thể coi nhỏng một vector.Một tam giác có thể coi là một phương diện trong 1 cái lưới cùng với hàng trăm ngàn, triệu tam giác phối kết hợp lại.

Một vài ba phiên phiên bản OpenGL hỗ trợ quads (hình tứ diện cùng với 4 điểm), cũng là một một số loại của tam giác, nhưng mà để OpenGL ES đạt tác dụng cao nhất thì cái này sẽ không được hỗ trợ.

Buffers

Nói một biện pháp đơn giản dễ dàng, buffer là 1 vùng tàng trữ tạm thời giúp cho câu hỏi buổi tối ưu. Có 3 một số loại Buffer:

Frame BufferRender BufferBuffer Object

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

Render Buffer là 1 vùng ghi nhớ lâm thời của một ảnh tốt nhất. Giờ bạn có thể cụ thể rộng khi 1 Frame Buffer chính là bao hàm các Render Buffer. Có vài các loại Render Buffer: Màu, độ sâu, hình khối hận.

Màu: lưu trữ phần đông color sau cuối được sinch bởi OpenGL render và lưu giữ dưới dạng hình họa color (RGB).Độ sâu lưu trữ cực hiếm Z của đối tượng người tiêu dùng. Nếu các bạn đã thân quen cùng với các phần mềm 3 chiều, bạn sẽ biết về độ sâu của ảnh là gì. Nó là tỉ trọng độ màu xám của hình họa phụ thuộc theo địa điểm so với màn hình hiển thị. Trong ngôi trường thích hợp tương đối đầy đủ độ Trắng Khi đối tượng người tiêu dùng ở sớm nhất và color black trọn vẹn Khi nó làm việc xa độc nhất.Hình kân hận ám chỉ về thành phần chỉ ra của đối tượng người tiêu dùng. Giống như một tấm mask cho những vùng được bắt gặp. Được giữ bên dưới dạn ảnh chỉ có 2 white color và Đen.

Buffer Object là một vùng nhớ nhưng mà OpenGL điện thoại tư vấn là "server side" (hoặc không khí ảnh hưởng lưu giữ trữ). Buffer Object cũng là một vùng ghi nhớ trong thời điểm tạm thời, tuy thế có vẻ như thọ dài ra hơn nữa các loại trước. Một Buffer Object rất có thể tàng trữ trong suốt quy trình thực hiện vận dụng. Buffer Object có thể giữ lại những thông tin về đối tượng 3D dưới dạng đã làm được về tối ưu. Những báo cáo này rất có thể tất cả 2 loại: Structure cùng Indice.

Xem thêm: 【Giải Đáp】 Freight Collect Là Gì ? Nghĩa Của Từ Freight Collect Trong Tiếng Việt

Structure là mảng trình bày các đối tượng người sử dụng 3D, vd: một mảng những đỉnh, mảng những tọa độ texture hoặc một mảng của không ít gì bạn muốn. Indice thì ví dụ rộng, mảng này được dùng để làm xác minh có từng nào tam giác trong lưới sẽ được tạo nên dựa vào mảng structure.

quý khách hàng vẫn cực nhọc đọc ư? Hãy xem ví dụ dưới đây:

Tưởng tượng một khối 3 chiều. Kăn năn này còn có 6 khía cạnh được hiện ra vị 8 đỉnh?

*

Mỗi mặt là một hình vuông vắn, tuy thế bạn tất cả nhớ là OpenGL chỉ biết về những tam giác đúng không? Vì vậy chúng ta yêu cầu chuyển gần như hình vuông đó thành các tam giác để triển khai câu hỏi với OpenGL. vì thế chúng ta tất cả 12 tam giác vớ cả!Hình ảnh sinh hoạt trên được tạo thành vày phần mềm Movày, hãy coi góc bên dưới bên đề xuất. Chúng là phần đông công bố về đồ gia dụng thể của chúng ta. quý khách có thể thấy gồm 8 đỉnh cùng 12 mặt (GL: 12).

Các tam giác vào OpenGL là sự phối hợp của các đỉnh 3 chiều. Vì vậy để tạo thành mặt phẳng của dòng vỏ hộp, bọn họ bắt buộc OpenGL sản xuất theo cách nlỗi này: đỉnh 1, đỉnh 2, đỉnh 3, đỉnh 1, đỉnh 3, đỉnh 4.

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

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

Giờ quay trở về cùng với Buffer Object, một số loại đầu tiên là một trong mảng những structure, như đỉnh 1, đỉnh 2, đỉnh 3, đỉnh 4,... và một số 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à bọn chúng được tối ưu để làm câu hỏi thẳng cùng với GPU với chúng ta ko yêu cầu giữ lại mảng đó trong ứng dụng của công ty sau khoản thời gian tạo thành một Buffer Object.

Rasterize

Rastersize là quy trình giải pháp xử lý vì chưng OpenGL dấn toàn bộ thông tin về đối tượng người sử dụng 3 chiều (bao gồm đỉnh, tọa độ, tính tân oán...) để tạo thành một ảnh 2D. Ảnh này có khả năng sẽ bị một vài ba biến đổi cùng tiếp đến hiển thị trên màn hình của sản phẩm.

Nhưng sinh sống bước sau cuối này, việc kết nối giữa ban bố các px và vật dụng màn hình hiển thị thuộc về những đơn vị thêm vào lắp thêm. Nhóm Khronos hỗ trợ API khác Call là EGL, nhưng trên đây chỉ là api của những nhà cấp dưỡng. Chúng ta, các developer sẽ không còn thao tác làm việc thẳng với Khronos EGL, mà với phiên bản đã được thay đổi của các đơn vị cung cấp.

Vì vậy khi chúng ta sản xuất một OpenGL render, chúng ta cũng có thể lựa chọn quá trình render trực tiếp lên screen, thực hiện EGL, hoặc render cho tới các Frame Buffer. Việc render cho tới các Frame Buffer, chúng ta vẫn sinh hoạt vào OpenGL API, dẫu vậy nội dụng đang không được chỉ ra bên trên màn hình hiển thị. Việc hiển thị lên màn hình nằm bên cạnh 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 1 vào 2 loại nhằm xuất ra.

Nhưng chớ trải nghiệm luôn, bởi như tôi sẽ nói, từng bên cung ứng chế tạo ra riêng rẽ mang đến chúng ta các EGL API riêng biệt. lấy một ví dụ Apple ko có thể chấp nhận được chúng ta render trực tiếp tới màn hình máy, bạn luôn luôn luôn luôn yêu cầu render cho tới Frame Buffer với sau đó cần sử dụng EGL (vị Appple) để hiện tại nội dung lên màn hình hiển thị.

OpenGL pipelines

Nhỏng tôi sẽ nói đến "Programmable pipeline" và "fixed pipeline", Programmable pipeline là thư viện giao diện được cho phép họ làm cho phần nhiều đồ vật tương quan tới Camera, Ánh sáng sủa, Chất liệu với cảm giác. Và bạn có thể thao tác làm việc này với Shader. Vì vậy mỗi khi chúng ta nghe về "programmable pipeline" hãy nghĩ về về Shader!

Thử thuộc tò mò Shader là gì nhỉ.

Shader giống như một quãng code, vẻ bên ngoài nhỏng một lịch trình nhỏ tuổi, làm việc thẳng vào GPU để triển khai những phép tính tinh vi. Nếu diễn đạt một giải pháp phức hợp thì như vậy này: Màu dung nhan sau cùng của mặt phẳng đồ thể, loại mà bao gồm một texture là T, bị biến đổi Lúc đâm vào trong 1 đồ dùng có texture là TB, thực hiện màu SC cùng với bội phản chiếu nút SL, bên dưới tia nắng L với độ mạnh LPhường theo góc LA từ khoảng cách Z với độ rọi F và toàn bộ sẽ quan sát vị mắt của Camera C trên địa điểm Phường. cùng với ống kính T.

Những điều này còn có nghĩa nó rất là tinh vi để cách xử lý bên trên CPU và không ít thiết bị yêu cầu làm cho đẩy mang đến thỏng viện giải pháp xử lý hình ảnh. Vì vậy programmable pipeline chỉ cần giải pháp họ làm chủ đều đồ vật đó như thế nào.

Còn fixed pipeline ngược với programmable pipeline! Fixed pipeline là thư viện bối cảnh xử lý về toàn bộ những các loại và cho chúng ta api để cài đặt Camera, Material, ánh sáng, hiệu ứng.

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

Điểm một ít về phương pháp thao tác làm việc của rất nhiều Shader này:

quý khách hàng sản xuất chúng trong các tệp tin riêng lẻ hoặc viết trực tiếp vào code của công ty, miễn làm thế nào ngôn từ sau cuối đựng Shader Language sẽ được gửi mang lại OpenGL với biên dịch Shader cho mình (bạn thậm chí rất có thể cần sử dụng tiền-biên-dịch bên dưới dạng mã nhị phân, dẫu vậy ko thuộc vào nội dung bài viết này).

Shader làm việc theo cặp: Vertex Shader với Fragment Shader. Chủ đề này đề xuất khôn cùng đặc biệt, hãy coi chi tiết Vertex cùng Fragment thế nào. Để hiểu phần lớn gì mỗi loại shader có tác dụng, hãy quay trở lại ví dụ hình hộp làm việc bên trên.

Vertex Shader

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

Những gì Vertex Shader sẽ làm là xác định vị trí cuối cùng của đỉnh. quý khách hàng gồm nhớ là Programmable pipeline chất nhận được chúng ta tinh chỉnh và điều khiển camera? chính là ở chỗ này, địa điểm với độ mở của ống kính camera có thể biến hóa địa chỉ ở đầu cuối của những đỉnh. Vertex Shader cũng có thể có trách nhiệm sẵn sàng với xuất ra vài variable (quý giá, biến) đến Fragment Shader. Trong OpenGL chúng ta tư tưởng những biến hóa làm việc Vertex Shader, tuy vậy không phải cho Fragment Shader thẳng. Vì vậy, Vertex Shader bắt buộc gửi các phát triển thành tới Fragment Shader.

Nhưng tại sao bọn họ chẳng thể trực tiếp truy cập cho tới Fragment Shader?

Hãy coi FSH (Fragment Shader) với các bạn sẽ gọi.

Fragment Shader

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

quý khách có thấy đỉnh số 5 bị ẩn giỏi không? Vì với địa chỉ rõ ràng, góc tảo ví dụ, chúng ta chỉ hoàn toàn có thể nhìn thấy 3 mặt được có mặt trường đoản cú 7 đỉnh.

Đây là những gì Fragment Shader thực hiện! FSH sẽ tiến hành xử trí nghỉ ngơi từng mặt được hiện của hình họa cuối cùng (được hiện nay bên trên màn hình). Tại trên đây bạn có thể hiểu một fragment nhỏng là 1 px. Nhưng nói phổ biến không hẳn đúng đắn như px, do thân OpenGL render và bài toán hiện ra hình ảnh sau cùng trên màn hình sản phẩm có khả năng sẽ bị giãn nở ra theo cả 2 chiều (ví dụ camera thu lại theo tỉ lệ 4:3 nhưng mà màn hình hiển thị là tỉ lệ thành phần 16:9 vậy). Vì vậy một fragment hoàn toàn có thể có ít hơn hoặc nhiều hơn thế số pixel thực tiễn, nhờ vào bên trên thiết bị với thông số kỹ thuật Việc render. Trong hình lập phương thơm sinh sống bên trên, Fragment Shader sẽ được giải pháp xử lý làm việc mỗi px của cha khía cạnh đang hiện lên trường đoản cú 7 đỉnh kia.

Bên trong Fragment Shader, họ sẽ làm việc với tất cả thứ liên quan tới bề mặt của đồ gia dụng thể, nlỗi làm từ chất liệu, hiệu ứng làm phản chiếu, đổ nhẵn, ánh nắng, tương phản bội, khúc xạ, tổ chức cùng bất kỳ những hiệu ứng khác cơ mà bạn có nhu cầu. Sản phẩm cuối cùng là màu sắc của các pixel dưới định hình RGBA.

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

Tổng kết

Đây là tất cả về quan niệm OpenGL. Hãy nhớ đa số điểm này:

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

Hãy coi cả 3 bài, OpenGL có thể khôn cùng dễ dàng và đơn giản và dễ dàng nắm bắt. Đúng! nó đơn giản nhằm gọi mà lại nhằm học tập thì....haizzz3 điểm ngơi nghỉ bên trên liệt kê ra các nhánh của OpenGL cùng nhằm học toàn bộ bọn chúng các bạn chắc rằng đề nghị vài mon hoặc hơn thế.

Những gì tôi cố gắng nhắc ở hai phần tiếp sau của loạt bài này đó là tất cả gần như gì tôi vẫn 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 mình xem những hàm cơ bạn dạng với kết cấu của một áp dụng 3 chiều áp dụng OpenGL. Độc lập cùng với ngôn ngữ lập trình sẵn mà nhiều người đang thực hiện hoặc cùng với sản phẩm ai đang thực hiện.

Nhưng trước khi lịch sự phần tiếp theo, tôi mong nói cùng với chúng ta thêm 1 vật dụng nữa:

OpenGL Error API

OpenGL là một trong máy trạng thái tuyệt vời làm việc hệt như một yêu cầu trục làm việc cảng Hải Phòng Đất Cảng với bạn không cần phải trực tiếp tiến hành hầu như gì xẩy ra bên trong. Vậy giả dụ gồm lỗi xảy ra thì sao? không có gì xảy ra với vận dụng vày OpenGL trọn vẹn là ngơi nghỉ phía bên ngoài.

Nhưng có tác dụng ráng làm sao để biết khi shader của người tiêu dùng bao gồm lỗi? Làm cầm cố nào để biết giả dụ quán trình render vào những buffer không vận động đúng thật hy vọng muốn?

Để bắt được các lỗi kia, OpenGL mang đến chúng ta Error API. Đây là API cực kỳ đơn giản dễ dàng, nó bao gồm vài ba hàm hỗ trợ sẵn theo từng cặp. Một loại chất vấn đơn giản, có/ko, chỉ để hiểu nếu gồm thứ nào đó chạy đúng hay không. Cặp không giống là để đưa ra được thông tin lỗi ví dụ. Vì vậy cực kì đơn giản và dễ dàng. Trước hết chúng ta kiểm soát, hết sức nkhô giòn, ví như tất cả một lỗi, các bạn lấy thông tin ra.

Nói thông thường họ đặt vài điểm kiểm soát làm việc mọi vị trí rất có thể xảy ra lỗi, gioogns nhỏng bài toán biên dịch Shader hoặc thông số kỹ thuật Buffer nhằm rời các lỗi cơ phiên bản.

Xem thêm: Reivew, Đánh Giá Sony Xperia Z5 Dual Từ Người Đã Mua, Đánh Giá Nhanh Xperia Z5 Dual

Phần tiếp theo

Ở phần tiếp sau, Chúng ta hãy xem chi tiết phía bên trong đoạn code thực tiễn, bạn sẽ đươc code không ít.


Chuyên mục: Công Nghệ