Rất vui vì ai đang đọc loạt bài bác chỉ dẫn này. Đây là loạt bài về trái đất 3 chiều. Cụ thể là OpenGL. Tôi đang tập trung toàn cục thời hạn trong khoảng thời gian nửa năm vừa xong để mày mò về technology 3D, Tôi đang dứt Engine 3D của tôi (có lẽ là 1 dự án lớn nhất mà lại tôi đã có lần làm) và hiện giờ là thời gian tôi chia sẻ cùng với chúng ta về các gì nhưng mà tôi sẽ thu nhặt được - tất cả tư liệu, tất cả sách, khuyên bảo, và tất yếu bao hàm cả hầu hết chủ ý đánh giá của các bạn.

Bạn đang xem: Open gl là gì

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

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

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

Nào, ban đầ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 đến "mở cửa Graphics Library" với nó được dùng tương đối nhiều vào ngôn từ laptop. OpenGL là địa điểm sớm nhất giữa CPU (dòng nhưng mà chúng ta - hầu hết developer - chạy các ứng dụng trên các ngữ điệu lập trình) cùng GPU (chip cách xử lý vật dụng họa). Vì vậy OpenGL cần được được cung ứng bởi vì các đơn vị cung ứng card bối cảnh (vd: NVidia) với được thiết lập vì chưng phần nhiều công ty đối tác phát triển hệ điều hành (y hệt như Apple xuất xắc Microsoft) cùng ở đầu cuối OpenGL mang lại họ một API thống tốt nhất để gia công bài toán. API này là những "Ngôn ngữ miễn phí" (hoặc phần nhiều miễn phí). Việc này vượt dễ dàng bởi vì nếu khách hàng thực hiện C hoặc C++ tốt thậm chí là là Objective-C, Perl, C# xuất xắc Javascript giỏi bất kỳ ngôn ngữ như thế nào bạn muốn, API của OpenGL luôn giống như nhau, giải pháp xử lý tương tự nhau, chung tác dụng, loại lệnh và là nơi nhưng mà loạt bài xích trả lời này bắt đầu!

Trước lúc nói đến OpenGL API chúng ta rất cần phải tất cả kiến thức và kỹ năng về 3D. Lịch sử của 3D vào ngôn từ laptop được gói vào lịch sử hào hùng của OpenGL. Vì vậy hãy thuộc mày mò qua một chút về lịch sử dân tộc của chính nó.

Một mẩu truyện nhỏ

*

Khoảng trăng tròn thời gian trước tất cả một tín đồ tên là Silinhỏ Graphics (SGI) tạo ra một loại lắp thêm nhỏ dại. Thiết bị này hoàn toàn có thể hiện ra các ảo hình ảnh khôn cùng thực tế. Với hình họa 2D, thiết bị kia dám hiện nay được những ảnh loại 3D, mô bỏng cái nhìn cùng chiều sâu theo đôi mắt của nhỏ người. Thiết bị đó được Call là IrisGL (chắc hẳn rằng do nó thay demo tế bào phỏng theo mắt của con người).

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

Vào năm 1995 Microsoft giới thiệu Direct3 chiều, kẻ thù tuyên chiến đối đầu đáng ghờm cùng với OpenGL.Và chỉ tới năm 1997 OpenGL 1.1 đã được tung ra. Nhưng tới tận năm 2004, OpenGL bắt đầu rất có thể quyến rũ được tôi, OpenGL 2.0 với phần đa tài năng hoàn hảo. Tôi thực sự mê thích Shaders, lập trình sẵn pipeline (programmable pipeline).

Cuối thuộc vào 2007 OpenGL ES 2.0 đang có sức mạnh của Shader với Programmable pipeline tới những hệ thống nhúng.

