Tại sao chúng ta di chuyển thế giới thay vì máy ảnh?


87

Tôi nghe nói rằng trong một trò chơi OpenGL, những gì chúng ta làm để cho người chơi di chuyển không phải là di chuyển máy ảnh mà là di chuyển toàn bộ thế giới.

Ví dụ ở đây là trích xuất của hướng dẫn này: Ma trận OpenGL View

Trong cuộc sống thực, bạn đã quen với việc di chuyển máy ảnh để thay đổi chế độ xem của một cảnh nhất định, trong OpenGL thì ngược lại. Máy ảnh trong OpenGL không thể di chuyển và được xác định là nằm ở (0,0,0) đối diện với hướng Z âm. Điều đó có nghĩa là thay vì di chuyển và xoay camera, thế giới được di chuyển và xoay quanh camera để xây dựng chế độ xem phù hợp.

Tại sao chúng ta làm điều đó?


1
Một máy ảnh không đại diện cho một cái nhìn. Vì vậy, bạn biến đổi thế giới để có được hình chiếu mà bạn muốn. Khái niệm này thật kỳ lạ, nhưng nó thực sự có ý nghĩa ... theo một cách nào đó ... tôi nghĩ
Sidar

@sharethis, tôi đã cải thiện câu trả lời của mình với lời giải thích tốt hơn. Đã thêm phối cảnh chiếu với tùy chọn toán học và Máy ảnh 3D (Máy ảnh ảo). Có thể hữu ích cho bạn và những người khác.
Md Mahbubur Rahman

4
Điều này không thực sự đúng, vì cả hai thao tác (di chuyển máy ảnh hoặc các vật thể trên thế giới) đều đối xứng nhau, không có cách nào để biết hoạt động nào đã diễn ra. Bạn đang nghĩ về thế giới chuyển động của máy ảnh, nhưng cũng có người khác có thể hình dung máy ảnh di chuyển ngược về thế giới ... Được rồi, vì vậy bạn có thể di chuyển các vật thể tương đối với nhau, vì vậy một cách có thể trực quan hơn, nhưng không phải con người là "sai", cả hai cách hình dung tình huống đều tốt trong các tình huống khác nhau. Thường thì rất hữu ích khi nghĩ về cả hai.
dùng3728501

Câu trả lời:


72

Tại sao ?

Bởi vì, Máy ảnh đại diện cho chế độ xem chiếu.

Nhưng trong trường hợp Camera 3D (Camera ảo), camera sẽ di chuyển thay vì thế giới. Tôi đã thực hiện một lời giải thích chi tiết sau câu trả lời này.

Hiểu về mặt toán học

Chế độ xem chiếu di chuyển xung quanh không gian và thay đổi hướng của nó. Điều đầu tiên cần chú ý là hình chiếu mong muốn trên màn hình không thay đổi theo hướng xem.

Vì lý do này, chúng tôi chuyển đổi những thứ khác để có được hình chiếu mong muốn.

Hiểu từ http://opengl.org

Để xuất hiện việc di chuyển camera, ứng dụng OpenGL của bạn phải di chuyển cảnh với sự đảo ngược của chuyển đổi camera. nơi OpenGL có liên quan, không có máy ảnh. Cụ thể hơn, máy ảnh luôn được đặt ở tọa độ không gian mắt (0, 0, 0)

Hiểu từ http://open.gl

Cũng muốn chia sẻ các dòng sau từ Xem phần ma trận của http://open.gl/transformations

Để mô phỏng một biến đổi máy ảnh, bạn thực sự phải biến đổi thế giới với nghịch đảo của biến đổi đó. Ví dụ: nếu bạn muốn di chuyển máy ảnh lên, thay vào đó bạn phải di chuyển thế giới xuống.

Hiểu theo quan điểm

Trong thế giới thực, chúng ta thấy mọi thứ theo cách gọi là "phối cảnh".

Phối cảnh đề cập đến khái niệm rằng các vật thể ở xa hơn dường như nhỏ hơn các vật thể gần bạn hơn. Phối cảnh cũng có nghĩa là nếu bạn đang ngồi giữa một con đường thẳng, bạn thực sự thấy biên giới của con đường là hai đường hội tụ.

