This page provides liên kết to both general release drivers that support Open
GL 4.6, and developer beta drivers that tư vấn upcoming Open
GL features.
Bạn đang xem: Opengl
Release Driver Downloads
Open
GL 4.6 tư vấn is available for Windows and Linux in our general release drivers available here:
Windows
Linux
Developer Beta Driver Downloads
Windows driver version 426.02 & Linux driver version 418.52.18 provide new features for Open
GL developers to chạy thử their upcoming Open
GL applications.
Windows 426.02
Linux 418.52.18
Open
GL Beta Release Notes
NVIDIA provides full Open
GL 4.6 tư vấn and functionality on NVIDIA Ge
Force & Quadro graphics card with one of the following Turing, Volta, Pascal, Maxwell (first or second generation) or Kepler based GPUs:
Turing GPU Architecture
TITAN: NVIDIA TITAN RTX GeForce RTX: Ge
Force RTX 2080 Ti, Ge
Force RTX 2080, Ge
Force RTX 2070, Ge
Force RTX 2060 Ge
Force GTX: Ge
Force GTX 1660 Ti, Ge
Force GTX 1660, Ge
Force GTX 1650, Ge
Force MX250, Ge
Force MX230 Quadro: Quadro RTX 8000, Quadro RTX 6000, Quadro RTX 5000, Quadro RTX 4000, Quadro RTX 3000, Quadro T2000, Quadro T1000
Volta GPU Architecture
TITAN: NVIDIA TITAN V Quadro: Quadro GV100Pascal GPU Architecture
TITAN: NVIDIA TITAN Xp, NVIDIA TITAN X (Pascal) GeForce: Ge
Force GTX 1080 Ti, Ge
Force GTX 1080, Ge
Force GTX 1070 Ti, Ge
Force GTX 1070, Ge
Force GTX 1060, Ge
Force GTX 1050 Ti, Ge
Force GTX 1050, Ge
Force GT 1030, Ge
Force MX150, Quadro: Quadro GP100, Quadro P6000, Quadro P5200, Quadro P5000, Quadro P4200, Quadro P4000, Quadro P3200, Quadro P3000, Quadro P2200, Quadro P2000, Quadro P1000, Quadro P620, Quadro P600, Quadro P520, Quadro P500, Quadro P400
Maxwell 2 GPU Architecture
TITAN: GeForce GTX TITAN X Ge
Force: Ge
Force GTX 980 Ti, Ge
Force GTX 980, Ge
Force GTX 980M, Ge
Force GTX 970, Ge
Force GTX 970M, Ge
Force GTX 965M, Ge
Force GTX 960, Ge
Force GTX 950, Quadro: Quadro M6000 24GB, Quadro M6000, Quadro M5500, Quadro M5000, Quadro M5000M, Quadro M4000, Quadro M4000M, Quadro M3000M, Quadro M2200, Quadro M2000
Maxwell 1 GPU Architecture
GeForce: Ge
Force GTX 960M, Ge
Force GTX 950M, Ge
Force 945M, Ge
Force 940MX, Ge
Force 930MX, Ge
Force 920MX, Ge
Force 940M, Ge
Force 930M, Ge
Force GTX 860M, Ge
Force GTX 850M, Ge
Force 845M, Ge
Force 840M, Ge
Force 830M, Ge
Force GTX 750 Ti, Ge
Force GTX 750, Ge
Force GTX 745, Ge
Force MX130 Quadro: Quadro M2000M, Quadro M1000M, Quadro M600M, Quadro M500M, Quadro M1200, Quadro M620, Quadro M520, Quadro K2200M, Quadro K620M
Kepler GPU Architecture
TITAN: GeForce GTX TITAN, Ge
Force GTX TITAN Black, Ge
Force GTX TITAN Z Ge
Force: GTX 780 Ti, Ge
Force GTX 780, Ge
Force GTX 770, Ge
Force GTX 760, Ge
Force GTX 760 Ti (OEM), Ge
Force GT 740, Ge
Force GT 730, Ge
Force GT 720, Ge
Force GT 710, Ge
Force GTX 690, Ge
Force GTX 680, Ge
Force GTX 670, Ge
Force GTX 660 Ti, Ge
Force GTX 660, Ge
Force GTX 650 Ti BOOST, Ge
Force GTX 650 Ti, Ge
Force GTX 650, Ge
Force GTX 645, Ge
Force GT 640, Ge
Force GT 635, Ge
Force GT 630, Ge
Force MX110 Quadro: Quadro K6000, Quadro K5200, Quadro K5000, Quadro K4000, Quadro K4200, Quadro K2200, Quadro K2000, Quadro K2000D, Quadro K1200, Quadro K620, Quadro K600, Quadro K420, Quadro 410
The Open
GL 4.6 specifications can be downloaded from http://www.opengl.org/registry/.
Turing Extensions for Open
GL
GPUs with the new Turing architecture have many new Open
GL extensions giving developers access to new features.
Rất vui vì bạn đang đọc loạt bài bác hướng dẫn này. Đây là loạt bài về thế giới 3D. Cụ thể là Open
GL. Tôi vẫn tập trung cục bộ thời gian trong nửa năm vừa rồi để tò mò về công nghệ 3D, Tôi đang ngừng Engine 3 chiều của tôi (dường như là 1 trong dự án lớn nhất mà tôi đã có lần làm) và bây giờ là thời gian tôi chia sẻ với bạn về đa số gì cơ mà tôi đang thu lượm được - toàn bộ tài liệu, toàn bộ sách, phía dẫn, và tất nhiên bao gồm cả những ý kiến phản hồi của các bạn.
Loạt bài bác này có 3 phần:
Phần 1 - định nghĩa cơ bạn dạng về 3d và OpenGLPhần 2 - Đi sâu vào Openg
GL ES 2.0Phần 3 - năng lực Jedi vào Open
GL ES 2.0 và bối cảnh 2D
Nếu mình thích xem code luôn luôn thì hãy ngó qua phần 2/3 trước vày trong phần đầu tôi chỉ trình diễn về các khái niệm thôi.
Nào, bắt đầu thôi.
Tổng quan
Có ai trước đó chưa từng nghe về Open
GL không? Open
GL là viết tắt đến "Open Graphics Library" và nó được dùng không hề ít trong ngôn từ máy tính. Open
GL là nơi gần nhất giữa CPU (cái mà bọn họ - hầu hết developer - chạy các ứng dụng trên các ngôn ngữ lập trình) cùng GPU (chip xử lý đồ họa). Bởi vậy Open
GL cần được được cung ứng bởi các nhà cung ứng card đồ họa (vd: NVidia) với được cài đặt bởi những đối tác doanh nghiệp phát triển hệ điều hành quản lý (giống như apple hay Microsoft) và sau cùng Open
GL cho chúng ta một API thống nhất để làm việc. API này là những "Ngôn ngữ miễn phí" (hoặc phần lớn miễn phí). Bài toán này quá dễ dãi vì nếu bạn sử dụng C hoặc C++ hay thậm chí là là Objective-C, Perl, C# tốt Javascript hay ngẫu nhiên ngôn ngữ nào các bạn muốn, API của Open
GL luôn giống nhau, giải pháp xử lý giống nhau, thông thường chức năng, chiếc lệnh cùng là chỗ mà loạt bài xích hướng dẫn này bắt đầu!
Trước khi nói đến Open
GL API chúng ta cần buộc phải có kiến thức và kỹ năng về 3D. Lịch sử của 3d trong ngôn ngữ máy vi tính được gói trong lịch sử vẻ vang của Open
GL. Vì vậy hãy cùng tìm hiểu qua một chút về lịch sử dân tộc của nó.
Một mẩu chuyện nhỏ

