Làm cách nào tôi có thể triển khai đèn & bóng trong bản đồ 2d nhiều lớp?


11

Tôi đang trong quá trình viết một trò chơi isometric từ đầu, và tôi muốn biết làm thế nào / nếu tôi có thể thêm ánh sáng và bóng tối.

Mã tôi có cho đến nay có thể được tìm thấy ở đây , nhưng đủ để biết rằng ngay bây giờ , các bản đồ là các mảng 3d đơn giản của các giá trị đúng / sai . Đây là một bức ảnh của môi trường:Ảnh chụp màn hình của tilemap nhiều lớp

Nếu nó là một lớp duy nhất thì nó sẽ được chuyển thẳng. Tôi có thể hiểu raycasting đơn giản trong 2d là bắt buộc.

Tuy nhiên, do bản đồ của tôi có nhiều cấp độ cao cũng như các khu vực giống như hang động, tôi thực sự không biết làm thế nào để thực hiện các bóng tối thuyết phục cho nó. Có lẽ một giải pháp cho mỗi khối là cách thực tế duy nhất?


Bạn đang tìm kiếm ánh sáng nướng sẵn hoặc năng động? Có phải các khu vực giống như hang động của thành phố này đã bị cắt ngang nếu người chơi bước vào, hay ánh sáng cũng cần phải xem xét trần nhà? Bạn có mong đợi mỗi ô sẽ là nhị phân sáng / tối hoặc có một số loại giá trị phân số không?
Anko

1
@Anko Tôi thích một cái gì đó phân số, như 0 - 1.1 (đối với các khu vực quá sáng như vụ nổ, v.v.), nhưng nó có thể chỉ đơn giản là dựa trên khối, không có nội suy thực sự hoặc bất cứ điều gì tương tự. Tôi thực sự muốn nó năng động, và hỗ trợ nhiều đèn. Và trong khi các khu vực "giống như hang động" / mái nhà sẽ được hiển thị cắt đi, thì thuật toán sẽ cần phải xem xét các khối không được hiển thị khi tính toán ánh sáng. Ví dụ, nếu bạn đi bộ trong một ngôi nhà, các khối mái nhà sẽ biến mất, nhưng nó vẫn nên râm mát bên trong.
Danie Clawson

Nếu bạn tìm kiếm một giải pháp như thế với hang động và chiều cao, có vẻ như bạn không có gì về 2D. Bạn có thể đang tìm kiếm một giải pháp 3D đầy đủ, ngay cả khi máy ảnh luôn luôn nhìn về hướng Bắc-45 độ. Bạn nên nhìn vào các kỹ thuật như stprint-bóng hoặc tương tự.
Adrian Maire

Tôi thứ hai @AdrianMaire bạn sẽ cần thực hiện các phép tính 3d phù hợp nhưng thực hiện một số phím tắt nếu không có phép nội suy trên các mặt của "ô vuông". Nếu bạn không thực hiện phép nội suy, có lẽ bạn có thể sử dụng tia.
NeomerArcana

Tôi không có không gian tâm trí ngay bây giờ để tiêu hóa nó thành một câu trả lời, nhưng tôi chỉ vấp vào bài đăng trên blog này về xác định tầm nhìn cho địa hình chiều cao . Nghe có vẻ giống như những gì bạn đang tìm kiếm.
Anko

Câu trả lời:


1

Tôi có thể khuyên bạn nên để bóng 2d hoạt động trước không, ngay cả khi nó chỉ ở mức độ mà hình đại diện của bạn hiện đang bật. Sẽ dễ dàng hơn để bắt đầu nhìn vào mã theo cách đó và làm cho nó hoạt động.

Tôi đã thực hiện các bóng trong bản đồ gạch 2d theo một số cách. Một phương pháp tạo bóng mà tôi thấy được mô tả bởi Eric Lippert tại Microsoft hoạt động khá tốt.

Và một cách khác, lần đầu tiên tôi đã làm điều này, tôi đã nhìn vào loại điều này là quét trực tiếp các ô có thể nhìn thấy và các cạnh của gạch và tạo ra các cạnh (và có thể là các góc iirc) mô tả cảnh ở số cạnh thấp nhất. Sau đó, bạn có thể loại bỏ các cạnh bị ẩn và hình thành bất kỳ tính năng đổ bóng tùy chỉnh nào như bóng lõm nếu bạn muốn hiển thị một chút tường. Sau đó tạo hình học bóng của bạn (chiếu bóng chiếu?) Và hiển thị nó trên đầu trang.

Nhưng nếu tôi cố gắng đưa ý tưởng đó lên 3d, việc thực hiện nó trong 3d trở nên dễ dàng hơn. Trong khi phương pháp được mô tả bởi Eric Lippert có lẽ có thể được chuyển đổi thành 3d. Nhưng tôi nghĩ rằng bạn sẽ thấy rằng làm điều đó trong 3d là tốn kém. Có lẽ hãy xem mã nguồn cho Brogue là tốt. Nó có thể có một triển khai hiệu quả hơn cho khả năng hiển thị / đổ bóng 2d.

Chúc may mắ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.