Đó là viễn cảnh. Phối cảnh là rất quan trọng trong các dự án 3D. Không có phối cảnh, thế giới 3D không giống như thật.

Mặc dù điều này có vẻ tự nhiên và rõ ràng, nhưng điều quan trọng là phải xem xét rằng khi bạn tạo kết xuất 3D trên máy tính, bạn đang cố gắng mô phỏng thế giới 3D trên màn hình máy tính, đó là bề mặt 2D.

Hãy tưởng tượng rằng đằng sau màn hình máy tính có một khung cảnh 3D thực sự và bạn đang xem nó qua "kính" của màn hình máy tính. Sử dụng phối cảnh, mục tiêu của bạn là tạo mã hiển thị những gì được "chiếu" trên "kính" màn hình này như thể có thế giới 3D thực sự đằng sau màn hình này. Nhắc nhở duy nhất là thế giới 3D này không có thật, nó chỉ là mô phỏng toán học của thế giới 3D.

Vì vậy, khi sử dụng kết xuất 3D để mô phỏng một cảnh trong 3D và sau đó chiếu cảnh 3D lên bề mặt 2D của màn hình của bạn, quá trình này được gọi là chiếu phối cảnh.

Bắt đầu bằng cách hình dung trực giác những gì bạn muốn đạt được. Nếu một đối tượng gần hơn với người xem, đối tượng phải có vẻ lớn hơn. Nếu đối tượng ở xa hơn, nó phải có vẻ nhỏ hơn. Ngoài ra, nếu một đối tượng đang di chuyển ra khỏi người xem, theo một đường thẳng, bạn muốn nó hội tụ về phía giữa màn hình, khi nó di chuyển ra xa hơn.

Dịch phối cảnh thành toán

Khi bạn xem hình minh họa trong hình dưới đây, hãy tưởng tượng rằng một đối tượng được định vị trong cảnh 3D của bạn. Trong thế giới 3D, vị trí của đối tượng có thể được mô tả là xW, yW, zW, đề cập đến một hệ tọa độ 3D có gốc tọa độ tại điểm mắt. Đó là nơi đối tượng thực sự được định vị, trong khung cảnh 3D ngoài màn hình.

nhập mô tả hình ảnh ở đây

Khi người xem theo dõi đối tượng này trên màn hình, đối tượng 3D được "chiếu" đến vị trí 2D được mô tả là xP và yP, tham chiếu hệ tọa độ 2D của màn hình (mặt phẳng chiếu).

Để đưa các giá trị này vào một công thức toán học, tôi sẽ sử dụng hệ tọa độ 3D cho tọa độ thế giới, trong đó trục x chỉ sang phải, y chỉ lên và các điểm z dương bên trong màn hình. Nguồn gốc 3D đề cập đến vị trí của mắt người xem. Vì vậy, kính của màn hình nằm trên mặt phẳng trực giao (ở góc phải) với trục z, tại một số z mà tôi sẽ gọi zProj.

Bạn có thể tính toán các vị trí được chiếu xP và yP, bằng cách chia các vị trí thế giới xW và yW, cho zW, như sau:

xP = K1 * xW / zW yP
= K2 * yW / zW

K1 và K2 là các hằng số có nguồn gốc từ các yếu tố hình học như tỷ lệ khung hình của mặt phẳng chiếu (khung nhìn của bạn) và "trường nhìn" của mắt bạn, có tính đến mức độ của góc nhìn rộng.

Bạn có thể thấy cách biến đổi này mô phỏng phối cảnh. Các điểm gần hai bên của màn hình được đẩy về phía trung tâm khi khoảng cách từ mắt (zW) tăng lên. Đồng thời, các điểm gần trung tâm (0,0) ít bị ảnh hưởng hơn bởi khoảng cách từ mắt và vẫn gần trung tâm.

Phân chia theo z này là "phân chia phối cảnh" nổi tiếng.

