Làm thế nào để tránh tự giao nhau khi áp dụng đột quỵ vào một đường cong?


11

Tôi có một số đối tượng Spline2D trong mã của mình, mỗi đối tượng có phương thức Vị trí, Vận tốc và Gia tốc trả về một vectơ của đại lượng đã chỉ định tại một thời điểm cụ thể. Tôi đã sử dụng các vectơ này để xây dựng hình học để tạo các nét dốc cho các đường cong, nhưng tôi gặp vấn đề với các giao điểm tự tại các đường cong dốc. Ví dụ, đây là một đường cong mà tôi đang có điều này xảy ra:

Wireframe: http://twitpic.com/2zplw1/full
Đầy: http://twitpic.com/2zpmnt/full

Như bạn có thể thấy, ở khúc cua thứ hai, phần bên trong giao nhau, điều này gây ra sự giả tạo xấu xí đó. Có một thuật toán / phương pháp tốt để đột quỵ các đường cong mà không gây ra sự tự giao nhau đó không?

EDIT : Nhiều ví dụ cực đoan hơn, cộng với sự mô phỏng những gì tôi muốn đạt được:

Wireframe: http://twitpic.com/2ztwzi/full
Đầy: http://twitpic.com/2ztwkt/full
Kết quả lý tưởng (Mock-Up): http://twitpic.com/2ztxa8/full


Wow, tôi thậm chí không nhận ra ý nghĩa của tiêu đề khi tôi viết nó. :)
ThatsGobble

Câu trả lời:


3

Nếu bạn kết xuất những thứ này bằng GPU và bất kỳ api 3D hiện đại nào (ví dụ: OpenGL / D3D), có vẻ như tôi có thể thoát khỏi điều này bằng thử nghiệm chuyên sâu. Nếu bạn chỉ định các câu bên ngoài của bạn là z = FAR và các câu bên trong của bạn là z = NEAR, thì việc kiểm tra độ sâu sẽ ngăn sự trùng lặp hiển thị. Với OpenGL:


  // don't forget to clear depth buffer to 1.0f at beginning of frame.
  glClearDepth(1.0f);
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  // enable depth testing.
  glEnable(GL_DEPTH_TEST);
  glDepthFunc(GL_LEQUAL);

// draw the Spline2D for each segment in spline for each vert in segment if (vert is an outer vert), set vert.z = 1.0, otherwise set vert.z=0.0

Caveat emptor: điều này sẽ không hoạt động nếu bạn cần những nét mờ.


1
Câu trả lời tuyệt vời, đúng như những gì tôi đã nghĩ, tuy nhiên, bạn đã sai về việc nó không hoạt động đối với các nét mờ nếu bạn cho phép viết zbuffer trong một lần, sau đó thực hiện màu trong giây.
Richard Fabian

Cảm ơn, nét của tôi thực sự mờ đục, vì vậy điều này làm việc rất đơn giản và tuyệt vời!
ThatsGobble

1

"Khắc phục" sẽ phụ thuộc vào những gì bạn muốn đầu ra kết quả trông như thế nào. Vấn đề chưa thực sự được xác định rõ ở đây: nó có nghĩa là gì?

Trước tiên tôi khuyên bạn nên thử làm một ví dụ cực đoan hơn về trục trặc, sau đó sử dụng photoshop / sơn để khắc phục bạn có thể tìm thấy cảm hứng cho một giải pháp.

Bạn có muốn nó gấp lại? Chồng chéo với các cạnh? Kéo vào cho đến khi nó không chồng chéo?


Điểm hay, tôi sẽ tạo ra một đường cong sắc nét hơn và đường cong "lý tưởng" trong Illustrator hoặc Inkscape sau ngày hôm nay.
ThatsGobble

Chỉnh sửa bài gốc!
ThatsGobble
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.