OPENGL LÀ GÌ

  -  

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

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

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

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

Nếu bạn thích xem code luôn luôn thì hãy 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, 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 mang đến "Open Graphics Library" và nó được dùng không hề ít trong ngữ điệu laptop. OpenGL là nơi gần nhất giữa CPU (dòng mà bọn họ - gần như developer - chạy các ứng dụng trên các ngôn ngữ lập trình) và GPU (chip cách xử trí đồ vật họa). Vì vậy OpenGL rất cần phải được cung cấp vày những đơn vị cung ứng card giao diện (vd: NVidia) và được thiết lập bởi phần lớn công ty đối tác cải tiến và phát triển hệ quản lý điều hành (y hệt như Apple tuyệt Microsoft) với cuối cùng OpenGL cho chúng ta một API thống duy nhất để triển khai bài toán. API này là những "Ngôn ngữ miễn phí" (hoặc hầu hết miễn phí). Việc này vượt thuận tiện do nếu như khách hàng áp dụng C hoặc C++ tuyệt thậm chí còn là Objective-C, Perl, C# hay Javascript hay ngẫu nhiên ngôn từ làm sao bạn muốn, API của OpenGL luôn luôn giống nhau, xử lý tương đương nhau, tầm thường tác dụng, cái lệnh cùng là khu vực nhưng mà loạt bài xích hướng dẫn này bắt đầu!

Trước khi nói đến OpenGL API họ rất cần phải bao gồm kiến thức về 3D. Lịch sử của 3 chiều trong ngôn từ máy tính được gói trong lịch sử của OpenGL. Vì vậy hãy cùng tìm hiểu sang một chút về lịch sử vẻ vang của nó.

Một mẩu chuyện nhỏ

*

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

Ghê chưa, sản phẩm sẽ là tlỗi viện bối cảnh trước tiên. Nhưng nó bị tiêu diệt quá nhanh khô vày để làm được như vậy, anh ta đề nghị tinh chỉnh và điều khiển quá nhiều sản phẩm công nghệ vào máy tính xách tay nlỗi card bối cảnh, khối hệ thống windows, các ngôn ngữ xây dựng cùng giao diện địa chỉ với người tiêu dùng cuối. Quá các sản phẩm công nghệ thậm chí còn để cho 1 công ty quản lý, chưa kể tới 1 tín đồ. Vì vậy SGI ban đầu chuyển qua một thứ hệt như "thẻ tạo ra đồ vật họa", "khối hệ thống cai quản cửa ngõ sổ", "sản xuất giao diện bạn dùng" cho những công ty khác với triệu tập vào phần quan trọng tốt nhất của thỏng viện bối cảnh. Năm 1992 đang Thành lập OpenGL cầm hệ trước tiên.

Vào năm 1995 Microsoft giới thiệu Direct3 chiều, đối phương 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 tới tận năm 2004, OpenGL bắt đầu rất có thể đắm đuối được tôi, OpenGL 2.0 cùng với hầu như chức năng tuyệt đối. Tôi thực thụ thích Shaders, lập trình sẵn pipeline (programmable pipeline).

Cuối cùng vào 2007 OpenGL ES 2.0 đã với sức khỏe 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 hình ảnh của OpenGL (hoặc OpenGL ES) vào tương đối nhiều trò chơi, áp dụng 3D, 2 chiều với khôn cùng nhiều phần mềm không giống (đặc biệt là ứng dụng 3D). OpenGL ES được sử dụng vì chưng PlayStation, Android, Nintenbởi 3DS, Notê, Samsung, Symbian cùng tất yếu cả Apple cùng với MacOS và iOS.

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

Vâng, chúng ta đã nhắc đến hệ điều hành Windows.