Bây giờ, hãy xem xét rằng một đối tượng trong cảnh 3D được định nghĩa là một chuỗi các đỉnh. Vì vậy, bằng cách áp dụng loại biến đổi này cho tất cả các đỉnh của hình học, bạn có thể đảm bảo rằng vật thể sẽ co lại một cách hiệu quả khi nó ở xa điểm mắt hơn.

Các trường hợp quan trọng khác

  • Trong trường hợp Máy ảnh 3D (Máy ảnh ảo), máy ảnh sẽ di chuyển thay vì thế giới.

Để hiểu rõ hơn về máy ảnh 3D, hãy tưởng tượng bạn đang quay một bộ phim. Bạn phải thiết lập một cảnh mà bạn muốn quay và bạn cần một máy ảnh. Để có được cảnh quay, bạn sẽ đi lang thang qua cảnh bằng máy ảnh của mình, chụp các đối tượng trong cảnh từ các góc và góc nhìn khác nhau.

Quá trình quay phim tương tự xảy ra với một máy ảnh 3D. Bạn cần một camera "ảo", có thể đi lang thang xung quanh cảnh "ảo" mà bạn đã tạo.

Hai phong cách chụp phổ biến liên quan đến việc quan sát thế giới qua đôi mắt của nhân vật (còn được gọi là máy ảnh của người thứ nhất) hoặc hướng máy ảnh vào nhân vật và giữ chúng trong tầm nhìn (được gọi là máy ảnh của người thứ ba).

Đây là tiền đề cơ bản của máy ảnh 3D: máy ảnh ảo mà bạn có thể sử dụng để chuyển vùng xung quanh cảnh 3D và hiển thị cảnh quay từ một góc nhìn cụ thể.

Hiểu không gian thế giới và xem không gian

Để mã hóa loại hành vi này, bạn sẽ hiển thị nội dung của thế giới 3D theo quan điểm của máy ảnh, không chỉ từ quan điểm hệ thống tọa độ thế giới hoặc từ một số quan điểm cố định khác.

Nói chung, một cảnh 3D chứa một tập các mô hình 3D. Các mô hình được định nghĩa là một tập hợp các đỉnh và hình tam giác, được tham chiếu đến hệ tọa độ riêng của chúng. Không gian trong đó các mô hình được xác định được gọi là không gian mô hình (hoặc cục bộ).

Sau khi đặt các đối tượng mô hình vào cảnh 3D, bạn sẽ chuyển đổi các đỉnh của các mô hình này bằng ma trận "biến đổi thế giới". Mỗi đối tượng có ma trận thế giới riêng xác định vị trí của đối tượng trên thế giới và cách định hướng.

Hệ thống tham chiếu mới này được gọi là "thế giới không gian (hay không gian toàn cầu). Một cách đơn giản để quản lý nó là liên kết một ma trận biến đổi thế giới với từng đối tượng.

Để thực hiện hành vi của máy ảnh 3D, bạn sẽ cần thực hiện các bước bổ sung. Bạn sẽ tham khảo thế giới, không phải đến thế giới, mà là hệ thống tham chiếu của chính máy ảnh 3D.

Một chiến lược tốt liên quan đến việc coi máy ảnh là một vật thể 3D thực tế trong thế giới 3D. Giống như bất kỳ đối tượng 3D nào khác, bạn sử dụng ma trận "biến đổi thế giới" để đặt máy ảnh ở vị trí và hướng mong muốn trong thế giới 3D. Ma trận biến đổi thế giới máy ảnh này biến đổi đối tượng máy ảnh từ góc quay ban đầu, hướng về phía trước (dọc theo trục z), sang vị trí thế giới thực (xc, yc, zc) và xoay vòng thế giới.

