Làm cách nào tôi có thể xác định ô hiển thị đầu tiên trong phối cảnh đẳng cự?


7

Tôi đang cố gắng hiển thị phần có thể nhìn thấy của bản đồ đẳng cự hình kim cương. Hệ tọa độ "thế giới" là hệ thống 2D Cartesian, với tọa độ tăng theo đường chéo (về mặt hệ tọa độ xem) dọc theo các trục. Các tọa độ "xem" chỉ đơn giản là độ lệch chuột so với góc trên bên trái của chế độ xem.

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

Thuật toán kết xuất của tôi hoạt động bằng cách vẽ các đường chéo, bắt đầu từ góc trên bên phải của chế độ xem và di chuyển theo đường chéo sang phải và xuống, tiến tới hàng tiếp theo khi đến cạnh bên phải. Khi vòng lặp kết xuất đến góc dưới bên trái, nó dừng lại.

Có các chức năng để chuyển đổi một điểm từ tọa độ xem sang tọa độ thế giới và sau đó sang tọa độ ánh xạ.

Mọi thứ hoạt động khi kết xuất từ ​​ô 0,0, nhưng khi chế độ xem cuộn quanh kết xuất cần bắt đầu từ một ô khác. Tôi không thể tìm ra cách xác định gạch nào gần góc trên bên phải nhất.

Hiện tại tôi chỉ đơn giản là chuyển đổi tọa độ của góc trên bên phải sang tọa độ bản đồ. Điều này hoạt động miễn là gốc tọa độ xem (góc trên bên phải) ở bên trong thế giới, nhưng khi tiếp cận các cạnh của bản đồ, tọa độ ô bắt đầu rõ ràng trở nên không hợp lệ.

Tôi đoán điều này sôi lên khi hỏi "làm thế nào tôi có thể tìm thấy giao điểm giữa trục X thế giới và trục X xem?"


đưa ra một đại diện bằng hình ảnh của vấn đề là thực sự có giá trị ... bạn có thể làm điều đó không?
Ayyappa

Bạn đã thử giải quyết nó bằng các công thức trong Phép chiếu Isometric trên wiki chưa?
dùng712092

@ user712092: Có, tôi đang sử dụng ma trận 4x4 để chuyển đổi giữa không gian xem và không gian thế giới. Điều đó hoạt động, nhưng vấn đề là làm thế nào để tính tọa độ x, y cho ô gần nhất với cạnh trên bên phải của chế độ xem.
alekop

@Man With Steel Nerves: Tôi sẽ đăng ảnh chụp màn hình nhưng SO sẽ không cho phép tôi vì danh tiếng thấp của tôi. Nhưng hình ảnh một viên kim cương lớn được kẹp bên trong một hình chữ nhật nhỏ hơn.
alekop

a) Tải hình ảnh lên trang web lưu trữ hình ảnh và chèn url của nó vào đó. b) Nhiều url hình ảnh có thể nằm trên một url pastebin . c) Chèn liên kết văn bản "Văn bản được bật trên pastebin với hậu tố Lxzygtv9". Bạn có thể hình ảnh đó sau; hoặc ai đó khác có thể thêm hình ảnh ngay bây giờ có thể (tôi dường như có quyền chỉnh sửa và chèn hình ảnh).
dùng712092

Câu trả lời:


1

nhưng khi tiếp cận các cạnh của bản đồ, tọa độ ô bắt đầu rõ ràng trở nên không hợp lệ.

Không thực sự, bạn có thể không có dữ liệu tại chỗ, nhưng sẽ không có gì sai khi sử dụng cùng một công thức.

Nếu bạn muốn đề xuất về cách khắc phục các vấn đề tiềm ẩn, bạn có thể muốn cho chúng tôi xem đoạn mã phù hợp.

Chỉnh sửa:
Chỉ cần làm rõ, giả sử bạn đã có bản đồ ô 100x100, được lập chỉ mục từ 0 đến 99. Để hiển thị, bạn sẽ làm một cái gì đó như thế này:

//Loop structure that iterate through tiles
    if(tileX<=99 && tileX>=0 && tileY<=99 && tileY>=0){
        //Draw the tile
    }
    else{
        //Do nothing
    }
//End of loop

Đó là một ý kiến ​​hay. Tôi chỉ có thể đơn giản là continuevòng lặp kết xuất cho đến khi ô hiện tại nằm trong bản đồ và chế độ xem. Tôi sẽ thử điều này ngay khi tôi có thể tìm thấy một chút thời gian! :)
alekop
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.