Bạn tất cả ghi nhớ tôi sẽ bảo rằng bạn dạng đầu tiên của OpenGL là 1992? cùng thời điểm đó, Microsoft vẫn gồm Windows 3. Nlỗi Microsoft luôn luôn tin tưởng rằng "ko gì được tạo ra, hầu như vật dụng được copy", Microsot vẫn bao gồm thay copy OpenGL Một trong những gì họ Call là DirectX và được giới thiệu lần đầu năm mới 1995 vào Windows 95 khớp ứng.

Một năm sau, 1996, Microsoft ra mắt Direct3 chiều, một phiên phiên bản copy của OpenGL. Điểm đáng kể là Microsoft đã sở hữu ưu gắng 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 vào các máy tính PCs và Khi Microsoft bắt đầu gửi sang trọng Thị Trường cầm tay với Video Game, DirectX cũng lấn Sảnh sang trọng.

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

Giờ là cơ hội bạn cũng có thể bắt đầu mày mò thế giới lập trình sẵn 3 chiều được rồi!

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

Từ thời gian tôi lớn lên, tôi sẽ tê mê công nghệ 3D cùng những trò chơi trò chơi 3 chiều. Tất cả các nhân vật trong các số đó, nhỏ fan, biết về mô phỏng quả đât thực trong số hiệu ứng 3D đến từ một địa điểm duy nhất: con mắt.

Con đôi mắt là cơ phiên bản trong quả đât 3D. Tất cả hầu như điều chúng ta làm là mô phỏng nó, làm sao thật đẹp mắt, thiệt lôi cuốn y hệt như phần đa gì đôi mắt bé tín đồ hoàn toàn có thể thấy. Những có mang liên quan cho tới đôi mắt nhỏng góc nhìn, khoảng nhìn, ống kính, thấu kính, các nhiều loại sự trang bị là sẽ tiến hành nói đến thỉnh thoảng chúng ta có tác dụng quen cùng với 3D.

Mọi máy bọn họ có tác dụng là cố gắng tái chế tạo ra trường đoản cú đôi mắt fan đông đảo thứ: góc nhìn, điểm mù, biến dạng, độ sâu hình họa, tiêu cự, ánh mắt...

Không gian 3 chiều

Nghe có vẻ ngu dẫu vậy đích thực nên nói rằng: thế giới 3 chiều là 3 chiều bởi vì nó gồm 3D. Tôi nói đặc điểm này vày nó cực kỳ quan trọng để nói thêm rằng nó nhiều hơn 2D một chiều với tinh vi rộng khôn cùng không hề ít đối với 2 chiều.

Hãy xem, vào trái đất 2 chiều lúc bọn họ đề nghị quay một hình vuông vắn khôn xiết solo giản: 45 độ luôn là 45 độ. Nhưng với 3 chiều, nhằm quay một hình vuông vắn đề nghị 3 trục X, Y, Z. Phú ở trong trên sản phẩm công nghệ từ bỏ của góc quay, kết quả sau cuối hoàn toàn có thể hết sức không giống nhau. Những lắp thêm bình thường sẽ trsống lên linh tinc Lúc họ thử tảo cùng với những trục khác nhau. Ví dụ: xoay x=25, y=trăng tròn là 1 trong kiểu, x=10, y=trăng tròn và tiếp đến x=10 lại tạo ra một tác dụng bắt đầu.

do đó có thể nói Lúc thêm 1 chiều không giống làm cho các bước của chúng ta tinh vi lên vội vàng nhiều lần.

Không nên 3 chiều cơ mà đề nghị là 4D

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

Chính xác, điểm ở đầu cuối tôi mong muốn nhắc tới đó là vấn đề này. Chúng ta không chỉ làm việc vào nhân loại 3D, họ còn tồn tại chiều máy 4: thời gian. Những sự đồ vật vào thế giới 3D buộc phải liên can lẫn nhau, rất cần được di chuyển, va chạm, biến đổi. Và như tôi đang nhắc đến ở trên, câu hỏi thay đổi kia vào thế giới 3 chiều tạo thành các kết quả khác biệt.

Vậy mang đến lúc này bọn họ đang tư tưởng được 3D là: "Việc tế bào rộp mắt của con fan với tế bào bỏng sự vận động của các sự vật".

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