Hình dưới đây cho thấy mối quan hệ giữa hệ tọa độ Thế giới (x, y, z) và hệ tọa độ Xem (máy ảnh) (x ', y', z ').

nhập mô tả hình ảnh ở đây


5
Các câu trả lời khác là có. Bạn không cần phải chỉnh sửa chúng thành của riêng bạn.
Jesse Dorsey

1
@Noctrine, Cảm ơn. Tôi không biết làm thế nào để tạo liên kết trang.
Md Mahbubur Rahman

"Trong phần tiếp theo, bạn sẽ sử dụng công thức chiếu phối cảnh này vào ActionScript mà bạn có thể sử dụng trong các dự án Flash 3D của mình." Vì không có đề cập đến dự án Flash 3D trong câu hỏi ban đầu, điều này khiến tôi nghĩ rằng bạn đã sao chép nó từ một nơi khác, điều này tốt, nếu bạn trích dẫn nguồn của mình.
Gilles

@Gilles, Xin lỗi vì sai lầm của tôi. Tôi đã chỉnh sửa câu trả lời của tôi. Tôi đã chuẩn bị câu trả lời nghiên cứu một số nguồn. Và cảm ơn bạn rất nhiều như bạn đã chỉ ra. :)
Md Mahbubur Rahman

Lưu ý rằng glMatrixMode()và một vài chức năng nữa được đề cập trong: eng.utah.edu/~cs6360/Lectures/frustum.pdfopengl.org/archives/resource/faq/technical/viewing.htm không được chấp nhận. Tuy nhiên mô tả toán học vẫn đúng và hữu ích.
patryk.beza

28

Câu trả lời của Mahbubar R Aaman khá chính xác và các liên kết mà anh ta cung cấp giải thích chính xác về toán học, nhưng trong trường hợp bạn muốn có một câu trả lời ít mang tính kỹ thuật / toán học hơn, tôi sẽ thử một cách tiếp cận khác.

Vị trí của các đối tượng trong thế giới thực và thế giới trò chơi được xác định với một số hệ tọa độ. Một hệ tọa độ mang lại ý nghĩa cho các giá trị vị trí. Nếu tôi nói với bạn rằng tôi đang ở "100,50" rằng sẽ không giúp bạn trừ khi bạn biết những gì những con số có ý nghĩa (là họ dặm, vĩ độ và kinh độ, vv). Nếu chúng là tọa độ Descartes (loại tọa độ "bình thường"), bạn cũng cần biết chúng có liên quan đến nguồn gốc nào; nếu tôi chỉ nói "Tôi là 100 feet về phía Đông", bạn cần biết "Phía đông của cái gì ", được gọi là nguồn gốc tọa độ.

Có một cách dễ dàng để nghĩ về điều này. Bạn có thể nói với ai đó "nhà ga xe lửa cách 3 km về phía bắc và 1,5 km về phía đông của góc tây nam của thành phố." Bạn cũng có thể nói với ai đó "ga tàu cách 1 dặm về phía bắc nơi tôi đang ở." Cả hai tọa độ đều đúng và xác định vị trí của cùng một mốc, nhưng chúng được đo từ một nguồn gốc khác nhau và do đó có các giá trị số khác nhau.

Trong một ứng dụng 3D, thường có một hệ tọa độ "thế giới", được sử dụng để thể hiện vị trí của máy ảnh và các đối tượng trong trò chơi, được đo bằng tọa độ Cartesian với một số nguồn gốc do nhà thiết kế tùy ý (nói chung là trung tâm của mọi cấp độ hoặc bản đồ bạn đang chơi). Các hệ tọa độ khác tồn tại trong trò chơi, chẳng hạn như hệ tọa độ Cartesian với camera ở gốc. Bạn có thể xác định bất kỳ hệ tọa độ mới nào theo bất kỳ cách nào bạn muốn bất cứ lúc nào bạn muốn và điều này được thực hiện rất thường xuyên trong mô phỏng 3D để làm cho mọi thứ dễ dàng hơn cho toán học.

Thuật toán thực sự kết xuất một hình tam giác riêng lẻ trên màn hình của bạn hoạt động theo một cách cụ thể và do đó không thuận tiện khi làm việc trực tiếp với tọa độ thế giới khi kết xuất. Toán học không thực sự được thiết lập để đối phó với thông tin như "đối tượng là 100 đơn vị ở bên phải trung tâm của thế giới". Toán học thay vì muốn làm việc với "đối tượng ở ngay trước máy ảnh và cách xa 20 đơn vị". Do đó, một bước bổ sung được thêm vào toán học kết xuất để nhận các vị trí trong thế giới đối tượng và dịch chúng từ hệ thống tọa độ camera.