Ngày nay, bạn cũng có thể thấy biệu tượng công ty của OpenGL (hoặc OpenGL ES) trong rất nhiều trò đùa, áp dụng 3D, 2 chiều với khôn cùng đa phần mượt không giống (đặc biệt là phần mềm 3D). OpenGL ES được dùng vị PlayStation, Android, Nintenvì chưng 3DS, Nokia, Samsung, Symbian và tất yếu cả Apple với MacOS và iOS.

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

Vâng, chúng ta vẫn nói tới hệ điều hành quản lý Windows.

quý khách gồm lưu giữ tôi sẽ nói rằng bạn dạng đầu tiên của OpenGL là 1992? thuộc thời điểm đó, Microsoft đã bao gồm Windows 3. Như Microsoft luôn tin rằng "không gì được tạo thành, rất nhiều máy được copy", Microsot đã gồm núm copy OpenGL trong những gì họ Call là DirectX và được trình làng lần đầu năm mới 1995 vào Windows 95 tương xứng.

Một năm sau, 1996, Microsoft reviews Direct3D, một phiên bản copy của OpenGL. Điểm nên để ý là Microsoft đã sở hữu ưu thế trên Thị trường trong nhiều năm tức khắc, với DirectX hoặc (Direct3D) sẽ lấn sâu vào những máy tính PCs và lúc Microsoft bước đầu chuyển lịch sự Thị Phần di động và Video trò chơi, DirectX cũng lấn sân sang.

Ngày ni DirectX tất cả kết cấu khôn xiết tương tự với OpenGL: sử dụng ngôn ngữ Shader, cũng 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 cũng như luôn. Sự khác biệt chỉ là OpenGL là miễn tổn phí, luôn luôn mlàm việc, nhưng mà DirectX là đóng. OpenGL mang lại iOS, MacOS, khối hệ thống Linux trong khi DirectX chỉ giành cho hệ quản lý của Microsoft.

Giờ là lúc bạn cũng có thể bước đầu tò mò nhân loại lập trình 3 chiều được rồi!

3D - Con mắt nhìn sản phẩm công nghệ nhất

Từ dịp tôi bự lên, tôi sẽ say mê công nghệ 3D cùng các trò chơi game 3D. Tất cả những nhân trang bị trong các số đó, nhỏ fan, biết về tế bào phỏng quả đât thực trong các hiệu ứng 3 chiều tới từ một vị trí duy nhất: bé mắt.

Con mắt là cơ bản vào thế giới 3 chiều. Tất cả các điều họ làm là tế bào phỏng nó, làm sao thiệt đẹp, thiệt lôi kéo giống như phần nhiều gì mắt con tín đồ có thể thấy. Những khái niệm liên quan tới mắt nlỗi góc nhìn, khoảng chú ý, ống kính, thấu kính, các loại sự vật dụng là sẽ tiến hành nói tới nhiều lúc chúng ta làm cho quen thuộc với 3 chiều.

Mọi thứ họ có tác dụng là cố gắng tái tạo thành từ bỏ đôi mắt fan đông đảo thứ: ánh mắt, điểm mù, biến dị, độ sâu ảnh, tiêu cự, góc nhìn...

Không gian 3 chiều

Nghe có vẻ như đần độn tuy nhiên thực sự phải nói rằng: thế giới 3D là 3 chiều vì chưng nó gồm 3 chiều. Tôi nói đặc điểm này bởi nó hết sức đặc biệt quan trọng nhằm nói thêm rằng nó nhiều hơn thế nữa 2D một chiều cùng phức tạp rộng khôn xiết không hề ít đối với 2 chiều.

Hãy xem, vào quả đât 2D Khi bọn họ cần xoay một hình vuông vắn cực kỳ đơn giản: 45 độ luôn là 45 độ. Nhưng cùng với 3 chiều, nhằm con quay một hình vuông vắn kinh nghiệm 3 trục X, Y, Z. Phụ trực thuộc trên sản phẩm tự của góc quay, công dụng sau cùng có thể vô cùng khác nhau. Những máy bình thường đang trlàm việc lên linch tinh khi họ demo cù với các trục khác biệt. Ví dụ: tảo x=25, y=20 là một trong những dạng hình, x=10, y=trăng tròn và kế tiếp x=10 lại tạo ra một tác dụng bắt đầu.

