Kết xuất địa hình mượt mà


7

Tôi đang cố gắng hiển thị địa hình trơn tru bằng Direct3D. Tôi đã có lưới 50 * 50 với tất cả các giá trị y = 0 và một tập hợp các điểm 3D biểu thị vị trí trên lưới và độ sâu hoặc chiều cao của "thung lũng" hoặc "đồi". Tôi cần làm cho các giá trị y của các đỉnh lưới cao hơn hoặc thấp hơn tùy thuộc vào mức độ gần với từng điểm 3D. Vì vậy, cuối cùng tôi nên có một trình kết xuất địa hình trơn tru.

Tôi không chắc chắn bằng cách nào tôi có thể làm điều này. Tôi đã thử thay đổi chiều cao của các đỉnh dựa trên khoảng cách đến từng điểm chỉ bằng cách sử dụng công thức cơ bản này:

dist = sqrt(a² + b² + c²)

trong đó a, b và c là khoảng cách x, y và z từ một đỉnh đến một điểm 3D. Kết quả tôi nhận được với điều này là không suôn sẻ chút nào.

Tôi nghĩ có lẽ có một cách tốt hơn.

Dưới đây là ảnh chụp màn hình về những gì tôi đã có trong thời điểm này: https://dl.dropbox.com/u/2562049/terrain.jpg


1
Đối với một điều, công thức bạn đưa ra là cho bình phương khoảng cách, không phải khoảng cách. Nó phải $dist = \sqrt{a^2 + b^2 + c^2}$.
James King

2
Ảnh chụp màn hình của bạn bị hỏng. Tôi khuyên bạn nên tải nó lên imgur hoặc một cái gì đó.
Tetrad

Câu trả lời:


4

Có điều gì đặc biệt về các điểm 3D này không vì có vẻ như bạn chỉ đang cố gắng hiển thị sơ đồ chiều cao. Thực hiện một loạt các tính toán khoảng cách đến một số điểm 3D tùy ý không phải là cách tốt nhất để làm điều đó.

Đây là một hướng dẫn đơn giản về DX9 về kết xuất đồ thị.

Khái niệm cơ bản là bạn có một hình ảnh 2D đại diện cho sự dịch chuyển. Vì vậy, vị trí pixel (X, Y) tương ứng với một đỉnh (X, Z) và màu của pixel đại diện cho giá trị chiều cao (Y) cho đỉnh.

Phần hay của việc sử dụng một hình ảnh là nó rất trực quan cho nhà phát triển để tạo và sửa đổi địa hình một cách trực quan.

EDIT: Nhìn vào ảnh chụp màn hình. Nó dường như đang làm việc với tôi, tôi cho rằng bạn không hài lòng với sự sụp đổ của hiệu ứng? Làm mịn ở mặt đất và sau đó tăng đột biến tại điểm 3D của bạn.

Nếu bạn lấy bất kỳ ngọn núi / thung lũng nào và tưởng tượng chúng ở dạng 2D và cắt chúng ra một nửa, bạn sẽ thấy một đường cong trông giống như đường bên trái và tôi đoán bạn muốn một đường cong giống như đường cong bên phải.

văn bản thay thế

Thay vì tìm khoảng cách 3D đến điểm 3D của bạn, tôi khuyên bạn nên nhìn vào khoảng cách 2D bỏ qua chiều cao. Sau đó, đối với mọi đỉnh trong một số dự phòng được xác định trước, hãy áp dụng chiều cao cho các đỉnh của bạn dựa trên đường cong vào / ra dễ dàng.


Không, tôi không hiển thị bản đồ chiều cao. Tôi chỉ có một vài "điểm chiều cao", chúng chỉ ra vị trí của đỉnh đồi hoặc thung lũng, nhưng không có một giá trị chiều cao cho mỗi đỉnh. Tôi đã đăng một ảnh chụp màn hình, nó có thể giúp đỡ.
dotminic

Vâng, tôi đã tự mình giải quyết nó sau khi tôi đăng câu hỏi này, sử dụng đường cong Quartic từ động cơ tweening AS3. Tôi vẫn còn thiếu những dự đoán được xác định trước. Cảm ơn sự giúp đỡ của bạn.
dotminic

2

Nếu bạn đang tìm cách tạo ra những ngọn đồi thoai thoải, bạn có thể sử dụng phương pháp lọc hộp. Mặc dù được cảnh báo, nếu bạn muốn các cạnh vách đá sắc nét, phương pháp sẽ chỉ làm mịn những cái đó ra.

Đây là liên kết đến nó trên GameDev.net: Lọc hộp cho Smooth cán Hills

Mã giả định rằng bạn đang sử dụng sơ đồ chiều cao, nhưng từ giải pháp của bạn, một thay đổi dễ thực hiện chỉ là lặp qua danh sách các điểm 3D (ánh xạ các điểm 3D đó sang đỉnh thích hợp, như bạn đang làm bây giờ).

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.