Tất nhiên máy ảnh có một vị trí và định hướng là tốt. Vì vậy, nếu một đối tượng ở vị trí 20,100,50 và máy ảnh ở vị trí 10,200, -30, vị trí của đối tượng so với máy ảnh là 10,100,80 (vị trí của đối tượng trừ vị trí của máy ảnh). Khi camera di chuyển trong trò chơi, vị trí camera đó trong tọa độ thế giới sẽ được di chuyển chính xác như bạn mong đợi.

Lưu ý rằng các đối tượng không được di chuyển; họ đang ở đúng nơi họ đã ở trước đây. Tuy nhiên, vị trí của họ hiện đang được thể hiện liên quan đến một nguồn gốc tọa độ khác nhau. Tọa độ thế giới của đối tượng chỉ di chuyển nếu đối tượng tự di chuyển, nhưng tọa độ camera của nó cũng thay đổi bất cứ khi nào máy ảnh di chuyển, vì chúng liên quan đến vị trí của máy ảnh.

Cũng lưu ý rằng mô tả từ hướng dẫn mà bạn trích dẫn là một lời giải thích đơn giản và không nhất thiết là một mô tả chính xác về những gì OpenGL làm. Tôi không nghĩ rằng tác giả của bài báo đã không hiểu điều đó; tác giả chỉ cố gắng sử dụng một sự tương tự đơn giản hóa mà trong trường hợp này gây ra sự nhầm lẫn thay vì loại bỏ nó.

Nếu nó giúp hiểu thêm lý do tại sao toán học quan tâm đến tọa độ camera, hãy thử bài tập này: giơ hai bàn tay chạm ngón cái và ngón trỏ lại với nhau để tạo thành một hình chữ nhật (hãy gọi đó là "khung nhìn") và nhìn xung quanh căn phòng bạn trong. Tìm một đối tượng và nhìn vào nó, sau đó nhìn xung quanh nó nhưng không nhìn thẳng vào nó. Khi bạn làm như vậy, hãy tự hỏi, "đối tượng trong khung nhìn của tôi ở đâu?" Đối tượng đó có một số kinh độ và vĩ độ trong thế giới thực cụ thể mà bạn có thể sử dụng để xác định vị trí của nó trên Trái đất, nhưng điều đó không cho bạn biết bất cứ điều gì về những gì bạn đang nhìn thấy. Nói rằng "đối tượng nằm ở góc trên bên trái của chế độ xem của tôi và có vẻ cách đó khoảng 2 mét" cho bạn biết khá nhiều. Bạn đã tạo ra một hệ tọa độ liên quan đến đầu của bạn và hướng bạn ' Đang tìm kiếm mà xác định nơi một đối tượng theo tầm nhìn của bạn. Về cơ bản, đó là phần mà trình tạo hình tam giác của OpenGL / Direct3D cần, và đó là những gì toán học yêu cầu các vị trí và hướng đối tượng được chuyển đổi từ tọa độ thế giới thuận tiện của chúng thành tọa độ camera.


Mặc dù đối với tôi lời giải thích toán học là rõ ràng và dễ hiểu, đây cũng là một lời giải thích tuyệt vời! Tôi tin rằng bạn đã giúp nhiều người khác với cùng một câu hỏi.
danijar

+1 để làm rõ máy ảnh di chuyển hay thế giới chỉ là một chức năng mà hệ thống tọa độ mà bạn đang nói đến.
David Moles

11

Chỉ cần thêm vào hai câu trả lời (xuất sắc) khác về một số chi tiết tiếp theo về một điểm mà Mahbubur R Aaman đã chạm vào: "không có máy ảnh".

Điều này khá đúng và thể hiện sự thất bại của sự tương tự "máy ảnh" thông thường, bởi vì "máy ảnh" không thực sự tồn tại. Điều quan trọng là phải nhận ra rằng sự tương tự của máy ảnh chính xác là như vậy - một sự tương tự. Nó không mô tả (hoặc giả vờ mô tả) cách mọi thứ thực sự hoạt động đằng sau hậu trường.