bởi vậy nói theo cách khác Khi thêm một chiều khác tạo nên quá trình của họ phức hợp lên gấp các lần.

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

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

Chính xác, điểm ở đầu cuối tôi mong nhắc đến chính là điều này. Chúng ta không chỉ là thao tác làm việc vào nhân loại 3 chiều, họ còn có chiều sản phẩm 4: thời hạn. Những sự đồ vật trong nhân loại 3D đề nghị liên hệ cho nhau, cần được dịch rời, va chạm, đổi khác. Và nhỏng tôi đã nói trên, việc chuyển đổi đó trong thế giới 3 chiều tạo thành những hiệu quả khác biệt.

Vậy cho bây giờ họ vẫn định nghĩa được 3D là: "bài toán tế bào phỏng đôi mắt của nhỏ người và tế bào bỏng sự chuyển động của các sự vật".

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

Bây giờ đồng hồ mới là lúc nói về chiếc độc đáo của bài xích blog này: Hãy nói tới OpenGL. Trước hết bọn họ bắt buộc cảm ơn những công ty tân oán học nhỏng Ơ-le, Hamilton, Pythago cùng không ít công ty kỹ thuật khác. Nhờ gồm chúng ta mà thời nay họ bao gồm rất nhiều công thức cùng cách thức để làm vấn đề cùng với không khí 3D. OpenGL đang áp dụng tất cả kiến thức và kỹ năng kia nhằm tạo nên một quả đât 3D tức thì trước khía cạnh họ. Có hàng ngàn, thậm chí còn hàng triệu phép tính toán trên một giây áp dụng những phương pháp tân oán học để tế bào bỏng lại vẻ đẹp mắt mà lại mắt tín đồ phát hiện ra.

OpenGL là một MÁY TRẠNG THÁI (state machine) - vấn đề đó Tức là toàn thể OpenGL thao tác bên trên quy mô xây dựng theo tâm trạng. Để minc họa mang lại OpenGL, hãy tưởng tượng một thiết bị Cần Trục cảng TP Hải Phòng ví dụ điển hình. Tại kia có tương đối nhiều các thùng sản phẩm (container) với không hề ít các khiếu nại mặt hàng bé dại bên phía trong. OpenGL giống hệt như toàn cục quần thể cảng đó bao gồm:

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

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

*

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

Vậy OpenGL thao tác làm việc như vậy nào?

