Làm thế nào để tải một hành tinh hình cầu và các khu vực của nó?


14

Tôi đang thiết kế một trò chơi bao gồm một phần khám phá các hành tinh. Tôi muốn sử dụng thế hệ giả ngẫu nhiên cho chúng, tái sinh từ một hạt giống xác định khi tôi phải tải chúng thay vì lưu trữ mọi chi tiết, sẽ quá nặng. Vì vậy, tôi sẽ chỉ lưu trữ trong một tệp các hạt giống ngẫu nhiên và sửa đổi được thực hiện bởi người chơi nếu có.

Người chơi phải có thể nhìn hành tinh từ quỹ đạo (với mức độ chi tiết rất thấp, sau đó đi xuống mặt đất, tăng dần mức độ chi tiết của khu vực nơi anh ta / cô ta hạ cánh và dỡ những cái ở phía bên kia của hành tinh, nằm ngoài tầm nhìn của người chơi.

Nếu tôi phải làm điều đó trên mặt đất, tôi sẽ làm điều đó một cách dễ dàng với hệ thống khối vuông. Nhưng vấn đề ở đây là các hành tinh - gần như - hình cầu.

Vì vậy, cách tốt nhất để tải các chi tiết mặt đất (phù điêu và vật tiếp đất) xung quanh một điểm chính xác là gì?
Tôi đã mặc dù trên hai giải pháp, nhưng cả hai đều có một điểm yếu:

1. Cắt hình cầu theo khối vuông.

phương pháp khối vuông

Khi người chơi đã đủ gần mặt đất, tôi chỉ cần cải thiện chi tiết các ô vuông gần nhất từ ​​vị trí của anh ấy / cô ấy.
Nếu nó không đủ, tôi vẫn có thể cắt từng ô vuông trong các ô vuông phụ để tải khi người chơi ở trên hoặc thực sự ở gần mặt đất.

Nhưng như bạn có thể thấy trên hình, có một vấn đề nếu người chơi cố gắng hạ cánh trên cột: hình vuông trở thành hình chữ nhật rất mỏng, hoặc thậm chí là hình tam giác cho dòng cuối cùng, và thêm vào đó là thực tế rằng chúng sẽ có nhiều thứ để tải, thế hệ sẽ xuất hiện méo mó.

2. Bắt đầu từ một khối nhựa.

phương pháp icosahedron

Ở đây, tôi chỉ có thể tăng số tam giác xung quanh vị trí của người chơi khi anh ấy / cô ấy đến gần.

Nhưng tôi không biết làm thế nào để xác định vị trí các hình tam giác gần hơn vị trí của người chơi. Tôi nghe nói tọa độ của Cartesian có thể hữu ích trong trường hợp đó, nhưng tôi không biết cách sử dụng chúng.


Tôi đang sử dụng C ++ / OpenGL cho nó, vì vậy điều chính để tạo và tải ở đây là các đỉnh đại diện cho sự giảm nhẹ bề mặt và màu sắc / kết cấu.


Trước khi tôi bắt đầu viết, thế giới của bạn có phải là một hình cầu không? Bạn đang cố gắng áp đặt một lưới trên một hình cầu trong đó mỗi lưới có các thuộc tính được lưu vào một tệp?
Alec Teal

@AlecTeal Tôi đang cố gắng mô phỏng một hành tinh. Vì vậy, nó là một quả cầu trên toàn cầu. Và vấn đề chính là người chơi có thể cố gắng tiếp đất ở bất kỳ điểm nào, trên cột hoặc dọc theo đường xích đạo.
Aracthor

2
Vì vậy, .... phải hỏi bạn đã tìm kiếm "công cụ trò chơi thế giới hình cầu" vì có vô số triển khai ở đó. Tại sao họ không làm việc? Ngoài ra, đây là lý do tại sao chúng ta có các bản đồ khối, chúng là các biểu đồ tiêu chuẩn trên bất kỳ cấu trúc đồng nhất cấu trúc liên kết với hình cầu vì lý do này!
Alec Teal

1
đề nghị đánh giá tùy chọn hình cầu quad
dnk drone.vs.drones

maths.kisogo.com/index.php?title=Notes:Spherical_coordins dự thảo sơ bộ. Cần hình ảnh và được hoàn thành.
Alec Teal

Câu trả lời:


5

Được rồi, vì vậy tôi đã viết nó ra đây:

http://www.maths.kisogo.com/index.php?title=Notes:Spherical_coordins

(Tôi cần đánh dấu toán học và nó cũng thực sự khá dài)


Áp dụng tài liệu

Tài liệu bắt đầu bằng cách đưa ra khái niệm về một đa tạp, một đa tạp là điều này trong đó các khối của nó là "khối đồng nhất" (về cơ bản: giống như) các khối của R ^ n (R ^ 2 là mặt phẳng x / y, như bạn có thể biết rôi)

Một biểu đồ bao gồm một số (có thể là tất cả, mặc dù trong trường hợp hình cầu, nó KHÔNG THỂ bao gồm tất cả) của một đa tạp.

Trong bài viết tôi phát triển 4 biểu đồ cho hình cầu giữ góc, đó là chúng giữ khoảng cách đều đặn.

Như bạn đã tìm ra việc cho tọa độ vào các điểm trên một quả cầu thực sự khá khó khăn! Thay vào đó, những gì chúng ta làm (mặc dù trên một vòng tròn trong ví dụ) là cung cấp cho mỗi điểm một tọa độ có dạng (i, x, y) trong đó i là một số từ 1 đến 6 cho một hình cầu, 1 và 4 cho một hình tròn. Đây là số biểu đồ.

X và y đề cập đến các góc trên biểu đồ đó (hoặc chỉ x nếu đó là một hình tròn).

6 biểu đồ của một hình cầu là bán cầu trên / dưới, bán cầu trái / phải và trước / sau.


Tọa độ

Bây giờ bạn có thể cung cấp cho evey điểm một tọa độ "đẹp" được xử lý tốt. Trong thuật ngữ toán học, các miền của biểu đồ là bản đồ "mở", điều này có nghĩa là tồn tại một số số dương sao cho một quả bóng xung quanh mỗi điểm cũng nằm trong tập hợp. Ví dụ: phạm vi (0,1) (tập hợp chứa x nếu 0 <x <1) là mở, lấy bất kỳ p nào trong (0,1) (ví dụ 0,001) thì có một số (ví dụ 0,0005) rằng bất kỳ điểm nào trong phạm vi 0,0005 của 0,001 cũng nằm trong (0,1).

Điều này có nghĩa là bạn có thể chuyển hướng thông qua các biểu đồ.

Bây giờ có 45 độ trùng lặp trong các biểu đồ chúng tôi phát triển. Điều này có nghĩa nếu bạn có một tính năng tại tọa độ (i, x, y), bạn có thể yên tâm xác định điểm của hình thức (i, x + a, y + b) chừng nào ablà giữa -45 và +45 (ở độ)

Bất kỳ điểm nào của biểu mẫu (i, x + a, y + b) đều có thể dễ dàng chuyển đổi thành một điểm trong không gian 3 chiều "bình thường" mà không gặp vấn đề gì.


Thực hiện

Bây giờ bạn có cách lưu trữ tọa độ cho một thứ gì đó trên một hình cầu và biểu thị các vùng không gian rộng lớn với các tọa độ này, chúng cũng hoạt động giống như tọa độ, ví dụ như chúng là vấn đề nếu bạn sử dụng 2 góc thay thế)

