Làm biến dạng bề mặt


10

Tôi đang cố gắng thực hiện một hành vi vật lý biến dạng cho các bề mặt bằng cấp, nhưng không có ý tưởng nào để bắt đầu với việc cấy ghép cho đến nay.

Bất kể hình dạng của bề mặt (mặt phẳng, hình khối, hình cầu), tôi muốn có những vết lõm nhỏ tại các vị trí từ các thực thể trò chơi (người chơi, kẻ thù, vật thể).

Thật là phức tạp để giải thích, vì vậy tôi đã minh họa những gì tôi đang nói, đây là một ví dụ với một hình cầu:

minh họa biến dạng bề mặt trò chơi

Vì vậy, các bề mặt sẽ có thể tự biến dạng một chút (để trông giống như một chiếc giường hoặc ghế sofa thực sự mềm mại). Bề mặt của tôi có lẽ cần một số đỉnh cao để có được một biến dạng trơn tru, nhưng vấn đề lớn của tôi là toán học để tính toán biến dạng này.

Tôi đang lập trình trong C / C ++ với OpenGL, nhưng mọi lời khuyên theo đúng hướng sẽ ổn.

Câu trả lời:


5

Đối với một biến dạng đơn giản, bạn có thể chọn một điểm trên bề mặt / đối tượng để thao tác, sau đó áp dụng một phép biến đổi (ví dụ: dịch) cho nó. Sau đó, biến đổi tất cả các điểm trong một khoảng cách nhất định từ điểm đó theo cùng một cách, nhưng có sức mạnh biến đổi lỏng lẻo càng xa điểm bạn đã chọn.

Vì vậy, để làm cho các công cụ thụt vào bên dưới một nhân vật, chọn điểm anh ấy / cô ấy đang đứng và di chuyển nó xuống dưới.

Tùy thuộc vào hiệu ứng bạn muốn lưu trữ, bạn có thể muốn áp dụng biến đổi trên toàn cầu, cục bộ hoặc hướng / ra khỏi trung tâm đối tượng và / hoặc sử dụng các chức năng khác nhau để mô phỏng các vật liệu khác nhau.

Có thể tìm thấy một ví dụ đơn giản về việc thụt máy bay bằng các hàm dự phòng sin / cos trong số www.lighthouse3d.com/opengl/terrain/


1
Tôi nhận được một lỗi 403 bị cấm trên liên kết.
George Duckett

1
Vâng ... 'lil hack là để sau đó (cũng có thể, trực tiếp đến phần trong câu hỏi): web.archive.org/web/20100927141645/http://lighthouse3d.com/...
Exilyth
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.