Vì vậy, hãy xem (ý định chơi chữ) nó như là một phương tiện giúp bạn hoàn thành công việc này nếu nó mới đối với bạn, nhưng luôn nhớ rằng đó chỉ là một người trợ giúp chứ không phải bất kỳ mô tả nào về cách mọi thứ thực sự diễn ra.

Bây giờ, bạn có hai lớp đối tượng có liên quan ở đây: điểm nhìn và mọi thứ trên thế giới. Bạn muốn di chuyển điểm xem gần hơn với một số đối tượng, nhưng đối với chuyển động này, kết quả cuối cùng là giống nhau cho dù chế độ xem di chuyển gần hơn với các đối tượng hay liệu các đối tượng di chuyển gần hơn với chế độ xem. Tất cả những gì bạn đang làm là thay đổi khoảng cách giữa họ; vì khoảng cách hiện tại là X và bạn muốn khoảng cách mới là Y, nên bạn không di chuyển, chỉ cần sau khi di chuyển, khoảng cách mới là Y. Vì vậy, bạn không thực sự di chuyển, bạn Chỉ là thay đổi một khoảng cách. (Tôi không có ý vượt qua tất cả Einstein trong ... thành thật này!)

Nhưng, tuy nhiên, vì máy ảnh không tồn tại, điều duy nhất bạn có thể thay đổi khoảng cách là các vật thể. Vì vậy, bạn thay đổi khoảng cách của các đối tượng và đi ra kết quả rất giống nhau. Vì tất cả các đối tượng đi qua biến đổi nào , đây không phải là nhiều hay ít tốn kém.

Một giải thích toán học đơn giản hơn có thể giúp nhiều hơn. Hãy giả vờ rằng tất cả các tọa độ là 1D - điểm quan sát là 0, các đối tượng của bạn ở mức 4 và bạn muốn điểm quan sát đến 3. Điều đó có nghĩa là khoảng cách giữa chúng sẽ thay đổi từ 4 (4 - 0) thành 1 (4 - 3). Nhưng vì máy ảnh không tồn tại nên bạn không thể thay đổi 0; nó luôn luôn là 0. Vì vậy, thay vì thêm 3 thành 0 (mà bạn không thể làm được), bạn trừ 3 từ 4 (bạn có thể làm được) - các đối tượng hiện ở mức 1 và kết quả cuối cùng là khoảng cách rất giống nhau quan điểm và đối tượng là 1.


Mặc dù máy ảnh không tồn tại như vậy, bạn vẫn có thể tính toán vị trí của nó trước khi chuyển đổi. Tuy nhiên, trong một số trường hợp (phép chiếu song song không trục) bạn sẽ kết thúc với nhiều hơn một trong các tọa độ thông thường "ở vô cực" (dương hoặc âm), ít hữu ích hơn so với ma trận biến đổi.
Martin Sojka

7

Di chuyển máy ảnh hoặc di chuyển thế giới là hai lựa chọn hợp lệ như nhau, cả hai đều tương đương nhau. Vào cuối ngày, bạn sẽ thay đổi từ hệ thống tọa độ này sang hệ thống khác. Các câu trả lời trên là chính xác nhưng theo cách bạn hình dung thì đó là hai mặt của cùng một đồng tiền. Các biến đổi có thể đi theo bất kỳ cách nào - chúng chỉ là nghịch đảo của nhau.

Một phần của quá trình kết xuất không chuyển đổi từ tọa độ thế giới sang tọa độ mắt. Tuy nhiên, một cách dễ dàng để mô hình hóa điều này là với một đối tượng camera ảo trong ứng dụng của bạn. Máy ảnh có thể đại diện cho cả ma trận chiếu (chịu trách nhiệm cho hiệu ứng phối cảnh) và cả ma trận chế độ xem được sử dụng để chuyển đổi từ không gian thế giới sang không gian mắt.

Vì vậy, mặc dù trình tạo bóng đỉnh sử dụng ma trận khung nhìn để thay đổi tọa độ hình học của bạn thành không gian mắt, nhưng sẽ dễ dàng hơn khi nghĩ về một đối tượng máy ảnh di chuyển xung quanh thế giới ảo của bạn khi nó di chuyển tính toán lại ma trận xem.