Khoảng 20 thời gian trước có một bạn tên là Silicon Graphics (SGI) tạo nên một các loại thiết bị nhỏ. Thiết bị này hoàn toàn có thể hiện ra những ảo ảnh rất thực tế. Với hình ảnh 2D, sản phẩm đó dám hiện được các hình ảnh kiểu 3D, mô bỏng cái nhìn và chiều sâu theo đôi mắt của nhỏ người. Thiết bị này được gọi là Iris
GL (có lẽ vị nó chũm thử mô phỏng theo mắt của con người).
Ghê chưa, thiết bị sẽ là thư viện hình ảnh đầu tiên. Tuy thế nó bị tiêu diệt quá nhanh vì để triển khai được như thế, anh ta cần điều khiển vô số thứ trong máy vi tính như thẻ đồ họa, khối hệ thống windows, những ngôn ngữ lập trình và giao diện shop với người dùng cuối. Không ít thứ thậm chí là để cho một công ty quản ngại lý, chưa kể tới 1 người. Bởi vì vậy SGI ban đầu chuyển qua 1 thứ hệt như "thẻ chế tạo đồ họa", "hệ thống thống trị cửa sổ", "tạo giao diện người dùng" cho các công ty khác và tập trung vào phần đặc biệt nhất của thư viện vật họa. Năm 1992 đã thành lập và hoạt động Open
GL nuốm hệ đầu tiên.
Vào năm 1995 Microsoft giới thiệu Direct3D, đối thủ tuyên chiến đối đầu đáng ghờm cùng với Open
GL.Và chỉ tới năm 1997 Open
GL 1.1 đã được tung ra. Nhưng mà tới tận năm 2004, Open
GL mới có thể thu hút được tôi, Open
GL 2.0 cùng với những tuấn kiệt tuyệt vời. Tôi thực sự đam mê Shaders, lập trình pipeline (programmable pipeline).
Cuối thuộc vào 2007 Open
GL ES 2.0 đang mang sức khỏe của Shader và Programmable pipeline cho tới các hệ thống nhúng.
Ngày nay, chúng ta cũng có thể thấy logo sản phẩm của Open
GL (hoặc Open
GL ES) trong rất nhiều trò chơi, áp dụng 3D, 2 chiều và rất đa số mềm không giống (đặc biệt là phần mềm 3D). Open
GL ES được sử dụng bởi Play
Station, Android, Nintendo 3DS, Nokia, Samsung, Symbian và tất yếu cả táo apple với Mac
OS với i
OS.
Đối thủ lớn số 1 của Open
GL
Vâng, chúng ta đang nói đến hệ điều hành quản lý Windows.
Bạn tất cả nhớ tôi đã nói rằng phiên bản đầu tiên của Open
GL là 1992? cùng thời gian đó, Microsoft đã bao gồm Windows 3. Như Microsoft luôn luôn tin rằng "không gì được sinh sản ra, hầu hết thứ được copy", Microsot đã gồm gắng copy Open
GL giữa những gì họ call là Direct
X cùng được trình làng lần đầu xuân năm mới 1995 trong Windows 95 tương ứng.
Một năm sau, 1996, Microsoft reviews Direct3D, một phiên phiên bản copy của Open
GL. Điểm nên nói là Microsoft đã chiếm ưu vắt trên thị phần trong nhiều năm liền, cùng Direct
X hoặc (Direct3D) đã ăn vào các máy tính xách tay PCs và khi Microsoft bắt đầu chuyển sang thị phần di cồn và đoạn clip Game, Direct
X cũng lấn sảnh sang.
Ngày nay Direct
X có cấu tạo rất tương tự như với Open
GL: dùng ngữ điệu Shader, cũng có thể có programmable pipeline, thậm chí là cũng cung ứng cả fix pipeline, không chỉ có thế là tên của các hàm vào API cũng tương tự luôn. Sự không giống nhau chỉ là Open
GL là miễn phí, luôn luôn mở, dẫu vậy Direct
X là đóng. Open
GL đến i
OS, Mac
OS, hệ thống Linux trong lúc Direct
X chỉ dành cho hệ quản lý và điều hành của Microsoft.
Giờ là lúc chúng ta cũng có thể bắt đầu khám phá thế giới lập trình 3d được rồi!
3D - Con mắt nhìn thứ nhất
Từ thời gian tôi phệ lên, tôi vẫn đam mê công nghệ 3D và những trò gameplay 3D. Tất cả các nhân đồ dùng trong đó, con người, biết về mô phỏng nhân loại thực trong số hiệu ứng 3D đến từ một địa điểm duy nhất: nhỏ mắt.
Con mắt là cơ bạn dạng trong thế giới 3D. Toàn bộ những điều họ làm là mô bỏng nó, làm sao thật đẹp, thật hấp dẫn giống như những gì mắt bé người hoàn toàn có thể thấy. Phần nhiều khái niệm 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, những loại sự đồ dùng là đã được nhắc đến nhiều khi các bạn làm quen với 3D.
Mọi thứ họ làm là nỗ lực tái sinh sản từ mắt fan những thứ: góc nhìn, điểm mù, trở nên dạng, độ sâu ảnh, tiêu cự, góc nhìn...
Không gian 3 chiều
Nghe có vẻ ngớ ngẩn nhưng lại thực sự bắt buộc nói rằng: trái đất 3D là 3d vì nó gồm 3 chiều. Tôi nói chiếc này vì chưng nó rất đặc biệt để nói thêm rằng nó nhiều hơn thế nữa 2D một chiều và phức tạp hơn rất rất nhiều so cùng với 2D.
Hãy xem, trong nhân loại 2D khi bọn họ cần tảo một hình vuông vắn rất đối chọi giản: 45 độ luôn luôn là 45 độ. Nhưng với 3D, nhằm quay một hình vuông yêu mong 3 trục X, Y, Z. Dựa vào trên lắp thêm tự của góc quay, hiệu quả cuối cùng rất có thể rất khác nhau. Phần nhiều thứ thông thường sẽ trở lên linh tinh khi chúng ta thử cù với những trục khác nhau. Ví dụ: quay x=25, y=20 là một trong kiểu, x=10, y=20 và sau đó x=10 lại tạo nên một kết quả mới.
Như vậy nói cách khác khi thêm một chiều khác làm cho cho công việc của chúng ta phức tạp lên gấp các lần.
Không phải 3d mà bắt buộc là 4D
Hmmm, lại thêm 1 chiều nữa ư?
Chính xác, điểm ở đầu cuối tôi ao ước nhắc đến đó là điều này. Bọn họ không chỉ thao tác làm việc trong trái đất 3D, họ còn có chiều vật dụng 4: thời gian. Phần đông sự vật trong quả đât 3D cần liên hệ lẫn nhau, cần được di chuyển, va chạm, cầm cố đổi. Và như tôi đã nói làm việc trên, việc thay đổi đó trong quả đât 3D tạo ra nhiều hiệu quả khác nhau.
Vậy đến hôm nay chúng ta đã có mang được 3 chiều là: "việc mô phỏng mắt của con tín đồ và mô rộp sự hoạt động của các sự vật".
Áp dụng Open
GL vào thế giới 3D
Bây giờ new là lúc nói tới cái độc đáo của bài blog này: Hãy nói đến Open
GL. Đầu tiên bọn họ cần cảm ơn các nhà toán học như Ơ-le, Hamilton, Pythago và rất nhiều nhà công nghệ khác. Nhờ tất cả họ nhưng ngày nay họ có không ít công thức và công cụ để làm việc với không khí 3 chiều. Open
GL đã sử dụng toàn bộ kiến thức đó để tạo ra một thế giới 3D tức thì trước mặt bọn chúng ta. Gồm hàng nghìn, thậm chí còn hàng triệu phép thống kê giám sát trên một giây sử dụng các công thức toán học để mô bỏng lại vẻ đẹp cơ mà mắt fan trông thấy.
Open
GL là một MÁY TRẠNG THÁI (state machine) - điều này có nghĩa là toàn bộ Open
GL thao tác làm việc trên mô hình kiến thiết theo trạng thái. Để minh họa cho Open
GL, hãy tưởng tượng một máy cần Trục cảng hải phòng chẳng hạn. Ở đó có tương đối nhiều các thùng hàng (container) với tương đối nhiều các kiện hàng bé dại bên trong. Open
GL tương tự như toàn bộ khu cảng kia bao gồm:
GL (Textures, Shaders, Meshes, và các thứ tương tự)Các kiện hàng bên trong mỗi container là hồ hết gì chúng ta tạo ra vào ứng dụng thực hiện Open
GL. Đó là gần như thứ chúng ta nhìn thấy.Máy cần trục là các Open
GL API, loại mà họ sẽ sử dụng.
Vậy khi chúng ta thực hiện nay một hàm vào Open
GL hệt như việc áp dụng cần trục. Chiếc bắt buộc trục lấy những container vào cảng, nâng nó lên, xử lý phần đa gì bên trong và sau cùng thả xuống vào một nơi vẫn định sẵn. Bạn chưa hẳn trực tiếp sử dụng cảng đó, không thể thay đổi nội dung những thùng hàng, ko thể sửa chữa chúng, bạn cũng tất yêu trực tiếp đụng va vào các thùng hàng trong cảng. Tất cả chỉ là các bạn ra lệnh mang lại chiếc phải trục thực hiện. Chỉ bao gồm chiếc đề xuất trục đó mới rất có thể 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à rất là quan trọng về Open
GL cho tới bây giờ. Chiếc yêu cầu trục chỉ là 1 trong thứ tất cả thể làm chủ các thùng sản phẩm trong cảng.

Có vẻ Open
GL bị số lượng giới hạn bởi những API? dẫu vậy không, những cần trục của Open
GL là rất là mạnh mẽ. Nó có thể lặp lại việc xử lý gắp-và-thả hàng nghìn tính đến hàng triệu những container trong một giây. Một trang bị tuyệt với không giống của Open
GL là sử dụng quy mô State Machine, kia là chúng ta không bắt buộc lưu giữ bất kỳ thể hiện tại nào, bọn họ không cần được tạo các đối tượng người tiêu dùng trực tiếp, bọn họ chỉ phải giữ những id, hoặc trong lấy một ví dụ trên: chúng ta chỉ nên biết về id của những container.
Vậy Open
GL làm việc như vậy nào?
Đi sâu vào bộ xử lý đo lường và thống kê của Open
GL, ta thấy Open
GL sử dụng đo lường trực tiếp bên trên GPU - phần cứng xử lý hình ảnh cho máy tính - và thực hiện dấu phảy cồn (floating points). CPU (Central Processing Unit) là cpu xử lý của dòng sản phẩm tính. Còn GPU (Graphics Processing Unit) là cpu đồ họa. Chip xử lý đồ họa này hỗ trợ cho CPU sút thiểu các quá trình nặng nhọc: nó có thể xử lý hình ảnh trước khi hiển thị màn hình. Giỏi sâu hơn, những gì Open
GL thực hiện đó là trên GPU, thế vì giám sát và đo lường trên CPU. GPU nhanh hơn rất rất nhiều với các số thực so với CPU. Đây là vì sao cơ bạn dạng để các trò chơi 3d chạy nhanh hơn khi bao gồm card đồ gia dụng họa. Đây cũng chính là lý vị cho các phần mềm xử lý 3D chuyên nghiệp giúp họ làm việc 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 phần mềm cũng cho họ một tùy chọn: bao gồm dùng Open
GL hay không? với đó, giờ bạn đã biết rồi. Tùy chọn đó đó là dành cho bài toán xử lý sẽ ở bên trên GPU hay không. Vì vậy, Open
GL sẽ trọn vẹn làm việc với GPU xuất xắc không? câu trả lời là không chắc. Chỉ những thao tác xử lý ảnh và vài sản phẩm khác thôi. Open
GL cho chúng ta rất nhiều tác dụng để tàng trữ ảnh, dữ liệu, thông tin trong một định dạng núm thể. đông đảo định dạng này được cách xử lý trực tiếp vày GPU. Vị vậy Open
GL nhờ vào vào phần cứng. Nếu như phần cứng không cung ứng Open
GL, chúng ta không thể sử dụng nó. Thừa buồn! các phiên bạn dạng mới của Open
GL thường xuyên cần những tính năng mới của GPU. Cơ mà cũng đừng lo lắng, Open
GL luôn cần những nhà cung ứng tích đúng theo vào, chúng ta (những developer - coder) sẽ làm việc trên những phiên bản Open
GL mới chỉ lúc thiết bị sẽ sẵn sàng. Vào thực tế, tât cả những chip đồ họa lúc này đều hỗ trợ Open
GL. Bởi vậy bạn cũng có thể sử dụng Open
GL với không hề ít ngôn ngữ cùng thiết bị. Thậm chí là với Microsoft Windows.
Logic của Open
GL
Open
GL là thư viện hình ảnh khá ngắn gọn cùng súc tích. đông đảo gì bạn thấy vào các ứng dụng xử lý 3D chuyên nghiệp hóa là cực kỳ phức tạp chuyển động trên Open
GL. Vì xúc tích và ngắn gọn của Open
GL bao hàm thứ sau:
Open
GL chuyển động xoay xung quanh 3 định nghĩa này. Mỗi có mang ở trên tự do nhau và làm nuốm nào nhằm cả 3 có thể cùng nhau tạo nên các cảm giác 3D đẹp mắt (hay tất cả với các ảnh 2D bởi nó chỉ là dạng 3d với độ sâu Z=0, họ sẽ nói sự việc này sau).
Primitives
Bao tất cả 3 nhiều loại đói tượng:
Các điểm trong hệ không gian 3 chiều (x, y với z)Các đường thẳng trong không khí (sự kết hợp của 2 điểm)về một tam giác trong không khí (sự phối hợp của 3 điểm)Một điểm 3D có thể coi như một phân tử trong không gian.Một mặt đường thẳng luôn hoàn toàn có thể coi như một vector.Một tam giác rất có thể coi là 1 trong mặt trong 1 cái lưới với sản phẩm nghìn, triệu tam giác kết hợp lại.
Một vài ba phiên phiên bản Open
GL cung ứng quads (hình tứ diện với 4 điểm), cũng là một loại của tam giác, dẫu vậy để Open
GL ES đạt hiệu quả cao nhất thì cái này sẽ không được hỗ trợ.
Buffers
Nói một cách 1-1 giản, buffer là 1 trong những vùng giữ trữ trong thời điểm tạm thời giúp cho vấn đề tối ưu. Bao gồm 3 loại Buffer:
Frame BufferRender Buffer
Buffer Object
Frame Buffer là trừu tượng và cực nhọc hiểu tuyệt nhất trong cả 3 loại. Khi chúng ta tạo một cảnh, chúng ta có thể gửi hình ảnh trực tiếp tới screen của thứ hoặc tới Frame Buffer. Về cơ bạn dạng Frame Buffer là 1 trong vùng để lưu dữ liệu ảnh tạm. Cụ thể hơn, chúng ta cũng có thể tưởng tượng nó như một cổng đầu ra từ cỗ render của Open
GL cùng gồm không hề ít ảnh, chưa hẳn chỉ bao gồm một. Những ảnh đó là gì? Đó là những ảnh về các đối tượng người tiêu dùng 3D, về độ gần/xa của các đối tượng người tiêu dùng trong không gian, những vùng giao nhau của các đối tượng người dùng và về những phần được hiện tại ra. Vì vậy Frame Buffer y như một tập với nhiều ảnh. Tất cả đều được tàng trữ dưới dạng thông tin mảng những giá trị pixel.
Render Buffer là một vùng nhớ tạm của một ảnh duy nhất. Giờ bạn cũng có thể rõ ràng hơn lúc 1 Frame Buffer chủ yếu là bao hàm nhiều Render Buffer. Tất cả vài một số loại Render Buffer: Màu, độ sâu, hình khối.
Xem thêm: Business Manager Là Gì? Tổng Hợp Kiến Thức Từ A Business Manager Là Gì
Màu: lưu trữ những màu ở đầu cuối được sinh bởi OpenGL render cùng lưu dưới dạng ảnh màu (RGB).Độ sâu tàng trữ giá trị Z của đối tượng. Nếu như khách hàng đã quen với các ứng dụng 3D, bạn sẽ biết về độ sâu của ảnh là gì. Nó là tỉ lệ độ màu xám của hình ảnh phụ thuộc theo vị trí so với màn hình. Trong trường hợp vừa đủ độ white khi đối tượng người sử dụng ở gần nhất và color đen hoàn toàn khi nó sinh sống xa nhất.Hình khối ám chỉ về thành phần hiển thị của đối tượng. Hệt như một lớp mask cho các vùng được chú ý thấy. Được lưu bên dưới dạn ảnh chỉ có 2 white color & đen.
Buffer Object là một vùng nhớ mà lại Open
GL gọi là "server side" (hoặc ko gian địa chỉ lưu trữ). Buffer Object cũng là một trong những vùng nhớ lâm thời thời, nhưng có vẻ lâu dài thêm hơn các các loại trước. Một Buffer Object hoàn toàn có thể lưu trữ vào suốt quá trình sử dụng ứng dụng. Buffer Object có thể giữ các thông tin về đối tượng người tiêu dùng 3D bên dưới dạng vẫn được về tối ưu. Những thông tin này hoàn toàn có thể có 2 loại: Structure và Indice.
Structure là mảng biểu đạt 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 những gì bạn muốn. Indice thì rõ ràng hơn, mảng này được dùng làm xác định bao gồm bao nhiêu tam giác trong lưới vẫn được tạo thành dựa trên mảng structure.
Bạn vẫn cực nhọc hiểu ư? Hãy xem ví dụ bên dưới đây:
Tưởng tượng một khối 3D. Khối này có 6 khía cạnh được sinh ra vì chưng 8 đỉnh?

Mỗi mặt là 1 hình vuông, nhưng chúng ta có hãy nhớ là Open
GL chỉ biết về các tam giác đúng không? vì vậy họ cần chuyển những hình vuông vắn đó thành các tam giác để gia công việc cùng với Open
GL. Như vậy chúng ta có 12 tam giác tất cả!Ảnh sinh sống trên được tạo thành bởi ứng dụng Modo, hãy coi góc dưới bên phải. Chúng là những thông tin về đồ gia dụng thể của bọn chúng ta. Bạn cũng có thể thấy gồm 8 đỉnh cùng 12 khía cạnh (GL: 12).
Các tam giác vào Open
GL là sự phối kết hợp của những đỉnh 3D. Vày vậy để chế tạo ra mặt phẳng của chiếc hộp, họ cần Open
GL tạo theo phong cách như này: đỉnh 1, đỉnh 2, đỉnh 3, đỉnh 1, đỉnh 3, đỉnh 4.
Hay nói bí quyết khác, họ cần lặp lại 2 đỉnh tại một mặt của hình vuông. Nếu nắm hình hộp bằng một hình có 12 mặt thì từng đỉnh buộc phải lặp 4 lần, nếu như thay bằng một hình 16 mặt, chúng ta cần 6 lần lặp lại. Và cứ thế, việc tăng số lặp của các đỉnh lên cấp tốc chóng.
Vì vậy Open
GL đến phép bọn họ một biện pháp làm dễ dàng hơn: áp dụng một mảng các Indice. Ở ví dụ trên, chúng ta cũng có thể có một mảng 8 đỉnh: đỉnh 1, đỉnh 2, đỉnh 3, đỉnh 4,... Với thay vì viết lại những thông tin cho mỗi mặt, bọn họ 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 phần tử trong mảng 0,1,2-0,2,3-2,6,3 màn trình diễn một khía cạnh tam giác. Với đặc điểm này, bạn có thể viết thông tin những đỉnh 1 lần với tái thực hiện nhiều lần vào mảng những indicate.
Giờ quay lại với Buffer Object, loại trước tiên là một mảng những structure, như đỉnh 1, đỉnh 2, đỉnh 3, đỉnh 4,... Và loại thứ hai 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 tối ưu để gia công việc thẳng với GPU và chúng ta không đề xuất giữ mảng kia trong ứng dụng của người tiêu dùng sau khi sinh sản một Buffer Object.
Rasterize
Rastersize là quy trình xử lý do Open
GL nhận toàn bộ thông tin về đối tượng người tiêu dùng 3D (bao có đỉnh, tọa độ, tính toán...) để tạo nên một hình ảnh 2D. Ảnh này sẽ ảnh hưởng một vài biến hóa và tiếp đến hiển thị trên screen của thiết bị.
Nhưng nghỉ ngơi bước sau cuối này, việc liên kết giữa thông tin các px và thiết bị màn hình thuộc về những nhà sản xuất thiết bị. đội Khronos cung ứng API khác call là EGL, dẫu vậy đây chỉ là api của các nhà sản xuất. Bọn chúng ta, các developer vẫn không thao tác trực tiếp cùng với Khronos EGL, nhưng với phiên bạn dạng đã được chuyển đổi của những nhà cung cấp.
Vì vậy khi chúng ta tạo một Open
GL render, chúng ta có thể chọn quy trình render thẳng lên màn hình, sử dụng EGL, hoặc render tới những Frame Buffer. Vấn đề render tới những Frame Buffer, các bạn vẫn nghỉ ngơi trong Open
GL API, tuy thế nội dụng sẽ chưa được hiện ra trên màn hình. Việc hiển thị lên screen nằm ngoài phạm vi của Open
GL API, nó là của EGL API. Vị vậy tại thời khắc render, bạn cũng có thể chọn một trong 2 nhiều loại để xuất ra.
Nhưng đừng thử ngay, bởi như tôi đang nói, mỗi nhà sản xuất tạo riêng cho họ các EGL API riêng. Ví dụ táo apple không có thể chấp nhận được bạn render thẳng tới screen thiết bị, bạn luôn luôn luôn đề nghị render tới Frame Buffer và tiếp nối dùng EGL (bởi Appple) để hiện nội dung lên màn hình.
Open
GL pipelines
Như tôi đã nói về "Programmable pipeline" cùng "fixed pipeline", Programmable pipeline là thư viện đồ họa cho phép họ làm phần đông thứ liên quan tới Camera, Ánh sáng, chất liệu và hiệu ứng. Và bạn có thể làm việc này cùng với Shader. Vì chưng vậy mỗi khi chúng ta nghe về "programmable pipeline" hãy nghĩ về Shader!
Thử cùng mày mò Shader là gì nhỉ.
Shader y như một đoạn code, kiểu dáng như một chương trình nhỏ, thao tác trực tiếp vào GPU để thực hiện các phép tính phức tạp. Nếu miêu tả một cách tinh vi thì như vậy này: màu sắc cuối thuộc của mặt phẳng vật thể, mẫu mà tất cả một texture là T, bị chuyển đổi khi đâm vào một trong những vật bao gồm texture là TB, thực hiện màu SC với phản nghịch chiếu mức SL, dưới ánh nắng L với cường độ LP theo góc LA từ khoảng cách Z cùng với độ rọi F và tất cả đang nhìn vì mắt của Camera C tại vị trí phườ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à rất nhiều thứ buộc phải làm đẩy cho thư viện cách xử lý đồ họa. Bởi vậy programmable pipeline chỉ với cách bọn họ quản lý đa số thứ đó như thế nào.
Còn fixed pipeline ngược cùng với programmable pipeline! Fixed pipeline là thư viện giao diện xử lý về tất cả các một số loại và cho chúng ta api để thiết lập Camera, Material, ánh sáng, hiệu ứng.
Để tạo nên Shader họ dùng ngôn ngữ giống như như C, sẽ là Open
GL Shader Language (GLSL). Open
GL ES áp dụng với một chút ít giới hạn được điện thoại tư vấn là Open
GL 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à hoàn toàn có thể viết thêm các biến trong GLSL hơn với GLSL ES, tuy nhiên cú pháp là tương tự nhau.
Điểm một ít về cơ chế làm việc của các Shader này:
Bạn tạo thành chúng trong những file đơn nhất hoặc viết trực tiếp vào code của bạn, miễn làm thế nào nội dung sau cuối chứa Shader Language sẽ được gửi mang đến Open
GL với biên dịch Shader cho bạn (bạn thậm chí rất có thể dùng tiền-biên-dịch bên dưới dạng mã nhị phân, tuy vậy không trực thuộc trong nội dung bài viết này).
Shader thao tác theo cặp: Vertex Shader với Fragment Shader. Chủ thể này đề xuất rất quan lại trọng, hãy xem chi tiết Vertex và Fragment như vậy nào. Để hiểu hầu như gì mỗi một số loại shader làm, hãy trở lại ví dụ hình hộp ở trên.
Vertex Shader
Vertex Shader cũng rất được biết đến như thể VS hoặc VSH là 1 trong những chương trình nhỏ sẽ được triển khai ở từng đỉnh của mesh (mỗi thứ thể được tạo nên bằng một lưới các tọa độ, điện thoại tư vấn là mesh). Hãy xem hình vỏ hộp ở trên, hộp này còn có 8 đỉnh (giờ trong ảnh chỉ bao gồm 5 đỉnh đang rất được hiện ra thôi), bạn sẽ hiểu ngay dưới đây thôi. Do vậy VSH sẽ được xử lý 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. Các bạn có đừng quên Programmable pipeline đến phép bọn họ điều khiển camera? chính là ở đây, vị trí và độ mở của ống kính camera tất cả thể thay đổi vị trí sau cuối của những đỉnh. Vertex Shader cũng có trách nhiệm chuẩn bị và xuất ra vài variable (giá trị, biến) mang đến Fragment Shader. Vào Open
GL bọn họ định nghĩa các biến sinh sống Vertex Shader, nhưng chưa phải cho Fragment Shader trực tiếp. Bởi vì vậy, Vertex Shader nên gửi các biến tới Fragment Shader.
Nhưng tại sao chúng ta không thể trực tiếp truy vấn tới Fragment Shader?
Hãy xem FSH (Fragment Shader) và bạn sẽ hiểu.
Fragment Shader
Giờ hãy xem lại hình lập phương một đợt nữa.
Bạn bao gồm thấy đỉnh số 5 bị ẩn tốt không? do với vị trí nắm thể, góc quay chũm thể, chúng ta chỉ hoàn toàn có thể nhìn thấy 3 mặt được có mặt từ 7 đỉnh.
Đây là những gì Fragment Shader thực hiện! FSH sẽ được xử lý nghỉ ngơi mỗi mặt được hiện của hình ảnh cuối cùng (được hiện tại trên màn hình). Ở đây bạn cũng có thể hiểu một fragment như là 1 pixel. Nhưng lại nói phổ biến không hẳn đúng mực như pixel, vì chưng giữa Open
GL render và vấn đề hiện ra ảnh cuối cùng trên màn hình hiển thị thiết bị sẽ bị giã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ỉ trọng 16:9 vậy). Bởi vì vậy một fragment rất có thể có ít hơn hoặc nhiều hơn thế số pixel thực tế, phụ thuộc vào trên trang bị và cấu hình việc render. Trong hình lập phương nghỉ ngơi trên, Fragment Shader sẽ tiến hành xử lý làm việc mỗi px của cha mặt sẽ hiện lên từ bỏ 7 đỉnh đó.
Bên vào Fragment Shader, bọn họ sẽ làm việc với phần đa thứ tương quan tới bề mặt của trang bị thể, như hóa học liệu, hiệu ứng phản chiếu, đổ bóng, ánh sáng, tương phản, khúc xạ, tổ chức và bất kỳ các hiệu ứng khác mà bạn muốn. Sản phẩm cuối cùng là màu của các pixel dưới định dạng RGBA.
Giờ thứ sau cuối mà bạn cần phải biết đó là về VSH cùng FSH làm việc với nhau như vậy nào. Đó là buộc phải phải có một Vertex Shader và chỉ còn 1 Fragment Shader, không rộng không kém, phải đúng là 1-1. Để đảm bảo chúng ta không phạm lỗi, Open
GL bao gồm một thứ gọi là Program. Một program trong Open
GL chỉ được biên dịch theo cặp 1 VSH cùng 1 FSH mà lại thôi.
Tổng kết
Đây là toàn bộ về quan niệm Open
GL. Hãy nhớ gần như điểm này:
GL xúc tích được khiến cho bởi 3 định nghĩa cơ bản: Primitive, Buffer cùng Rasterize.Primitives bao gồm điểm, đường, tam giác
Buffer có thể là Frame Buffer, Render Buffer hoặc Buffer Object.Rasterize là vượt trình đổi khác Open
GL đo lường và tính toán ra những pixel
Open
GL có tác dụng việc đối với tất cả Fixed hoặc Programmable pipeline.Fixed pipeline đang cũ, chậm, cồng kềnh. Có khá nhiều hàm làm việc với Camera, ánh sáng, trang bị liệu, hiệu ứng
Programmable pipeline dễ sử dụng hơn, cấp tốc và dễ hiểu hơn, vì chưng trong Programmable chất nhận được Open
GL lập trình sẵn được với Camera, ánh sáng, vật liệu và hiệu ứng.Programmable pipeline là hệt như Shader: Vertex Shader, từng đỉnh của mesh, với Fragment Shader - ở mỗi phần hiển thị của mesh. Từng cặp Vertex Shader và Fragment Shader được biên dịch trong một thứ hotline là Program.
Hãy coi cả 3 bài, Open
GL ngoài ra rất đơn giản và dễ dàng và dễ dàng hiểu. Đúng! nó dễ dàng và đơn giản để hiểu tuy vậy để học thì....haizzz3 điểm ở trên liệt kê ra các nhánh của Open
GL cùng để học toàn bộ chúng bạn có lẽ cần vài mon hoặc hơn.
Những gì tôi cố gắng đề cập ở cả 2 phần tiếp sau của loạt bài xích này đó là tất cả gần như gì tôi đang học được vào 6 tháng cực kì tập trung, đi sâu vào Open
GL. Vào phần tiếp theo sau tôi sẽ cho chính mình xem các hàm cơ bản và kết cấu của một ứng dụng 3 chiều sử dụng Open
GL. Độc lập với ngôn ngữ lập trình mà ai đang sử dụng hoặc cùng với thiết bị nhiều người đang sử dụng.
Nhưng trước khi sang phần tiếp theo, tôi ước ao nói với chúng ta thêm một máy nữa:
Open
GL Error API
Open
GL là 1 trong máy trạng thái tuyệt đối làm việc giống hệt như một nên trục ngơi nghỉ cảng tp hải phòng và bạn không nhất thiết phải trực tiếp thực hiện những gì xảy ra bên trong. Vậy nếu có lỗi xảy ra thì sao? không tồn tại gì xảy ra với áp dụng vì Open
GL trọn vẹn là ở mặt ngoài.
Nhưng làm vậy nào để hiểu khi shader của chúng ta có lỗi? Làm cầm nào để tìm hiểu nếu cửa hàng trình render vào những buffer không hoạt động đúng như ao ước muốn?
Để bắt được những lỗi đó, Open
GL cho chúng ta Error API. Đây là API cực kỳ đơn giản, nó tất cả vài hàm cung ứng sẵn theo từng cặp. Một cái kiểm tra solo giản, có/không, chỉ để tìm hiểu nếu tất cả thứ nào đấy chạy đúng tuyệt không. Cặp khác là để đưa ra được thông tin lỗi rứa thể. Vày vậy cực kì đơn giản. Đầu tiên bạn kiểm tra, siêu nhanh, nếu bao gồm một lỗi, các bạn lấy thông tin ra.
Nói chung chúng ta đặt vài điểm chất vấn ở phần lớn nơi 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 để tránh các lỗi cơ bản.
Phần tiếp theo
Ở phần tiếp theo, bọn họ hãy xem đưa ra tiết phía bên trong đoạn code thực tế, các bạn sẽ đươc code khôn cùng nhiều.