Bây tiếng mới là lúc nói về mẫu thú vị của bài bác blog này: Hãy nói tới OpenGL. Trước hết chúng ta đề nghị cảm ơn những nhà tân oán học tập như Ơ-le, Hamilton, Pythago cùng không hề ít công ty công nghệ không giống. Nhờ gồm bọn họ cơ mà thời buổi này chúng ta bao gồm rất nhiều công thức và điều khoản để gia công câu hỏi cùng với không gian 3 chiều. OpenGL sẽ thực hiện toàn bộ 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 trăm ngàn, thậm chí còn hàng ngàn phnghiền tính toán thù bên trên một giây thực hiện các công thức toán học để mô phỏng lại vẻ đẹp cơ mà mắt người bắt gặp.

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

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

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

*

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

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

Logic của OpenGL

OpenGL là thư viện đồ họa hơi nđính gọn gàng cùng logic. Những gì các bạn thấy trong những phần mềm xử lý 3 chiều chuyên nghiệp là cực kỳ phức tạp hoạt động bên trên OpenGL. Vì Logic của OpenGL bao gồm thứ sau:

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

OpenGL hoạt động luân phiên quanh 3 tư tưởng này. Mỗi khái niệm sinh hoạt trên chủ quyền nhau và làm cho vắt nào để cả 3 hoàn toàn có thể cùng mọi người trong nhà tạo ra các cảm giác 3D bắt mắt (hay bao gồm cả với các hình ảnh 2D vị nó chỉ là dạng 3D cùng với độ sâu Z=0, chúng ta vẫn nói sự việc này sau).

Primitives

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