Đi sâu vào bộ xử lý tính toán thù của OpenGL, ta thấy OpenGL sử dụng tính toán thẳng bên trên GPU - Hartware giải pháp xử lý hình ảnh đến máy tính - với thực hiện vết phảy rượu cồn (floating points). CPU (Central Processing Unit) là chip cách xử trí của dòng sản phẩm tính. Còn GPU (Graphics Processing Unit) là chip cách xử lý hình ảnh. Chip xử lý bối cảnh này giúp cho CPU bớt tphát âm các các bước nặng trĩu nhọc: nó hoàn toàn có thể cách xử trí hình ảnh trước lúc hiện ra màn hình hiển thị. Hay sâu rộng, đa số gì OpenGL thực hiện đó là bên trên GPU, chũm bởi tính toán thù trên CPU. GPU nkhô giòn hơn khôn xiết tương đối nhiều cùng với những số thực so với CPU. Đây là nguyên nhân cơ phiên bản nhằm các trò nghịch 3 chiều chạy nkhô cứng hơn Lúc bao gồm thẻ giao diện. Đây cũng chính là nguyên do cho những phần mềm xử trí 3 chiều chuyên nghiệp hóa gó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" (cách xử lý trên GPU). Một vài ba phần mềm cũng mang đến họ một tùy chọn: Có cần sử dụng OpenGL tốt không? Và kia, giờ đồng hồ bạn đã biết rồi. Tùy chọn đó đó là dành cho Việc cách xử lý đang ngơi nghỉ bên trên GPU hay là không. Vì vậy, OpenGL đã hoàn toàn thao tác làm việc cùng với GPU hay không? câu vấn đáp là không Chắn chắn. Chỉ đầy đủ thao tác làm việc xử trí ảnh cùng vài ba lắp thêm không giống thôi. OpenGL cho chúng ta tương đối nhiều công dụng nhằm lưu trữ ảnh, tài liệu, biết tin vào một định hình rõ ràng. Những định dạng này được cách xử trí trực tiếp vày GPU. Vì vậy OpenGL phụ thuộc vào Hartware. Nếu Hartware không hỗ trợ OpenGL, chúng ta cấp 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ần những tính năng vượt trội của GPU. Nhưng cũng chớ lo lắng, OpenGL luôn luôn có nhu cầu các bên thêm vào tích phù hợp vào, chúng ta (gần như developer - coder) vẫn thao tác làm việc bên trên các phiên bản OpenGL new chỉ khi trang bị sẽ sẵn sàng chuẩn bị. Trong thực tế, tât cả những chip hình ảnh hiện giờ đa số cung cấp OpenGL. Vì vậy chúng ta cũng có thể thực hiện OpenGL với tương đối nhiều ngôn ngữ với trang bị. Thậm chí cùng với Microsoft Windows.

Logic của OpenGL

OpenGL là thư viện giao diện khá nthêm gọn với súc tích. Những gì chúng ta thấy trong các phần mềm cách xử trí 3 chiều bài bản là cực kỳ phức hợp hoạt động trên OpenGL. Vì Logic của OpenGL bao gồm đồ vật sau:

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

OpenGL chuyển động xoay quanh 3 có mang này. Mỗi khái niệm sinh hoạt bên trên tự do nhau cùng làm nắm nào để cả 3 có thể bên nhau tạo thành những hiệu ứng 3D ưa nhìn (xuất xắc bao gồm cả cùng với các hình họa 2D bởi vì nó chỉ với dạng 3D cùng với độ sâu Z=0, chúng ta đã nói vụ việc này sau).

Primitives

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

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

Một điểm 3D có thể coi nlỗi một phân tử trong không khí.Một mặt đường thẳng luôn luôn rất có thể coi nlỗi một vector.Một tam giác rất có thể xem như là một mặt trong một chiếc lưới với hàng trăm ngàn, triệu tam giác phối hợp lại.

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

Buffers

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

Frame BufferRender BufferBuffer Object

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

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

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

Buffer Object là 1 trong những vùng nhớ mà OpenGL Gọi là "server side" (hoặc không khí hệ trọng lưu lại trữ). Buffer Object cũng là 1 trong những vùng ghi nhớ tạm thời, tuy vậy có vẻ như lâu dài ra hơn các loại trước. Một Buffer Object rất có thể lưu trữ trong veo quá trình sử dụng vận dụng. Buffer Object có thể giữ lại các lên tiếng về đối tượng 3D dưới dạng đã làm được buổi tối ưu. Những thông báo này hoàn toàn có thể có 2 loại: Structure cùng Indice.

Xem thêm: Triển Khai Bcm Là Gì ? Hộp Điều Khiển Bcm Body Control Module 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 các đỉnh, mảng những tọa độ texture hoặc một mảng của rất nhiều gì bạn muốn. Indice thì rõ ràng hơn, mảng này được dùng để khẳng định gồm bao nhiêu tam giác vào lưới sẽ được tạo ra dựa vào mảng structure.

Quý Khách vẫn cạnh tranh hiểu ư? Hãy xem ví dụ dưới đây:

