Vẽ đất cho trò chơi xe mô tô


7

Tôi muốn vẽ một vùng đất cho một trò chơi xe mô tô. Tôi đã nghĩ về Bezier Curves nhưng tôi không chắc liệu đây có phải là cách tiếp cận tốt nhất hay không. Bạn có thể cho tôi một lời khuyên? Tôi muốn làm điều đó bằng JavaScript, không phải là sự lựa chọn tốt nhưng đó là dự án cá nhân vì vậy theo thời gian, nó vẫn ổn.


1
Tại sao bạn nói JavaScript là một lựa chọn tồi? Chắc chắn đối với một AAA nó sẽ là một lựa chọn tồi, nhưng đối với một trò chơi trực tuyến đơn giản, đó một lựa chọn tốt.
Tấn

Câu trả lời:


4

Thay vì beziers, bạn có thể muốn spline b-splines hoặc catmull-rom.

float bspline(float t, float p0, float p1, float p2, float p3)
{
  float it = 1.0f - t;

  float b0 = it*it*it * (1.0f / 6.0f);
  float b1 = (3*t*t*t - 6*t*t +4) * (1.0f / 6.0f);
  float b2 = (-3*t*t*t +3*t*t + 3*t + 1) * (1.0f / 6.0f);
  float b3 =  t*t*t * (1.0f / 6.0f);

  return     
    b0*p0 +
    b1*p1 +
    b2*p2 +
    b3*p3;
}

float catmullrom(float t, float p0, float p1, float p2, float p3)
{
  return 0.5f * (
          (2 * p1) +
          (-p0 + p2) * t +
          (2 * p0 - 5 * p1 + 4 * p2 - p3) * t * t +
          (-p0 + 3 * p1 - 3 * p2 + p3) * t * t * t
          );
}

Cách sử dụng: t nằm trong khoảng từ 0 đến 1, trong đó giá trị nội suy spline giữa hai điểm điều khiển và các phao p0, p1, p2 và p3 đại diện cho các điểm điều khiển (trước, hiện tại, tiếp theo và sau). Để nội suy các đường cong n chiều, chỉ cần gọi các hàm một lần trên mỗi trục.

Sự khác biệt thực tế giữa bsplines và catmull-rom về cơ bản là catmull-rom đi qua tất cả các điểm kiểm soát trong khi bsplines trơn tru hơn.


Câu hỏi về công thức bspline. Mục đích float it = 1.0f - tvà sử dụng itcho b0giá trị là gì? Tại sao làm điều đó cho bspline, mà không phải rom catmull?
chrismanderson

2

Tôi tìm thấy một vài liên kết có thể hữu ích cho những người khác:

Kịch bản ví dụ về triển khai Bezier trong JS
http://jsfromhell.com/math/bezier

Nó có thể được sử dụng từ JavaScript hoặc ActionScript để tạo hiệu ứng dọc theo đường dẫn đẹp hơn.
http://code.google.com.vn/p/javascript-beziers/

Kịch bản / cốt truyện vẽ trực tuyến, khá hữu ích nếu bạn muốn thực hiện một số thử nghiệm
http://jsdraw2d.jsfiction.com/demo/curvesbezier.htmlm

Một chút về lý thuyết và một ví dụ triển khai
http://13thabul.com/archive/bezier-curves/

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.