2012-01-23 19 views
5

Tôi đang cố gắng học lập trình đồ họa 3D thông qua "Học lập trình đồ họa 3D hiện đại" của Jason L. McKesson.Trong đồ họa 3D, máy ảnh hoặc vùng mắt là gì?

Tôi chưa thực sự xem các hướng dẫn khác, nhưng hướng dẫn này dường như nhấn mạnh lý thuyết và toán học đằng sau đồ họa 3D. Ngay bây giờ, tôi đang mắc kẹt trên trang này:

http://www.arcsynthesis.org/gltut/Positioning/Tut04%20Perspective%20Projection.html

Tôi không chắc chắn chính xác những gì ông có nghĩa là bởi không gian máy ảnh, và lý do tại sao nó là cần thiết để dự án một thế giới 3D lên một bề mặt 2d. Câu hỏi này là mơ hồ, vì vậy thay vì giải thích đầy đủ, các liên kết có thể cung cấp cho tôi một cách khác để giải thích các khái niệm này cũng sẽ được đánh giá cao.

+0

Xin lỗi, tôi nên làm điều này rõ ràng hơn: Tôi biết lý do tại sao cần thiết để chiếu một thế giới 3D lên bề mặt 2 chiều. Tôi chỉ không biết tại sao không gian camera là cần thiết hoặc hữu ích cho mục đích này. – newprogrammer

Trả lời

5

lý do tại sao nó là cần thiết để dự án một thế giới 3D lên một bề mặt 2d

Tất cả các đồ họa là hình ảnh chỉ 2D. Đồ họa 3D là một hệ thống tạo ra màu sắc cho các điểm ảnh thuyết phục bạn rằng cảnh bạn đang xem là một thế giới 3D chứ không phải là một hình ảnh 2D. Quá trình chuyển đổi thế giới 3D thành hình ảnh 2D của thế giới đó được gọi là hiển thị.

A chiếu, với mục đích hiển thị, là một cách để biến đổi một thế giới từ một chiều sang khác. Hình ảnh đích của chúng tôi là hai chiều, và thế giới ban đầu của chúng tôi là ba chiều. Vì vậy, chúng ta cần một cách để biến đổi thế giới 3D này thành một thế giới 2D.

Tôi không chắc chắn chính xác những gì ông có nghĩa là bởi không gian camera

Trước thời điểm này, vị trí đỉnh được thể hiện trực tiếp trong không gian clip. Nhớ lại rằng chia-by-W là một phần của vị trí đỉnh không gian của clip. Phép chiếu phối cảnh là một cách để chuyển đổi các vị trí thành không gian clip sao cho chúng sẽ xuất hiện như một phép chiếu phối cảnh của một thế giới 3D.

Quy trình chuyển đổi này có các đầu ra được xác định rõ: vị trí không gian clip. Nhưng chính xác thì giá trị đầu vào của nó là gì?

Đó là không gian máy ảnh.

Đây không phải là khoảng trống mà OpenGL nhận ra (không giống như clip-không gian được định nghĩa rõ ràng bởi GL); nó hoàn toàn là một xây dựng người dùng tùy ý. Tuy nhiên, nó có thể hữu ích để xác định một không gian camera cụ thể dựa trên những gì chúng ta biết về phép chiếu phối cảnh của chúng ta.Điều này giảm thiểu sự khác biệt giữa không gian camera và dạng phối cảnh của không gian clip, và nó có thể đơn giản hóa logic chiếu phối cảnh của chúng ta.

+0

OK cảm ơn bạn. Tất cả các câu trả lời cho câu hỏi này là tốt, nhưng câu trả lời này thực sự giải thích TẠI SAO chúng ta cần xác định một không gian camera. Tôi không chắc liệu tôi có hiểu được điều này một cách chính xác hay không, nhưng tôi nghĩ rằng tôi không hiểu tại sao anh ấy sử dụng không gian máy ảnh vì anh ấy không làm gì để di chuyển máy ảnh, vì vậy tôi tự hỏi tại sao anh ấy lại bận tâm điều này ở nơi đầu tiên. – newprogrammer

4

Không gian máy ảnh là hệ tọa độ tương đối so với máy ảnh. Vì vậy, không gian máy ảnh là nơi hình học kết thúc ngay lập tức trước khi chiếu.

Thường thì bạn bắt đầu với tọa độ trong không gian mô hình. Bạn biết cách mô hình liên quan đến thế giới để bạn có thể ánh xạ từ không gian mô hình đến không gian thế giới. Sau đó, bạn có một máy ảnh trên thế giới và bạn sử dụng kiến ​​thức đó để lập bản đồ từ không gian thế giới đến không gian máy ảnh. Nếu không có biến đổi thành không gian liên quan đến máy ảnh, máy ảnh không thể di chuyển.

Phép chiếu là cần thiết vì thế giới của bạn là 3d và màn hình của bạn là 2ngày. Bạn dự án từ thế giới 3D lên bề mặt 2d của màn hình máy tính của bạn. Ngay cả phép lập thể chỉ là hai phép chiếu thay vì một phép chiếu.

Tôi không biết ngay bất kỳ liên kết nào tốt hơn liên kết bạn đã cung cấp.

+0

Giải thích của bạn đang giúp đỡ rất nhiều, cảm ơn bạn. Hướng dẫn này không giới thiệu không gian mô hình hoặc máy ảnh di chuyển cho đến một vài chương sau đó, nhưng những gì bạn đã nói có vẻ có ý nghĩa trực quan. – newprogrammer

+0

