Đúc bóng thời gian thực trong trò chơi isometric 2D


15

Tôi đang viết một công cụ isometric 2d nhỏ trong C ++ và tôi đang cố gắng thực hiện đổ bóng theo thời gian thực. Tôi đã làm theo một cách tiếp cận đơn giản được mô tả trên trang này và đây là kết quả (ánh sáng nằm ở cùng vị trí so với khối màu vàng):

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

Kết quả là rất đẹp nhưng thiếu bóng trên tường và trên đỉnh của hình khối. Dưới đây là một ví dụ về giao diện của nó (Tôi đã vẽ các bóng được mong đợi bằng màu xanh lá cây):

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

Tất cả các hình khối được vẽ chỉ đơn giản là 3 hình tứ giác 2D nằm ở vị trí XY và có độ sâu Z (z = x + y). Tôi sử dụng OpenGL với một ma trận chỉnh hình (glOrtho). Bóng được vẽ bằng cách sử dụng bộ đệm stpson.

Tôi đang tìm kiếm các tài nguyên hoặc giải pháp sẽ giúp tôi hoàn thành việc thực hiện đổ bóng này.

Cảm ơn rất nhiều!


5
Liên kết của bạn đến "trang này" đang trỏ đến một hình ảnh chứ không phải một trang. Ngoài ra, tôi chỉ đoán ở đây, nhưng có thể dễ dàng hơn để giải quyết vấn đề đó trong 3D và chỉ chiếu máy ảnh theo phương pháp đối xứng.
Tetrad

Oups, bạn đã đúng, tôi đã sửa liên kết. Chắc chắn sẽ dễ dàng hơn với trình chiếu 3D nhưng 2D cũng có lợi thế của nó và tôi chắc chắn có giải pháp để thực hiện điều này trong 2D.
XPac27

Câu trả lời:


6

Đối với mái và tường, bạn có thể cố gắng xác định các giao điểm giữa các đoạn tường của bạn và các vùng bóng được tạo. Bạn cần hai lần hiển thị bóng của bạn. Đầu tiên người ta sẽ làm những gì bạn đang làm ngày hôm nay (trong bộ nhớ lưu trữ). Đèo thứ hai sẽ tính toán giao điểm của mái và tường. Giai đoạn cuối là kết xuất thực. DeadMG là sai, bạn có thể làm điều đó.

Lưu ý: đối với mái nhà bạn phải giao nhau giữa khu vực bóng và khu vực mái.


Cảm ơn bạn cho lời khuyên tốt! Nếu có thể tối ưu hóa đường chuyền thứ hai này bằng cách kiểm tra những bức tường nào sẽ được tính toán bằng cách sử dụng sản phẩm chấm của phân khúc của chúng so với các phân đoạn bóng tối. Tôi sẽ thử nó và gửi lại nếu nó hoạt động.
XPac27

Đã được một lúc nhưng cuối cùng tôi cũng có được nó nhờ vào những gợi ý của bạn! Tôi chỉ cần 2 phương thức hình học (một để biết liệu một điểm có nằm trong đa giác không và một để có giao điểm của hai đoạn). Tôi vẫn cần xử lý mái nhà nhưng có vẻ dễ biết. Bạn có thể xem kết quả trên video này và xem mã nguồn ở đây (tôi mới làm việc 1 ngày trên đó để có thể tối ưu hóa nó nhiều hơn).
XPac27

@ XPac27 thật tuyệt vời. Cám ơn vì đã chia sẻ.
tro999

0

Về cơ bản, những gì bạn đang tìm kiếm không thể được thực hiện. Bạn muốn chụp một loạt các vật thể 2D và để chúng tạo bóng như thể chúng là các vật thể 3D. Nếu bạn muốn có bóng 3D đầy đủ, bạn cần phải có các đối tượng 3D.


1
Nhưng đó không phải là đổ bóng 3d như trong câu hỏi. Bất kỳ bức tường nào ngăn chặn hoàn toàn tầm nhìn theo hướng đó, bạn không thể có các vật thể có chiều cao thay đổi.
yuriks

0

Giải pháp được mô tả là không đầy đủ 3d vì anh ta không cần giải pháp 3d đầy đủ. Nó sẽ giống như nhưng nó không phải là. Tạo bóng đổ phải được coi là giao điểm giữa âm lượng. Những gì anh ấy cần là ít phức tạp. Hãy nhớ (nếu bạn có kown) doom và doom như công cụ kết xuất. Tất cả xử lý đã được thực hiện trên hai chiều.


0

Cho rằng bạn muốn trò chơi này nhỏ, nhưng chỉ cần nói rằng việc thực hiện bóng tối hiện tại là đủ tốt?

Tôi thừa nhận rằng tôi đã không thấy điều này trong thực tế, nghĩa là tôi chưa thấy sự không hoàn hảo của bóng tối sẽ làm phiền như thế nào khi các trò chơi này chạy trực tiếp với các đối tượng động và nguồn sáng động nhưng đánh giá từ hình ảnh của bạn, tôi ' Tôi rất muốn nói "nó đủ tốt rồi, giờ hãy tập trung vào việc hoàn thành trò chơi". Nếu việc triển khai hiện tại xảy ra nhỏ và thực thi nhanh và khắc phục những gì bạn cho là có vấn đề sẽ biến mã lớn và chậm, tôi nghĩ bạn tốt hơn hết là đừng lo lắng về những cái bóng đó.

Tôi biết, tôi biết, đề nghị "đừng cố gắng giải quyết vấn đề" vì giải pháp cho một vấn đề có thể là một thực tiễn tồi. Tuy nhiên, tôi thực sự muốn nói rằng nó thực sự tốt như nó là nếu bạn muốn một dấu chân nhỏ cho mã của bạn.

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.