Animal Crossing có cách cuộn bản đồ thế giới độc đáo: Khi nhân vật di chuyển xuống, thế giới cuộn quanh và trên đỉnh, giống như nó bị mắc kẹt vào một ống các tông:
Video này cho thấy cách nó di chuyển.
Làm thế nào tôi có thể tạo hiệu ứng này?
Animal Crossing có cách cuộn bản đồ thế giới độc đáo: Khi nhân vật di chuyển xuống, thế giới cuộn quanh và trên đỉnh, giống như nó bị mắc kẹt vào một ống các tông:
Video này cho thấy cách nó di chuyển.
Làm thế nào tôi có thể tạo hiệu ứng này?
Câu trả lời:
Tôi đã thử nghiệm một chút sau khi chơi Deathspank, có hiệu quả tương tự. Mặc dù tôi chưa bao giờ đào sâu vào nó đủ để xem liệu nó có thể được điều chỉnh để hoạt động siêu tốt hay không, một khả năng là chỉ sửa đổi các mục trong trình tạo bóng đỉnh của bạn dựa trên độ sâu. Một ánh xạ chức năng cos (độ sâu) để sửa đổi trục Y hoạt động. Bạn có thể điều chỉnh nó sao cho thế giới không chỉ rơi xuống từ xa mà còn nếu nó ở gần hơn một số độ sâu, khiến thế giới cảm thấy đặc biệt tròn trịa. Bạn có thể làm tương tự cho giá trị trục X để làm cho nó có vẻ hình cầu hơn. Tôi không chắc đây có phải là cách những trò chơi như vậy thực sự làm điều đó không; các thí nghiệm của tôi đã cho kết quả không đạt yêu cầu nhưng tôi đã không chơi với các tỷ lệ nhiều, vì vậy có thể đơn giản như thay đổi tỷ lệ giảm để làm cho nó tốt hơn.
Có vẻ như nó chỉ lấy một "thế giới phẳng" và ánh xạ tới tọa độ hình trụ . Chủ yếu bao bọc thế giới trên một hình trụ. Tôi đã làm một cái gì đó tương tự với một thế giới phẳng, nhưng tôi bọc nó vào một quả cầu:
Cách tôi đã làm cho một quả cầu tương tự như cách bạn làm nó cho một hình trụ. Chọn một bán kính phù hợp (hoặc "rho" theo tọa độ hình trụ) cho thế giới của bạn. Đối với mỗi đỉnh, lấy tọa độ XZ của thế giới của bạn (giả sử Y là chiều cao), sau đó chuyển sang tọa độ hình trụ bằng XZ và bán kính cộng với Y. Nếu bạn không thêm Y, bạn sẽ có một hình trụ phẳng. Sau đó chuyển đổi trở lại tọa độ Cartesian để vẽ trong trò chơi.
Bạn muốn đi từ một thế giới phẳng, đến một thế giới hình trụ.
Một vòng quay quanh trục x (theo tọa độ đồng nhất) trông như thế này:
| 1 0 0 0 |
Rx = | 0 ca -sa 0 |
| 0 sa ca 0 |
| 0 0 0 1 |
Ở đâu:
ca = cos(angle) and sa = sin(angle)
Để tính góc, nhìn vào hình ảnh. Số pi / 2 hủy bỏ và bạn còn lại:
angle = offset_from_character.z - radius
Ngoài ra, nhìn vào hình ảnh. Góc của điểm chiếu phụ thuộc vào khoảng cách ngang từ ký tự, khoảng cách từ quả cầu phụ thuộc vào phương thẳng đứng.
new_position = character_position - vec3(0,radius,0) + Rx * vec3(0,radius+_old_position.y,0)
hãy chắc chắn để loại bỏ những thứ ở phía chân trời, nếu không cả thế giới sẽ bao bọc xung quanh.
Tuyên bố miễn trừ trách nhiệm: Tôi chưa thử nghiệm điều này và tôi không phải là chuyên gia toán học, nhưng câu trả lời là như thế này. Ai đó làm ơn sửa tôi nếu tôi sai.