Vì vậy, trong ứng dụng của bạn, bạn di chuyển máy ảnh theo thế giới, cập nhật ma trận chế độ xem của người quay, chuyển ma trận chế độ xem mới sang trình tạo bóng đỉnh như một bộ đồng phục hoặc một phần của khối, hiển thị cảnh của bạn.


5

Thay vào đó tôi sẽ khẳng định rằng đó là một sự tương tự thiếu sót. Về cơ bản nhất, "di chuyển máy ảnh" và "di chuyển thế giới" hoàn toàn giống nhau về mặt toán học - chỉ là việc di chuyển thế giới có phần dễ dàng hơn để suy nghĩ về khái niệm, đặc biệt là khi chuyển đổi thứ bậc. Về cơ bản, bạn chỉ di chuyển thế giới xung quanh máy ảnh khi bạn dịch các đỉnh thế giới vào không gian tọa độ của máy ảnh - nhưng đây là một phép biến đổi affine có thể đảo ngược.

Tuy nhiên, khi bạn bắt đầu đưa quyết tâm về khả năng hiển thị vào hỗn hợp, điều LAST bạn muốn làm là dịch toàn bộ thế giới xung quanh máy ảnh. Thay vào đó, trong hầu hết các trường hợp (đặc biệt là trường hợp cổ điển của các BSP cố định hoặc tương tự), bạn sẽ sử dụng vị trí của máy ảnh trên thế giới để truy vấn các cấu trúc khả năng hiển thị của bạn để xác định những thứ có khả năng hiển thị và sau đó chỉ dịch THOSE những thứ vào không gian phối hợp của máy ảnh.


4

Tôi không nghĩ rằng tuyên bố đó là đúng về mặt phân loại, vì người ta hiếm khi "di chuyển" tọa độ thế giới trong một trò chơi, nhưng thực sự thay đổi tọa độ của máy ảnh ảo.

Khái niệm máy ảnh thực sự làm gì, biến đổi sự thất vọng khi xem hữu hạn - đó là một kim tự tháp bị cắt cụt với 8 điểm góc (hoặc được xác định bởi giao điểm của 6 mặt phẳng) thành một khối đơn vị, đại diện cho không gian clip trong giai đoạn cuối của openGL kết xuất đường ống.

Theo nghĩa đó, thế giới không bị di chuyển mà người ta chỉ tính toán tọa độ thế giới trong hệ tọa độ của không gian clip.


2

Di chuyển máy ảnh hoặc di chuyển thế giới là hai lựa chọn hợp lệ như nhau (và cả hai đều đúng). Vào cuối ngày, chúng ta sẽ thay đổi từ hệ thống tọa độ này sang hệ thống khác. Các biến đổi có thể đi theo bất kỳ cách nào - chúng chỉ là nghịch đảo của nhau.


2

Rất nhiều câu trả lời tốt ở đây. Tôi sẽ cố gắng không lặp lại bất kỳ trong số họ. Đôi khi, việc nghĩ về máy ảnh sẽ dễ dàng hơn, như cách Direct3D thực hiện (lưu ý: chưa chơi với nhiều bài 9.0c)

"Di chuyển thế giới" giống như theo nghĩa Futurama mà ai đó đã trích dẫn là một cách rất tốt để xem xét nó ("Các động cơ không di chuyển con tàu chút nào. Con tàu giữ nguyên vị trí và động cơ di chuyển vũ trụ xung quanh nó! "). Điều này thực sự khá phổ biến đối với các trò chơi 2D. Bạn thực sự có một chế độ xem mà bạn sẽ khó điều chỉnh và đôi khi đó là RAM video hoặc Cửa sổ giao diện người dùng. Nếu OpenGL làm điều đó vì những lý do đó, eh, thật khó để nói.

Bạn chắc chắn có thể nghĩ về chuyển động 2D về mặt máy ảnh, và chỉ quá trình suy nghĩ đó có thể giúp bạn dễ dàng tìm ra các hiệu ứng.


1
Muộn, nhưng câu trả lời tốt đẹp, quá!
danijar

Cảm ơn! Tôi luôn thấy rằng việc thêm vào cuộc thảo luận trên các trang được tìm thấy thông qua một công cụ tìm kiếm hóa ra lại được đánh giá cao, đặc biệt là nếu thông tin này hữu ích hoặc thú vị
Joe Plante

2

Dường như có rất nhiều sự hiểu lầm ở đây, bắt đầu từ những người viết tài liệu OpenGL ...

Hãy để tôi nhanh chóng khôi phục sự tỉnh táo của bạn: thế giới không di chuyển , nó vẫn ở lại. Bất cứ ai cố gắng thực hiện thế giới khi di chuyển xung quanh người chơi sẽ nhanh chóng gặp rắc rối trong chế độ nhiều người chơi. Chưa kể đến việc cập nhật vị trí của hàng triệu (hoặc hàng tỷ) vật thể trên thế giới trong mỗi lần di chuyển của người chơi sẽ tạo ra một trò chơi khá chậm ...

Vì vậy, những gì thực sự xảy ra ở đó, và những gì với trích dẫn?

Chà, trước hết bạn cần hiểu khái niệm hệ tọa độ. Nói chung, bạn chọn một điểm trên thế giới và tuyên bố đó là "điểm gốc", đó là một điểm có tọa độ (0,0,0). Bạn cũng chọn ba hướng "chính" mà bạn gọi là X, Y và Z. Rõ ràng, có nhiều cách để gán hệ tọa độ. Thông thường có một "hệ tọa độ thế giới", trong hệ thống này, thế giới đứng yên (ít nhiều). Trong một trò chơi, hệ thống này sẽ được chọn bởi nhà thiết kế cấp.

Bây giờ, cũng thuận tiện để xem xét một hệ tọa độ khác, gắn liền với mắt của người chơi. Trong hệ tọa độ này, người chơi luôn ở tọa độ (0,0,0) và thế giới di chuyển và xoay quanh anh ta. Do đó, trích dẫn là chính xác nếu bạn hiểu là được thực hiện trong hệ thống tọa độ của người chơi .

Tuy nhiên, thế giới không hoạt động theo tọa độ của người chơi, nó hoạt động theo tọa độ của thế giới. Và trong đó có hai hệ tọa độ có liên quan, luôn có cách biến đổi một loại tọa độ thành loại khác. Trong OpenGL, điều này được thực hiện bằng cách sử dụng ma trận xem 4 x 4.

Cuối cùng, khi một người chơi di chuyển, thế giới vẫn đứng yên, trong khi người chơi được di chuyển. Đây là tọa độ thế giới, cách các đối tượng được lưu trữ trong trò chơi của bạn. Người chơi cũng có một camera quan sát được liên kết với anh ta, và máy ảnh này di chuyển tương tự trên khắp thế giới (bất chấp những gì các tài liệu OpenGL dường như đang nói). Tuy nhiên, để hiển thị thế giới trên màn hình của người dùng, tọa độ của tất cả các đối tượng có thể nhìn thấy được dịch vào hệ tọa độ của người chơi bằng ma trận biến đổi, sau đó chiếu bổ sung được áp dụng để tạo hiệu ứng phối cảnh. Trong hệ thống tọa độ của người chơi này, thế giới thực sự xuất hiện để di chuyển xung quanh người chơi. Nhưng đó chỉ là một cách suy nghĩ cực kỳ vô ích và khó hiểu về nó.


" bắt đầu từ những người viết tài liệu OpenGL " Phải, bởi vì tôi chắc rằng các nhà sản xuất OpenGL rõ ràng quá ngu ngốc để hiểu sự khác biệt giữa cách trình bày về một thế giới (tất cả đều quan tâm đến OpenGL) và đại diện về khái niệm của thế giới đó ( đó không phải là thứ mà OpenGL đề cập đến).
Nicol Bolas

" Nhưng đó chỉ là một cách suy nghĩ cực kỳ vô ích và khó hiểu về nó. " Đó cũng là sự thật . Và sự thật luôn hữu ích hơn một lời nói dối. Bởi vì sớm hay muộn, lời nói dối đó sẽ bắt kịp bạn và bạn sẽ phải đối mặt với sự thật.
Nicol Bolas
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.