Tưởng tượng một khối 3D. Kân hận này còn có 6 mặt được xuất hiện bởi 8 đỉnh?

*

Mỗi khía cạnh là một hình vuông vắn, cơ mà các bạn bao gồm hãy nhờ rằng OpenGL chỉ biết về các tam giác đúng không? Vì vậy họ phải chuyển mọi hình vuông vắn kia thành những tam giác để gia công vấn đề cùng với OpenGL. bởi thế họ bao gồm 12 tam giác vớ cả!Hình ảnh nghỉ ngơi bên trên được tạo ra vì phần mềm Mobởi vì, hãy xem góc bên dưới bên yêu cầu. Chúng là hầu như báo cáo về vật thể của bọn họ. Quý Khách hoàn toàn có thể thấy gồm 8 đỉnh và 12 khía cạnh (GL: 12).

Các tam giác trong OpenGL là việc phối kết hợp của những đỉnh 3 chiều. Vì vậy nhằm tạo ra mặt phẳng của chiếc hộp, chúng ta phải OpenGL tạo ra theo cách nhỏng này: đỉnh 1, đỉnh 2, đỉnh 3, đỉnh 1, đỉnh 3, đỉnh 4.

Hay nói cách khác, họ yêu cầu lặp lại 2 đỉnh tại 1 khía cạnh của hình vuông vắn. Nếu thay hình vỏ hộp bằng một hình có 12 phương diện thì từng đỉnh bắt buộc lặp 4 lần, nếu như cầm cố bằng một hình 16 khía cạnh, chúng ta nên 6 lần lặp lại. Và cứ đọng cố kỉnh, câu hỏi tăng số lặp của các đỉnh lên lập cập.

Vì vậy OpenGL có thể chấp nhận được bọn họ một cách làm cho đơn giản dễ dàng hơn: sử dụng một mảng những Indice. Tại ví dụ trên, chúng ta có thể tất cả một mảng 8 đỉnh: đỉnh 1, đỉnh 2, đỉnh 3, đỉnh 4,... và cầm bởi vì viết lại đa số lên tiếng cho từng phương diện, bọn họ tạo nên 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ử trong mảng 0,1,2-0,2,3-2,6,3 màn biểu diễn một phương diện tam giác. Với đặc thù này, chúng ta cũng có thể viết lên tiếng những đỉnh 1 lần và tái sử dụng nhiều lần trong mảng những indicate.

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

Lợi ích của Buffer Object là chúng được về tối ưu để triển khai câu hỏi trực tiếp với GPU với bạn ko phải duy trì mảng đó trong ứng dụng của chúng ta sau khoản thời gian chế tác một Buffer Object.

Rasterize

Rasterform size là quy trình xử lý vì OpenGL thừa nhận toàn bộ thông báo về đối tượng người dùng 3 chiều (bao hàm đỉnh, tọa độ, tính toán thù...) nhằm tạo thành một hình ảnh 2 chiều. Ảnh này có khả năng sẽ bị một vài biến đổi và sau đó hiển thị trên màn hình của sản phẩm công nghệ.

Nhưng sống bước ở đầu cuối này, Việc liên kết giữa biết tin các pixel cùng sản phẩm màn hình hiển thị thuộc về các nhà tiếp tế sản phẩm. Nhóm Khronos cung ứng API khác Hotline là EGL, tuy thế phía trên chỉ cần api của các bên cung cấp. Chúng ta, các developer sẽ không còn làm việc trực tiếp cùng với Khronos EGL, nhưng cùng với phiên phiên bản đã có được biến hóa của những bên hỗ trợ.

Vì vậy khi chúng ta tạo một OpenGL render, bạn có thể chọn quy trình render trực tiếp lên màn hình, thực hiện EGL, hoặc render cho tới những Frame Buffer. Việc render tới các Frame Buffer, bạn vẫn nghỉ ngơi trong OpenGL API, mà lại nội dụng đã không được hiển thị bên trên màn hình hiển thị. Việc hiển thị lên màn hình nằm không tính phạm vi của OpenGL API, nó là của EGL API. Vì vậy tại thời khắc render, bạn có thể chọn 1 trong 2 các loại nhằm xuất ra.

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

