Các hành tinh thủ tục, chiều cao và kết cấu


19

Tôi hiện đang làm việc trên một trình tạo hành tinh thủ tục OpenGL. Tôi hy vọng sẽ sử dụng nó cho một game nhập vai không gian, điều đó sẽ không cho phép người chơi đi xuống bề mặt của một hành tinh nên tôi đã bỏ qua mọi thứ liên quan đến ROAM. Hiện tại tôi đang vẽ một khối lập phương với VBO và ánh xạ lên một quả cầu.

Tôi quen thuộc với hầu hết các kỹ thuật tạo sơ đồ chiều cao fractal và đã triển khai phiên bản dịch chuyển trung điểm của riêng tôi (không hữu ích trong trường hợp này tôi biết).

Câu hỏi của tôi là, cách tốt nhất để thủ tục tạo sơ đồ chiều cao là gì. Tôi đã xem xét libnoise cho phép tôi tạo ra các chiều cao / kết cấu có thể điều chỉnh được, nhưng theo như tôi thấy tôi sẽ cần phải tạo ra một mạng như thế này .

Rời khỏi lát gạch rõ ràng.

Bất cứ ai có thể tư vấn cho tôi về con đường tốt nhất để đi?

Mọi nguồn thu đều được đánh giá cao.

Câu trả lời:


18

Trước hết, tôi không chắc tại sao bạn muốn thực hiện bản đồ chiều cao (tức là dịch chuyển hình học) nếu mọi người sẽ không thể hạ cánh, có vẻ như hiệu quả hơn đối với bản đồ thông thường hoặc một cái gì đó.

Như đã nói, những gì bạn muốn là chuyển đổi từ (x, y, z)một (u, v)tọa độ tùy ý sang một tọa độ, đó là chuyện nhỏ. Không có sơ đồ khối cần thiết.

văn bản thay thế

văn bản thay thế

  1. Mỗi (u, v)texel có một chiều cao (sơ đồ chiều cao RGB = height) và một vị trí (x, y, z) = pos.
  2. Tìm và bình thường hóa vị trí NORMAL(x, y, z) = N,.
  3. Đỉnh mới = pos+N*height.

Điều này sẽ làm việc tốt hơn với một tessname cao hơn. Đồng thời sử dụng libnoiseánh xạ hình cầu phù hợp cho sơ đồ chiều cao của bạn, trông sẽ giống như thế này (nhưng đen và trắng):

văn bản thay thế



1

Ánh xạ chiều cao dịch chuyển trung điểm là một nơi tốt để bắt đầu. OP, tại sao bạn nghĩ rằng nó không phải là?

OP rất tốt khi mô hình hóa bề mặt hành tinh như một sơ đồ khối, bởi vì bất kỳ bản đồ phẳng nào (ví dụ như phép chiếu Mercator) sẽ có các biến dạng xấu và phức tạp, theo toán học.

Nếu tôi là OP, ban đầu tôi sẽ quên hình học hành tinh quy mô lớn. Tôi sẽ tạo một sơ đồ khối trong đó mỗi mặt là 2 ** N + 1 pixel (2,3,5,9,17,33 ...) và mỗi texel mã hóa chiều cao [0..N) trong đó 0 là độ cao của rãnh thấp nhất dự kiến ​​và N là độ cao của ngọn núi cao nhất dự kiến ​​trên hành tinh.

Sau đó, tôi sẽ tính toán độ cao ngẫu nhiên cho tám đỉnh của khối lập phương và truyền chúng vào sáu ô vuông của bản đồ khối, sao cho mỗi đỉnh xuất hiện ba lần.

Khi tôi đệ quy tạo chiều cao fractal cho các điểm giữa của các cạnh, tôi sẽ đảm bảo truyền các đỉnh cạnh mặt sang mặt khác có chung chúng.

Khi tôi đã hoàn tất, tôi có một bản đồ hình khối trong đó tất cả các texels cạnh được nhân đôi và tất cả các texels góc được nhân ba. Không cần phải chuyển đổi nó thành bản đồ bình thường - Tôi sẽ sử dụng thuật toán trong bài viết của Morten Mikkelsen để hiển thị các quy tắc trực tiếp từ sơ đồ chiều cao khi chạy.

Trong thời gian chạy, tôi có thể kết xuất một hình tứ giác bao phủ hình chiếu của hành tinh lên màn hình và thực hiện một thử nghiệm giao nhau giữa các tia cầu trong bộ đổ bóng pixel để tìm xem tôi có chạm vào hành tinh này hay không. Chắc chắn nhịp đập của một mô hình hình cầu được đánh giá cao, và cũng có được một cạnh mịn đẹp.


1

Nhiễu dịch chuyển trung điểm, với độ dịch chuyển tối đa được chia tỷ lệ theo kinh độ tuyệt đối của pixel có thể tạo ra bản đồ nhiễu hình cầu một cách nhanh chóng. Các bảng màu lấy độ cao, độ dốc và ánh sáng mặt trời hoặc kinh độ làm các thông số có thể được sử dụng để che bóng tự động.

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.