Bây giờ bạn cũng có thể loại bỏ hoàn toàn câu trả lời "làm thế nào để tạo ra một hình cầu thông thường" bởi vì tất cả những gì bạn phải làm là thực hiện 6 mặt phẳng và đảm bảo các cạnh của chúng thẳng hàng (tầm thường) và kết quả là:

Bạn sẽ có một quả cầu đẹp với tọa độ dễ sử dụng

Bất kỳ câu hỏi xin vui lòng bình luận, tôi đã cố gắng để có ít kiến ​​thức trước. Tôi cũng mới dạy người


@Alec_Teal Tôi nhận được câu trả lời của bạn kể từ khi bạn đăng nó, phức tạp và khó hiểu (Tôi không sử dụng quá nhiều công thức toán học) nhưng tôi nghĩ rằng tôi phải hiểu ... Phương pháp của bạn có thực sự khác với phương pháp dựa trên khối lập phương hình cầu như mô tả ở trên? Tôi không hiểu nếu "biểu đồ" của bạn là hình chiếu vuông hay thứ gì đó nữa ...
Aracthor

@Aracthor nó tổng quát hơn. Một biểu đồ có nghĩa đen giống như một biểu đồ trong một cuốn sách (của bản đồ) tất cả những gì nó làm là áp đặt một lưới trên một số khu vực. Giả sử bạn có hình xuyến chẳng hạn, hoặc hình xuyến 2 lỗ, bạn cần những phương pháp này. Không có câu trả lời nào ở đây liên quan đến tọa độ trên một hình cầu nhiều như các cách thông thường để tạo hình học, đó là một nhiệm vụ khác nhau. Tôi có thể giúp với các công thức, tôi đã cố gắng viết nó dễ tiếp cận nhất có thể, nhưng đây là bánh mì và bơ của tôi, vì vậy tôi không thấy sự phức tạp.
Alec Teal