OpenGL pipelines

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

Thử cùng tò mò Shader là gì rò rỉ.

Shader giống hệt như một đoạn code, giao diện như một lịch trình nhỏ tuổi, thao tác làm việc thẳng vào GPU nhằm triển khai những phnghiền tính tinh vi. Nếu biểu đạt một bí quyết phức hợp thì như thế này: Màu sắc cuối cùng của mặt phẳng đồ thể, chiếc mà lại tất cả một texture là T, bị biến hóa Lúc đâm vào một trong những thứ tất cả texture là TB, sử dụng màu SC với phản bội chiếu nấc SL, bên dưới ánh nắng L với độ mạnh LPhường. theo góc LA tự khoảng cách Z cùng với độ rọi F và tất cả đang chú ý vày mắt của Camera C trên địa điểm P.. với ống kính T.

Những điều này có nghĩa nó cực kỳ phức tạp để xử trí bên trên CPU với vô số sản phẩm công nghệ phải làm đẩy cho thư viện cách xử trí hình ảnh. Vì vậy programmable pipeline chỉ là biện pháp bọn họ quản lý phần nhiều lắp thêm đó thế nào.

Còn fixed pipeline ngược với programmable pipeline! Fixed pipeline là thư viện đồ họa cách xử trí về toàn bộ các loại cùng mang lại bọn họ api để thiết đặt Camera, Material, tia nắng, cảm giác.

Để chế tạo Shader bọn họ sử dụng ngôn từ giống như như C, sẽ là OpenGL Shader Language (GLSL). OpenGL ES sử dụng với một chút số lượng giới hạn được điện thoại tư vấn là OpenGL ES Shader Language (GLSL ES hoặc ESSL). Sự khác nhau là chúng ta có thêm một số trong những hàm với hoàn toàn có thể viết thêm các vươn lên là trong GLSL hơn với GLSL ES, nhưng cú pháp là như thể nhau.

Điểm một chút về bề ngoài thao tác làm việc của các Shader này:

Bạn chế tạo ra chúng trong những file đơn lẻ hoặc viết thẳng vào code của công ty, miễn làm thế nào ngôn từ ở đầu cuối đựng Shader Language sẽ được gửi đến OpenGL với biên dịch Shader cho mình (các bạn thậm chí còn rất có thể sử dụng tiền-biên-dịch dưới dạng mã nhị phân, tuy nhiên không thuộc trong văn bản nội dung bài viết này).

Shader thao tác theo cặp: Vertex Shader cùng Fragment Shader. Chủ đề này buộc phải khôn xiết quan trọng đặc biệt, hãy xem cụ thể Vertex với Fragment ra sao. Để hiểu hầu như gì từng một số loại shader làm cho, hãy trở lại ví dụ hình hộp ở trên.

Vertex Shader

Vertex Shader cũng được nghe biết như là VS hoặc VSH là một trong chương trình nhỏ tuổi sẽ được triển khai nghỉ ngơi mỗi đỉnh của mesh (mỗi trang bị thể được tạo nên bằng một lưới những 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 ảnh chỉ gồm 5 đỉnh đang được chỉ ra thôi), các bạn sẽ đọc ngay lập tức dưới đây thôi. Vậy nên VSH sẽ tiến hành xử trí 8 lần vì chưng CPU.

