Làm thế nào để trơn tru cho một đối tượng di chuyển dọc theo một đường cong


7

Tôi đang tự hỏi làm thế nào để di chuyển các đối tượng, với tính năng xoay vòng, để đi theo một đường cong

xem: http://www.youtube.com/watch?v=iPpO24FeAX4 để biết ví dụ

Đặc biệt tôi tự hỏi:

  1. Làm thế nào để lưu trữ các điểm, bao nhiêu điểm để lưu trữ cho một đường trơn tru như thế
  2. Làm thế nào để nội suy các đường cong
  3. Làm thế nào để nội suy giữa đối tượng và "điểm tham chiếu" đầu tiên dọc theo dòng

Câu trả lời:


6

Nhìn vào các đường cong Bezierđường cong Hermite , cả hai đều có thể kết hợp thành các spline. Cả hai thường có dạng phương trình tham số trong đó bạn nhập thời gian ttừ 0 đến 1; thời gian 0 sẽ là bắt đầu của spline, thời gian 1 sẽ là kết thúc.

Xoay là một vấn đề tính toán tiếp tuyến với đường cong.

4 điểm kiểm soát cho phân khúc đầu tiên theo sau là 3 điểm bổ sung cho mỗi phân khúc bổ sung là phổ biến cho loại spline này, mặc dù một số loại có thể muốn nhiều điểm hơn.

Lưu ý rằng với các spline tham số, bạn thường có thể gặp khó khăn trong việc tính toán vị trí trên spline như là một hàm của khoảng cách thay vì thời gian, vì vậy nếu bạn muốn trả lời câu hỏi "Tôi đã di chuyển khoảng cách X, tôi sẽ ở đâu dọc theo đường cong" bạn ' re cho một số tích hợp. Tương tự, vận tốc tức thời có thể thay đổi tùy thuộc vào mật độ và vị trí của các điểm kiểm soát.


1

Tôi đã thực hiện điều này trong Bộ khởi động trò chơi vẽ đường thẳng của mình và tránh sử dụng các giải pháp được thiết kế quá mức. Bạn có thể cần một điểm mỗi khoảng cách 10 pixel, do đó bạn có thể có được một đường thẳng mượt mà mà không cần sử dụng quá nhiều bộ nhớ hoặc vẽ các cuộc gọi. Sau đó, chỉ đơn giản là di chuyển các vật thể từ điểm A đến B. Để làm cho chúng xuất hiện như đang di chuyển trơn tru dọc theo con đường, bạn chỉ cần xoay chúng theo hướng chuyển động. Điều này được thực hiện theo thời gian và không phải ngay lập tức, vì vậy bạn sẽ có được sự mượt mà, theo chuyển động của đường cong mà không cần sử dụng các đường cong Bezier hoặc tương tự.

Các điểm được lưu trữ trong một mảng đơn giản, bên trong lớp Path cũng biết cách vẽ đường dẫn bằng OpenGL. Bạn có thể có bất kỳ số điểm đường dẫn nào nhưng tôi sẽ giới hạn chúng ở mức 50 đến 300 tùy thuộc vào thiết bị và độ mượt cần thiết.

Để nội suy dòng, bạn nên tra cứu Thuật toán trung bình trượt của McMaster (lý thuyết) .

Đối tượng chỉ di chuyển đến điểm đầu tiên khi người dùng đã rút ít nhất hai điểm, để tránh đối tượng quay cuồng dữ dội. Khi di chuyển về điểm đầu tiên, mã giống như di chuyển đến điểm thứ hai, thứ ba, thứ tư, v.v.


-1

Câu trả lời cho cả 3 thường là splines hoặc một số đường cong tương tự khác.

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.