Ngoài ra, nếu tôi hiểu chính xác bạn, không gian máy ảnh TRƯỚC KHI bất kỳ phép chiếu nào đến máy bay 2d? – newprogrammer

+0

Có - không gian máy ảnh là kết quả của phép biến đổi cuối cùng trước khi chiếu trong luồng của trình kết xuất đa giác chuẩn. – Tommy

8

Vâng, cần thiết để chiếu một thế giới 3D lên bề mặt 2D vì màn hình của bạn là bề mặt 2D.

Đồ họa 3D hoạt động ở các "không gian tọa độ" khác nhau và chúng được chuyển đổi giữa để có cảnh cuối cùng.

Hãy tưởng tượng ví dụ mô hình hóa thành phố. Bạn có thể xác định góc dưới cùng bên trái của bản đồ là (0, 0) và trên cùng bên phải là (1000000, 1000000). Bạn cũng có thể nói rằng như một quy tắc, một điểm sẽ đại diện cho một chân không gian thực. Đại diện này, chúng ta sẽ gọi World Space.

Để vẽ thành phố của bạn, bạn sẽ muốn nhập một số kiểu tòa nhà và đặt chúng trên thế giới. Vì vậy, bạn có được mô hình của một tòa nhà, nhưng khi bạn đang làm mô hình này, bạn không muốn phải lo lắng về kích thước của thế giới hoặc nơi nó sẽ - bạn có thể sẽ nói rằng góc dưới bên trái của tòa nhà là tại (0, 0) và trên cùng bên phải là (1, 1). Biểu diễn này, chúng ta sẽ gọi Model Space. Tuy nhiên, trên thế giới, tòa nhà có thể được đặt ở (104, 136) và bạn có thể muốn nó là 1000x1000 pixel, vì vậy bạn sẽ cần dịch nó sang (104, 136) và mở rộng nó lên 1000x. Điều này đang chuyển đổi nó từ Không gian Mô hình sang Không gian Thế giới.

Cuối cùng, không gian máy ảnh là cách bạn di chuyển trên toàn thế giới. Nếu bạn nghĩ về nó, di chuyển xung quanh trên thế giới có thể được nghĩ theo hai cách (ít nhất): Bạn di chuyển vòng quanh thế giới, hoặc thế giới di chuyển xung quanh bạn. Vì vậy, để thực hiện chuyển động dễ dàng, chúng tôi sẽ nói rằng máy ảnh luôn ở điểm (0, 0) quay xuống một số trục. Bây giờ nếu bạn muốn di chuyển về phía trước 10 pixel, thay vào đó bạn chỉ cần di chuyển mọi thứ trở lại 10 pixel. Nếu bạn muốn xoay, hãy xoay thế giới thay thế. Vì vậy, để kết xuất tòa nhà, trước tiên chúng tôi muốn biến đổi nó từ Không gian Mô hình thành Không gian Thế giới. Bây giờ, để thực sự vẽ nó, chúng tôi muốn biết nó ở đâu so với người xem, vì vậy chúng tôi chuyển nó từ World Space sang Camera Space.

. . .

Ngoài ra, nếu bạn muốn hiểu điều này rất tốt, một bài tập tốt là viết trình kết xuất khung dây 3D, tách biệt với OpenGL. Chức năng vẽ duy nhất của bạn có sẵn là DrawLine (x1, y1, x2, y2), vẽ một đường thẳng trên màn hình từ (x1, y1) đến (x2, y2).

+0

Đó sẽ là một thách thức. Cảm ơn lời giải thích của bạn! – newprogrammer

+1

Nó không khó như bạn nghĩ. Lý do mà chúng ta sử dụng biến đổi là cuối cùng để làm điều đó chiếu cuối cùng vào màn hình và tìm ra "nơi mà các điểm làm những điểm này thuộc về". Về cơ bản, viết một renderer wireframe sẽ chỉ có nghĩa là bạn làm tất cả các phép nhân ma trận - bản dịch, phép quay, và sau đó chiếu. Phần thực sự khó khăn của đồ họa 3D là bóng và cắt, nhưng nếu bạn đang viết một trình kết xuất khung ảnh, bạn sẽ không phải lo lắng về điều đó. Và nó sẽ làm cho bạn thực sự đánh giá cao và hiểu được toán học. – mindvirus

4

Để nhanh chóng trả lời

lý do tại sao nó là cần thiết để dự án một thế giới 3D lên một bề mặt 2d

suy nghĩ của đại diện cho một thế giới 3D (w/e bạn xác định trong chương trình) sử dụng một Phương tiện 2D, ví dụ như màn hình. Tuy nhiên để làm được điều đó, khá nhiều toán học phức tạp là cần thiết, vì vậy nó phụ thuộc những gì sâu xuống hang thỏ bạn sẵn sàng để đi ...

Trích dẫn wikipedia (http://en.wikipedia.org/wiki/Graphics_pipeline):

Đối tượng được chuyển từ không gian thế giới 3 chiều tọa độ thành hệ tọa độ 3-D dựa trên vị trí và hướng của máy ảnh ảo. Điều này dẫn đến cảnh 3D gốc như được nhìn thấy từ góc nhìn của máy ảnh , được định nghĩa trong vùng được gọi là không gian mắt hoặc camera không gian. Phép biến đổi chuẩn hóa là nghịch đảo toán học của phép biến đổi xem và bản đồ từ hệ thống toạ độ tùy ý do người dùng chỉ định (u, v, w) cho hệ tọa độ kinh điển (x, y, z).

+0

Tôi chỉ đi sâu như hướng dẫn này, và có vẻ như tôi đang đi sâu! – newprogrammer

Các vấn đề liên quan