@Alec_Teal Tôi đã xác thực nó, nhưng tôi vẫn không nghĩ mình có mọi thứ. Nhưng hãy tiếp tục cuộc thảo luận này trong một phòng chat .
Aracthor

12

Như bạn đã chỉ ra, có một số giải pháp cho vấn đề này, nhưng không có lý tưởng nào 100%. Lĩnh vực là khó khăn.

Dựa trên khối lập phương

Một lộ trình phổ biến, được sử dụng bởi Spore và rất có thể là các trò chơi khác (mặc dù rất khó để biết chắc chắn mà không nhìn trộm dưới mui xe), là chiếu quả cầu lên một khối lập phương và sử dụng lưới vuông trên mỗi mặt khối.

(Đây là những gì Alec Teal và dnk drone.vs.drones đang mô tả trong các bình luận ở trên)

Hình cầu được phân chia dựa trên một khối lập phương

( Hình ảnh từ bài đăng này mô tả sử dụng biểu diễn khối cho LoD )

Điều này có rất nhiều ưu điểm của phương pháp kinh độ vĩ độ, với độ méo cực đại ít hơn nhiều. Thật dễ dàng để chuyển đổi qua lại giữa các vị trí trên lưới mặt và các vị trí trên hình cầu, bằng cách chuẩn hóa một vectơ hoặc chia cho thành phần lớn nhất của nó theo giá trị tuyệt đối. Nó cũng phù hợp độc đáo với các kỹ thuật kết cấu bản đồ khối , có thể hữu ích khi xem toàn bộ hành tinh từ xa.

Cách tiếp cận ánh xạ điển hình được gọi là phép chiếu gnomonic và nó vẫn có một vấn đề không khớp mật độ như bạn có thể thấy trong hình trên. Lưới dày đặc hơn nhiều gần các góc khối so với tại tâm của các mặt. Nếu tính đồng nhất là quan trọng, bạn có thể giảm điều này bằng các công thức ánh xạ phù hợp, nhưng điều này thường làm cho ánh xạ khó đảo ngược hơn.

Thay đổi chức năng ánh xạ để cải thiện tính đồng nhất

Trong mọi trường hợp, bạn vẫn sẽ có một biến dạng góc ở các góc, trong đó một giao điểm lưới thông thường gồm bốn hình vuông với góc 90 độ trở thành cuộc gặp gỡ của 3 hình thoi với góc 120 độ.

Dựa trên Icosahedron

Aproach yêu thích cá nhân của tôi sẽ là phiên bản icosah thờ mà bạn mô tả, bởi vì nó làm cho độ méo góc cực đại càng nhỏ càng tốt. Trong đó lưới tam giác thường có sáu tam giác gặp nhau ở các góc 60 độ, các đỉnh icosahedron có 5 tam giác gặp nhau ở các góc 72 độ. Vì vậy, mỗi cái có ít biến dạng hơn các hình vuông trong ví dụ khối.

Nó không hoàn toàn là lãnh thổ quen thuộc như các ô vuông của phiên bản khối, có lẽ đó là lý do tại sao nó không phổ biến. Phải mất thêm một chút toán học để làm việc thông qua.

Việc xác định các điểm gần đó không hoàn toàn khó khăn như nó có thể xuất hiện. Bất kỳ quả cầu trắc địa dựa trên icosahedron đều có thể được làm phẳng trên lưới hình tam giác thông thường:

Làm phẳng các phép đo trắc địa trên lưới tam giác thông thường Lưới của một hình chữ nhật trên lưới hình tam giác

một lưới tam giác thông thường có thể được coi như một lưới vuông, như được thảo luận ở đây .

Hình tam giác vuông-vuông

Vì vậy, một khi bạn xác định được khuôn mặt của icosahedron nào (có thể được thực hiện với một tia phát sóng chống lại lưới icosah thờ - tôi không biết bất kỳ cách toán học thông minh nào để đơn giản hóa phần đó), môi trường xung quanh có thể được sử dụng lưới ngang. :)

Biên tập:

Nếu bạn sử dụng trắc địa Class-I, bạn có thể hủy các hành tinh của mình thành năm biểu đồ hình chữ nhật để lưu trữ các khối / kết cấu / chiều cao cấp hiệu quả, tương tự như sáu biểu đồ vuông bạn sử dụng để lưu trữ phiên bản dựa trên khối lập phương:

Unwrapping một không gian địa lý vào biểu đồ hình chữ nhật

(Điều này có thể giúp giải quyết mối quan tâm được đưa ra bởi Logic Mờ trong một câu trả lời khác. Điều này cũng có thể nhưng phức tạp hơn một chút đối với trắc địa Class-II. Tôi chưa điều tra Class-III)

Thủ thuật là các trục của các biểu đồ này không thực sự vuông góc trong sử dụng, vì vậy các công cụ / công nghệ phát trực tuyến và tác giả hiện tại sẽ không hỗ trợ nó ra khỏi hộp. Nếu bạn dự định viết luồng phát trực tiếp của riêng mình hoặc sử dụng thế hệ thủ tục nhanh chóng thì đó có thể không phải là vấn đề. Bạn cũng có thể giải quyết vấn đề tác giả bằng cách tạo bản đồ nguồn ở độ phân giải cao hơn mức cần thiết bằng các công cụ thông thường, sau đó chạy chúng qua quy trình nướng mẫu dọc theo lưới biểu đồ để tạo ra một biểu diễn dày đặc, hiệu quả, cắm trực tiếp vào cấu trúc icosah thờ.


1
Có một số thứ tốt ở đây. Tôi sẽ +1 nhưng tôi dự định viết một câu trả lời sau (tôi cố gắng tránh xa các giai đoạn bỏ phiếu sớm khi tôi cũng trả lời). Nhận xét duy nhất của tôi là cách tiếp cận này tốt hơn để hiển thị các hình cầu hơn là mô hình hóa bề mặt
Alec Teal

Chỉ cần bạn tò mò, bây giờ tôi đã hoàn thành câu trả lời của mình.
Alec Teal

4

Hình cầu tứ giác với LOD chunked là phương pháp ưa thích nếu bạn muốn có thể đi từ không gian xuống mặt đất với bất kỳ mức độ địa hình chi tiết nào, theo sơ đồ và kết cấu chiều cao được xác định trước.

Icosasphere cung cấp một lưới đồng đều hơn và dễ dàng xử lý nhưng đặt ra các vấn đề khi cố gắng ánh xạ họa tiết và chiều cao mà bạn sẽ cần để lưu vào bộ đệm và sẽ không nhỏ gọn hoặc đơn giản theo cách đó.

Quad-sphere có các điểm nhúm nhưng với đủ số lượng bạn sẽ không thấy chúng bằng mọi cách. Sau đó, bạn có thể ánh xạ họa tiết và triển khai DLOD hiệu quả như thể mỗi vùng (chunk) là một lưới vuông với ít vấn đề. Điều này đơn giản hơn để thực hiện so với icosasphere và sẽ hiệu quả hơn, cả về tính toán và tài nguyên.

Xem các bài viết của Sean O'Neil về việc tạo ra một vũ trụ thủ tục trên Gamasutra:
- Phần 1 Perlin noise và Fractal Brownian Motion để biết chiều cao và kết cấu.
- Phần 2 Thuật toán ROAM cho lưới thủ tục với DLOD để tạo hành tinh. Đau khổ từ vấn đề hiệu suất. Không khuyến khích nhưng tốt cho giá trị giáo dục.
- Phần 3 Giải quyết các vấn đề với quy mô lớn, tối ưu hóa và các vấn đề về dấu phẩy động. Chủ yếu liên quan đến quy mô vũ trụ nhưng cũng có thể áp dụng cho các hành tinh khi chuyển từ quy mô năm ánh sáng sang centimet nếu bạn muốn.
- Phần 4 Thảo luận về việc thực hiện Quad-sphere với DLOD chunked (quad-tree) để tạo hành tinh <- xem bài viết này nói riêng


0

Tôi không phải là chuyên gia về lập trình, nhưng bạn có thể có một số loại điểm kiểm tra. Trong khi bạn bị xóa thông qua một điểm kiểm tra an ninh, tất nhiên với hình ảnh động, bề mặt của hành tinh có thể tải và ngược lại.


Điều này giải quyết vấn đề bằng cách mở ra tùy chọn không thiết kế bề mặt hành tinh có thể khám phá như một hình cầu, nhưng không giải quyết được.
Philipp
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.