Những gì Vertex Shader sẽ làm là xác xác định trí sau cùng của đỉnh. Bạn có nhớ rằng Programmable pipeline có thể chấp nhận được họ điều khiển camera? đó là tại chỗ này, địa chỉ với độ mngơi nghỉ của ống kính camera rất có thể biến hóa địa chỉ cuối cùng của những đỉnh. Vertex Shader cũng có trách nát nhiệm chuẩn bị cùng xuất ra vài variable (giá trị, biến) đến Fragment Shader. Trong OpenGL bọn họ tư tưởng những biến chuyển sống Vertex Shader, dẫu vậy chưa hẳn mang lại Fragment Shader thẳng. Vì vậy, Vertex Shader bắt buộc gửi những trở thành cho tới Fragment Shader.

Nhưng vì sao chúng ta bắt buộc thẳng truy cập tới Fragment Shader?

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

Fragment Shader

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

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

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

Bên vào Fragment Shader, bọn họ sẽ thao tác làm việc với tất cả lắp thêm tương quan cho tới mặt phẳng của đồ thể, nhỏng gia công bằng chất liệu, cảm giác bội phản chiếu, đổ nhẵn, ánh sáng, tương bội nghịch, khúc xạ, tổ chức cùng ngẫu nhiên những hiệu ứng không giống cơ mà bạn có nhu cầu. Sản phđộ ẩm sau cuối là màu sắc của những px bên dưới định hình RGBA.

Giờ thứ sau cuối nhưng các bạn cần biết sẽ là về VSH và FSH thao tác làm việc với nhau ra sao. Đó là sẽ phải có một Vertex Shader và chỉ còn 1 Fragment Shader, không hơn không thua kém, nên và đúng là đối kháng. Để đảm bảo bọn họ không phạm lỗi, OpenGL 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ới 1 FSH nhưng thôi.

Tổng kết

Đây là tất cả về có mang OpenGL. Hãy lưu giữ hầu hết điểm này:

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

Hãy xem cả 3 bài bác, OpenGL giống như vô cùng dễ dàng và đơn giản với dễ hiểu. Đúng! nó đơn giản dễ dàng để đọc tuy vậy nhằm học tập thì....haizzz3 điểm sinh sống trên liệt kê ra những nhánh của OpenGL và để học toàn bộ bọn chúng chúng ta có lẽ đề xuất vài mon hoặc hơn.

Những gì tôi cố gắng nói ở hai phần tiếp theo của loạt bài này chính là toàn bộ đầy đủ gì tôi sẽ học tập được trong 6 tháng cực kì tập trung, đi sâu vào OpenGL. Trong phần tiếp theo sau tôi sẽ cho mình coi những hàm cơ bản và cấu tạo của một ứng dụng 3 chiều áp dụng OpenGL. Độc lập cùng với ngữ điệu xây dựng mà ai đ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 quý phái phần tiếp sau, tôi mong nói cùng với bạn thêm 1 sản phẩm nữa:

OpenGL Error API

OpenGL là một trong những thiết bị tâm lý tuyệt đối thao tác làm việc hệt như một bắt buộc trục làm việc cảng TP.. Hải Phòng và chúng ta không cần thiết phải trực tiếp thực hiện các gì xẩy ra bên phía trong. Vậy giả dụ tất cả lỗi xảy ra thì sao? không tồn tại gì xảy ra cùng với ứng dụng vì OpenGL hoàn toàn là sinh hoạt bên ngoài.

Nhưng làm cho ráng như thế nào để tìm hiểu lúc shader của chúng ta bao gồm lỗi? Làm ráng làm sao để biết trường hợp quán trình render vào những buffer ko hoạt động đúng như mong mỏi muốn?

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

Nói thông thường bọn họ đặt vài điểm kiểm tra sinh sống số đông chỗ rất có thể xẩy ra lỗi, gioogns nhỏng câu hỏi biên dịch Shader hoặc cấu hình Buffer nhằm tránh các lỗi cơ phiên bản.

Phần tiếp theo

Tại phần tiếp theo, Chúng ta hãy xem cụ thể bên trong đoạn code thực tiễn, bạn sẽ đươc code không ít.

Bài viết liên quan

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *