Bài đăng phổ biến

Thứ Tư, 10 tháng 10, 2012

OpenGL ES2.0 for Android (P2 - Camera)


Trong bài này tôi sẽ nói về phần rất quan trọng về thế giới 3D. Như bạn đã biết thế giới này nằm sau thiết bị cầm tay của chúng ta. Và tạo lại những gì phức tạp và đẹp nhất của mắt con người. Để thực hiện được điều này chúng ta sử dụng camera, nó trong thế giới thực mô phỏng của mắt người. Để sử dụng điều này chúng ta sử dụng các phương trình toán học.

          Trong bài này tôi sẽ đưa điều thú vị về camera, và phương trình toán học đằng sau nó. Sự khác nhau giữa thấu kính (lens) lồi (convex) và lõm (concave). Sự chiếu là gì (projection), các ma trận, quaternion (bộ 4) và cuối cùng là ma trận nổi tiếng Model View Projection. 
  • Tổng quan
Đầu tiên chúng ta xem cơ bản về camera, nó làm việc như thế nào trong thế giới thực, ống kính khác nhau, như thế nào để zoom, dịch chuyển, quay, và các nội dung tương tự khác. Ngay sau khi củng cố các khái niệm này chúng ta hãy đi sâu OpenGL và hiểu làm thế nào tất cả điều đó có thể phù hợp trong ứng dụng của chúng ta. Và cuối cùng chúng ta đi tới viết mã nguồn và làm thế nào để chúng làm việc.
Từ opengl1x, opengl2x camara là 1 điều mà chúng ta muốn biết, với ứng xử của shader (GLSL) chúng ta có thể có được sự điều khiển kinh ngạc trên hệ thống. Với việc điều khiển camera trong opengl chúng ta có 2 hoặc 3 kiểu camera, Nhưng khi chúng ta lập trình bản thân chúng ta có thể khởi tạo bất kỳ kiểu camera nào. Trong bài này tôi sẽ nói về cơ bản của camera. Orthogonal và perspective camera

  • CAMERA TRONG THẾ GỚI 3D

Mắt của con người là thấu kính lồi, nó hội tụ các hình ảnh để tạo thành hình ảnh lộn ngược trên võng mạc. Thông thường, ống kính máy ảnh được hình thành bởi các ống kính nhiều thấu kính lồi và lõm, nhưng hình ảnh cuối cùng trông giống như một thấu kính lồi, giống như mắt của con người.
Hình ảnh cuối cùng phụ thuộc vào nhiều yếu tố, không chỉ có loại của ống kính, trong thế giới tổng quát, hình ảnh dưới đây cho thấy làm thế nào một bức tranh trông giống như thật đằng sau mỗi loại ống kính.
(Hai loại ống kính khác nhau)
Cả hai loại này có thể tạo ra một hình ảnh bằng một bản gốc, có nghĩa là, với một góc rất nhỏ của sự biến dạng, tùy thuộc vào khoảng cách của các đối tượng từ các ống kính và góc nhìn. Những hình ảnh tiếp theo sẽ hiển thị các thuộc tính quan trọng nhất của một máy ảnh.

                                    Camera attributes
Các khu vực màu đỏ trong hình trên là không thể nhìn thấy từ máy ảnh, do đó, bất cứ đoạn nào trong vùng này sẽ bị cắt bớt. "The depth of field" là khu vực có thể nhìn thấy, tất cả các fragments bên trong nó sẽ được hiển thị. Thông thường từ " The depth of field " cũng được sử dụng để mô tả một hiệu ứng đặc biệt, hiệu ứng của Lens Blur. Như đôi mắt của con người có TIÊU CỰ đối tượng bên ngoài xa tâm có vẻ mờ hơn, hiệu ứng Lens Blur mô phỏng tập trung, làm cho các đối tượng bên ngoài tập trung có vẻ mờ. Vì vậy, lý do tại sao tôi không đặt thuộc tính “Focus” vào hình ảnh trên? Bởi vì focus là một tính năng đặc biệt chỉ trong một số máy ảnh, máy ảnh cơ bản trong 3D không cài đặt khả năng focus. Các thuộc tính quan trọng khác là " Angle of View " (Góc nhìn), Miêu tả cho góc ngang có thể nhìn thấy máy ảnh. Bất cứ fragments bên ngoài góc độ này sẽ không được hiển thị cho máy ảnh. Thỉnh thoảng " Angle of View " cũng được sử dụng để miêu tả khu vực dọc, nhưng thông thường chúng ta thích để xác định tỉ lệ của hình ảnh cuối cùng bằng cách sử dụng chiều rộng và chiều cao.

Các máy ảnh hiện đại là rất chính xác và có thể tạo ra các hiệu ứng tuyệt vời bằng cách sử dụng các thuộc tính và kết hợp các loại ống kính. Bây giờ chúng ta hãy trở lại với thế giới ảo của chúng ta và làm thế nào chúng ta có thể chuyển thành những thuộc tính và hành vi của toán học. Tuy nhiên, trước khi di chuyển đến các máy quay phim 3D, chúng ta cần hiểu rõ hơn một chút về toán học trong thế giới 3D.

  • LỊCH SỬ VỀ THẾ GIỚI 3D
        Ông nội của chúng ta về thế giới 3D là Euclid, còn được gọi là Euclid của Alexandria. Ông sống ở 323-283 BC ở thành phố Hy Lạp Alexandria. Euclid tạo ra những gì chúng ta sử dụng cho đến ngày hôm nay được gọi là không gian Euclide và hình học Euclide, tôi chắc chắn rằng bạn đã nghe thấy những cái tên này trước đây. Về cơ bản, không gian Euclid được hình thành bởi 3 mặt phẳng mà cho chúng ta các trục X, Y và Z. Mỗi mặt phẳng sử dụng hình học truyền thống, trong đó có rất nhiều đóng góp từ những thứ khác từ Hy Lạp, Pythagoras (570BC - 495 BC). Vâng nó là không khó để tìm ra lý do tại sao Euclid phát triển ý tưởng của mình, bạn biết, người Hy Lạp yêu kiến trúc và theo thứ tự để xây dựng các hình thức hoàn hảo họ cần để làm cho tất cả các phép tính trong một thế giới tưởng tượng 3D. 
          Tiến bộ nhiều năm trước trong cỗ máy thời gian của chúng ta, chúng ta vào đầu thế kỷ 17, một người đàn ông tên là René Descartes tạo ra một cái gì đó gọi là Cartesian phối hợp hệ thống. Đó là điều rât là tuyệt vời! Nó đã tạo ra cầu nối giữa lý thuyết của Euclid và đại số tuyến tính, giới thiệu các ma trận chuyển đổi Euclide (dịch, scale và xoay vòng). Chuyển đổi Euclide đã được thực hiện với phương pháp tiếp cận truyền thống của Pythagoras, vì vậy bạn có thể tưởng tượng bao nhiêu tính toán đã có, nhưng nhờ Descartes chúng ta có thể làm cho chuyển đổi Euclide bằng cách sử dụng ma trận. Rất đơn giản, nhanh chóng, là tinh khiết vẻ đẹp! Ma trận trong thế giới 3D thật là tuyệt vời!
Tuy nhiên, các ma trận chuyển đổi Euclide là không hoàn hảo. Chúng có một số vấn đề, một trong những vấn đề lớn nhất có liên quan đến phép quay và được gọi là Gimbal Lock. Nó xảy ra khi bạn cố gắng để xoay 1 mặt phẳng và vô tình hai mặt phẳng đụng vào với nhau, vì vậy vòng quay tiếp theo của một trong hai mặt phẳng này sẽ cho kết quả là Lock Gimbal, có nghĩa là, nó tự nhiên quay cả 2 trục bị khóa. Nhiều năm sau một người đàn ông được gọi là Sir William Rowan Hamilton, năm 1843, tạo ra một phương pháp để đối phó với Xoay Euclide và tránh Lock Gimbal, Hamilton đã tạo ra một cái gì đó gọi là Quaternions! Quaternion thì nhanh hơn, tốt hơn và cách thanh lịch nhất để đối phó với phép quay 3D. Quaternion được tạo ra  bởi một phần tưởng tượng (số phức tạp) và một phần thực sự. Trong thế giới 3D, chúng ta luôn luôn sử dụng các tính toán với vectơ đơn vị (vectơ với cường độ / chiều dài bằng 1), chúng ta có thể loại bỏ một phần tưởng tượng của Quaternions và chỉ làm việc với những con số thực sự. Chính xác, Quaternions là một luận án của Hamilton trong đó bao gồm nhiều hơn là chỉ quay 3D, nhưng với chúng ta và thế giới 3D, ứng dụng chủ yếu là để đối phó với phép quay.
          OK, tất cả những gì hiện có để làm với máy ảnh? Rất đơn giản, dựa trên tất cả những điều này chúng ta bắt đầu bằng cách sử dụng ma trận 4 × 4 để đối phó với biến đổi Euclide và sử dụng một vector với 4 yếu tố để mô tả một điểm không gian (X, Y, Z, W). W là một yếu tố Phối hợp đồng nhất. Tôi sẽ không nói về nó ở đây, nhưng chỉ để cho bạn biết Tọa độ đồng nhất được tạo ra bởi August Ferdinand Mobius vào năm 1827 để đối phó với các khái niệm về vô cực trong hệ thống Cartesian. Chúng ta sẽ nói về Mobius contribuition sau này, nhưng khái niệm về vô cực là rất phức tạp để phù hợp với hệ thống Descartes, chúng ta có thể sử dụng một số lượng tưởng tượng phức tạp cho nó, điều này là không tốt như vậy tính toán thực tế. Vì vậy, để giải quyết vấn đề này, Mobius chỉ cần thêm một biến W, đó là một số thực, và đưa chúng ta trở lại thế giới của các số thực. Dù sao. Điểm là một ma trận 4 × 4 hoàn toàn phù hợp với véc tơ 4 và như chúng ta sử dụng một ma trận duy nhất để làm cho chuyển đổi Euclide vào thế giới 3D của chúng ta, Tôi nghĩ rằng nó có thể là một ý tưởng tốt để sử dụng cùng ma trận 4 × 4 để đối phó với một máy ảnh trong thế giới 3D.
(Miêu tả 1 ma trận 4x4 và một Quaternion)
Còn tiếp.............................




1 nhận xét: