Làm cách nào để kết xuất gương hoặc các bề mặt phản chiếu khác?


16

Tôi chỉ tự hỏi làm thế nào để tạo ra một tấm gương trong một trò chơi 3D? Gợi ý của tôi là / là theo dõi các tia, đánh vào vật thể "gương" sau đó vẽ một hình ảnh của một cam thứ hai lên đối tượng "gương" nằm ở "điểm" gương của máy ảnh gốc bằng cách sử dụng mặt chạm của đối tượng gương như mặt phẳng phản chiếu.

Chúng ta sẽ phải sử dụng một tia tới từ trung tâm của máy ảnh gốc để xác định điểm mà tâm của tầm nhìn nằm trên mặt phẳng gương.


1
Bạn có muốn có một bản phác thảo / bản vẽ "ý tôi là thế nào" không?
daemonfire300

Bạn có thể thử đăng bài này tại stackoverflow.com vì nó không liên quan trực tiếp đến phát triển trò chơi; có lẽ có nhiều chuyên gia đồ họa hơn có thể giúp bạn.
Ricket

Câu trả lời:


14

Nếu bạn đang sử dụng OpenGL, phần 9 Câu hỏi thường gặp về OpenGL: Các biến đổi bao gồm chính xác cách thực hiện việc này. Và không, nó không liên quan đến raytracing, vì đó là cách rất không hiệu quả (nhưng chất lượng cao) để thực hiện điều này.

9.170 Làm cách nào để kết xuất gương?

Đây là những gì mục nhập FAQ nói và mã ví dụ minh họa:

  • Thiết lập một ma trận xem phản ánh. Làm điều này cho các gương căn chỉnh trục được giải thích trong đoạn thứ hai.
  • Vẽ cảnh
  • Khôi phục ma trận xem và xóa bộ đệm sâu
  • Kết xuất cảnh một lần nữa; hình học gương thực tế trong cảnh này phải mờ hoặc hoàn toàn trong suốt, để hiển thị thông qua cảnh được nhân đôi trước đó.

Rõ ràng là có rất nhiều chỗ để tối ưu hóa. Khi hiển thị cảnh được phản chiếu, có lẽ bạn nên loại bỏ càng nhiều càng tốt, vì gương thường nhỏ và việc loại bỏ màn hình mặc định sẽ không ảnh hưởng đến hình học trên màn hình nhưng không nhìn thấy qua gương. Bạn cũng có thể chỉ hiển thị một phiên bản đơn giản của cảnh qua gương. Đối với các hiệu ứng và để che khuất người dùng nhận thấy chất lượng giảm, bạn có thể áp dụng trình đổ bóng (ví dụ: làm mờ hoặc có thể sáng / rửa sạch) khi bạn thực hiện kết xuất được nhân đôi.

Tôi tưởng tượng, nếu bạn đang sử dụng DirectX, quy trình sẽ giống như vậy.


3
Một cách khác, nếu bạn có nhiều bộ nhớ hơn thời gian kết xuất, chỉ đơn giản là phản ánh hình học thế giới của bạn thông qua gương trong trình chỉnh sửa 3D của bạn, sau đó bạn có thể sửa đổi nó để trông giống như bạn muốn (thực thi các mức mip thấp hơn, v.v.). Chúng tôi đã làm điều này trên PS1, trong đó các công cụ ngồi trên sàn sáng bóng được sao chép / đảo ngược dưới lòng đất và bản thân sàn được hiển thị bán trong suốt.
dash-tom-bang

Lưu ý rằng mã mẫu đề cập đến đặc tả OpenGL không dùng nữa. Tuy nhiên, khái niệm này là phổ quát và có lẽ có thể được áp dụng tương tự bằng cách sử dụng thông số kỹ thuật OpenGL mới nhất .
patryk.beza 7/12/2015
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.