Các điểm trong hệ không khí 3 chiều (x, y và z)Các con đường trực tiếp trong không khí (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 3 chiều rất có thể coi như một phân tử trong không khí.Một mặt đường thẳng luôn luôn hoàn toàn có thể coi nlỗi một vector.Một tam giác rất có thể xem là một mặt trong 1 loại lưới cùng với hàng nghìn, triệu tam giác phối hợp lại.

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

Buffers

Nói một biện pháp dễ dàng và đơn giản, buffer là 1 trong vùng tàng trữ trong thời điểm tạm thời hỗ trợ cho bài toán 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ới khó khăn gọi duy nhất trong cả 3 nhiều loại. lúc bạn chế tạo ra một chình họa, chúng ta cũng có thể gửi hình họa trực tiếp cho tới screen của đồ vật hoặc tới Frame Buffer. Về cơ phiên bản Frame Buffer là một trong vùng để lưu tài liệu hình ảnh lâm thời. Cụ thể rộng, bạn có thể tưởng tượng nó như một Áp sạc ra trường đoản cú cỗ render của OpenGL và bao gồm rất nhiều hình họa, chưa phải chỉ bao gồm một. Những hình ảnh đó là gì? Đó là đa số hình ảnh về những đối tượng 3D, về độ gần/xa của những đối tượng người tiêu dùng vào không khí, các vùng giao nhau của những đối tượng người tiêu dùng cùng về các phần được hiện ra. Vì vậy Frame Buffer giống như một tập gồm nhiều hình ảnh. Tất cả mọi được lưu trữ bên dưới dạng thông báo mảng những quý giá px.

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

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

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

Xem thêm: Nhật Bản Trong Chiến Tranh Thế Giới Thứ 2 ? Nhật Bản Trong Chiến Tranh Thế Giới Thứ 2

Structure là mảng thể hiện những đối tượng người sử 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 các gì bạn muốn. Indice thì cụ thể rộng, mảng này được dùng làm xác minh bao gồm bao nhiêu tam giác trong lưới sẽ được tạo ra dựa vào mảng structure.

quý khách vẫn cạnh tranh phát âm ư? Hãy coi ví dụ bên dưới đây:

Tưởng tượng một kăn năn 3D. Khối này có 6 khía cạnh được ra đời bởi 8 đỉnh?

*

Mỗi phương diện là một trong những hình vuông vắn, nhưng lại bạn có nhớ rằng OpenGL chỉ biết về các tam giác đúng không? Vì vậy họ đề nghị chuyển mọi hình vuông vắn kia thành các tam giác để làm việc với OpenGL. do vậy chúng ta gồm 12 tam giác vớ cả!Ảnh sinh sống trên được tạo ra vì ứng dụng Mobởi, hãy xem góc bên dưới bên buộc phải. Chúng là các thông tin về đồ dùng thể của chúng ta. Bạn có thể thấy bao gồm 8 đỉnh với 12 khía cạnh (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 ra bề mặt của chiếc hộp, chúng ta buộc phải OpenGL sinh sản theo cách như này: đỉnh 1, đỉnh 2, đỉnh 3, đỉnh 1, đỉnh 3, đỉnh 4.

Hay có thể nói rằng, bọn họ nên lặp lại 2 đỉnh tại một mặt của hình vuông vắn. Nếu nỗ lực hình hộp bởi một hình bao gồm 12 mặt thì mỗi đỉnh phải lặp 4 lần, trường hợp chũm bởi một hình 16 khía cạnh, bọn họ cần 6 lần tái diễn. Và cđọng cầm cố, Việc tăng số lặp của các đỉnh lên mau lẹ.

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

Giờ trở về cùng với Buffer Object, nhiều loại đầu tiên là một mảng các structure, như đỉnh 1, đỉnh 2, đỉnh 3, đỉnh 4,... với 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à bọn chúng được buổi tối ưu để gia công câu hỏi trực tiếp cùng với GPU cùng các bạn không đề xuất giữ mảng kia vào vận dụng của khách hàng sau khi chế tác một Buffer Object.

Rasterize

Rasterkích thước là quá trình xử lý vị OpenGL dấn toàn bộ biết tin về đối tượng người sử dụng 3D (bao hàm đỉnh, tọa độ, tính tân oán...) để tạo nên một ảnh 2D. Ảnh này sẽ bị một vài biến đổi và tiếp nối hiện trên screen của vật dụng.

Nhưng ngơi nghỉ bước sau cùng này, bài toán kết nối giữa đọc tin những px cùng trang bị màn hình nằm trong về các nhà cung cấp máy. Nhóm Khronos hỗ trợ API không giống Hotline là EGL, cơ mà phía trên chỉ nên api của những đơn vị chế tạo. Chúng ta, các developer sẽ không thao tác thẳng cùng với Khronos EGL, mà với phiên phiên bản đã được biến đổi của những bên cung ứng.

Vì vậy khi bạn chế tác một OpenGL render, chúng ta cũng có thể chọn quá trình render thẳng lên màn hình hiển thị, áp dụng EGL, hoặc render cho tới những Frame Buffer. Việc render tới các Frame Buffer, các bạn vẫn sinh sống vào OpenGL API, nhưng lại nội dụng vẫn chưa được hiện ra bên trên màn hình hiển thị. Việc hiển thị lên màn hình ở kế bên phạm vi của OpenGL API, nó là của EGL API. Vì vậy tại thời khắc render, chúng ta có thể lựa chọn 1 vào 2 các loại để xuất ra.

Nhưng chớ thử ngay, vày như tôi đang nói, từng bên cấp dưỡng chế tạo riêng rẽ cho họ các EGL API riêng biệt. lấy ví dụ Apple không chất nhận được chúng ta render thẳng tới màn hình thứ, chúng ta luôn luôn nên render tới Frame Buffer và tiếp nối sử dụng EGL (do Appple) nhằm hiện tại câu chữ lên màn hình.

OpenGL pipelines

Như tôi đã nói đến "Programmable pipeline" cùng "fixed pipeline", Programmable pipeline là thư viện bối cảnh có thể chấp nhận được chúng ta có tác dụng phần lớn vật dụng tương quan cho tới Camera, Ánh sáng sủa, Chất liệu và cảm giác. Và chúng ta cũng 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 suy nghĩ về Shader!

Thử thuộc mày mò Shader là gì rò rỉ.

Shader y như một quãng code, vẻ bên ngoài như một chương trình nhỏ tuổi, thao tác thẳng trong GPU để thực hiện những phép tính phức hợ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 ở đầu cuối của bề mặt thiết bị thể, dòng nhưng mà có một texture là T, bị biến hóa Khi đâm vào trong 1 vật dụng có texture là TB, thực hiện màu SC với phản bội chiếu nấc SL, bên dưới tia nắng L với độ mạnh LP theo góc LA từ khoảng cách Z với độ rọi F và toàn bộ đã chú ý vị đôi mắt của Camera C tại địa chỉ Phường. cùng với ống kính T.

Những điều này còn có nghĩa nó cực kỳ phức tạp để xử lý trên CPU với quá nhiều vật dụng nên làm đẩy mang lại thỏng viện giải pháp xử lý hình ảnh. Vì vậy programmable pipeline chỉ là phương pháp chúng ta quản lý đầy đủ thứ kia thế nào.

Còn fixed pipeline ngược cùng với programmable pipeline! Fixed pipeline là tlỗi viện hình ảnh xử lý về toàn bộ các các loại cùng mang lại bọn họ api để setup Camera, Material, ánh sáng, cảm giác.

Để chế tạo ra Shader họ dùng ngôn ngữ tương tự nlỗi C, sẽ là OpenGL Shader Language (GLSL). OpenGL ES sử dụng cùng với một chú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ác biệt là bạn có thêm một số hàm cùng rất có thể viết thêm các biến trong GLSL hơn với GLSL ES, cơ mà cú pháp là kiểu như nhau.

Điểm một chút ít về cách thức làm việc của các Shader này:

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

Shader làm việc theo cặp: Vertex Shader với Fragment Shader. Chủ đề này cần rất quan trọng đặc biệt, hãy coi chi tiết Vertex cùng Fragment ra làm sao. Để hiểu gần như gì mỗi loại shader làm cho, hãy trở về ví dụ hình vỏ hộp nghỉ ngơi trên.

Vertex Shader

Vertex Shader cũng khá được nghe biết như là VS hoặc VSH là một chương trình nhỏ sẽ được tiến hành ngơi nghỉ từng đỉnh của mesh (mỗi vật dụng thể được tạo cho bởi một lưới những tọa độ, điện thoại tư vấn là mesh). Hãy xem hình hộp sinh sống trên, hộp này còn có 8 đỉnh (giờ trong ảnh chỉ tất cả 5 đỉnh đang được hiển thị thôi), các bạn sẽ phát âm ngay lập tức dưới đây thôi. bởi thế VSH sẽ tiến hành giải pháp xử lý 8 lần bởi CPU.

Những gì Vertex Shader đã có tác dụng là xác định vị trí sau cuối của đỉnh. quý khách bao gồm đừng quên Programmable pipeline có thể chấp nhận được họ tinh chỉnh và điều khiển camera? chính là tại chỗ này, địa điểm cùng độ msống của ống kính camera hoàn toàn có thể biến đổi địa chỉ sau cuối của các đỉnh. Vertex Shader cũng có thể có trách nhiệm chuẩn bị cùng xuất ra vài ba variable (cực hiếm, biến) đến Fragment Shader. Trong OpenGL chúng ta tư tưởng các thay đổi nghỉ ngơi Vertex Shader, tuy thế chưa hẳn mang đến Fragment Shader thẳng. Vì vậy, Vertex Shader buộc phải gửi những biến chuyển cho tới Fragment Shader.

Nhưng vì sao bọn họ quan trọng trực tiếp truy cập cho tới Fragment Shader?

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

Fragment Shader

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

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

Đây là những gì Fragment Shader thực hiện! FSH sẽ tiến hành cách xử trí ở mỗi mặt được hiện của hình ảnh sau cuối (được hiện nay bên trên màn hình). Tại đây chúng ta cũng có thể hiểu một fragment nlỗi là một trong px. Nhưng nói bình thường không hẳn chính xác như px, do thân OpenGL render và bài toán chỉ ra hình ảnh ở đầu cuối trên màn hình hiển thị máy sẽ bị giãn ra theo cả 2 chiều (ví dụ camera thu lại theo tỉ trọng 4:3 mà screen là tỉ trọng 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ố px thực tiễn, nhờ vào trên máy và cấu hình bài toán render. Trong hình lập phương thơm ở bên trên, Fragment Shader sẽ tiến hành cách xử trí sinh sống từng pixel của bố mặt sẽ tồn tại từ bỏ 7 đỉnh đó.

Bên vào Fragment Shader, bọn họ vẫn làm việc với mọi thiết bị liên quan tới mặt phẳng của đồ vật thể, nlỗi chất liệu, cảm giác làm phản chiếu, đổ láng, tia nắng, tương phản nghịch, khúc xạ, tổ chức với bất kỳ những cảm giác không giống mà lại bạn có nhu cầu. Sản phẩm ở đầu cuối là màu sắc của các pixel dưới format RGBA.

Giờ lắp thêm sau cùng nhưng chúng ta cần biết đó là về VSH cùng FSH thao tác làm việc với nhau như thế nào. Đó là bắt buộc phải có 1 Vertex Shader và chỉ 1 Fragment Shader, không hơn không thua kém, bắt buộc chính xác là đơn. Để bảo vệ chúng ta không phạm lỗi, OpenGL có một trang bị Call là Program. Một program vào OpenGL chỉ được biên dịch theo cặp 1 VSH và 1 FSH mà thôi.

Tổng kết

Đây là toàn bộ về khái niệm OpenGL. Hãy ghi nhớ gần như điểm này:

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

Hãy xem cả 3 bài xích, OpenGL hình như rất đơn giản cùng dễ dàng nắm bắt. Đúng! nó đơn giản và dễ dàng để đọc cơ mà nhằm học thì....haizzz3 điểm sinh hoạt trên liệt kê ra các nhánh của OpenGL và để học tất cả chúng bạn có lẽ rằng đề xuất vài ba mon hoặc hơn.

Những gì tôi nỗ lực kể ở cả hai phần tiếp sau của loạt bài bác này chính là toàn bộ đông đảo 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 theo sau tôi đã cho bạn coi các hàm cơ bạn dạng và cấu tạo của một vận dụng 3 chiều sử dụng OpenGL. Độc lập cùng với ngôn từ lập trình cơ mà nhiều người đang sử dụng hoặc cùng với sản phẩm ai đang áp dụng.

Nhưng trước khi sang phần tiếp theo, tôi muốn 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 sản phẩm tâm trạng tuyệt đối làm việc y hệt như một bắt buộc trục sinh hoạt cảng TP Hải Phòng với bạn không nhất thiết phải trực tiếp thực hiện hồ hết gì xảy ra bên phía trong. Vậy ví như bao gồm lỗi xảy ra thì sao? không tồn tại gì xẩy ra cùng với áp dụng vày OpenGL hoàn toàn là sống phía bên ngoài.

Nhưng làm nạm làm sao để biết Khi shader của người tiêu dùng bao gồm lỗi? Làm thế nào để tìm hiểu nếu tiệm trình render vào những buffer ko chuyển động đúng như mong mỏi muốn?

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

Nói phổ biến chúng ta đặt vài ba điểm soát sổ sinh sống rất nhiều địa điểm rất có thể xẩy ra lỗi, gioogns như câu hỏi biên dịch Shader hoặc thông số kỹ thuật Buffer để tách những lỗi cơ bạn dạng.

Xem thêm: Mua Ròng Là Gì? Bán Ròng Là Gì Bán Ròng Là Gì

Phần tiếp theo

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