Tôi có một TFrame gốc Delphi mô phỏng trình xem Cloud Cumulus Tag của Roy Tanck, một trình cắm thêm Flash của WordPress. Những gì mà trình cắm thêm thực hiện là tạo ra một hình cầu 3D của các từ quay xung quanh trên bề mặt của một quả cầu "ảo". Bạn có thể nhìn thấy nó trong hành động ở đây:Delphi 6: Delphi có thể làm đồ họa mượt mà như Flash không?
http://www.roytanck.com/2008/03/06/wordpress-plugin-wp-cumulus-flash-based-tag-cloud/
Trong cấu trúc ứng dụng của tôi mỗi từ có TBitmap riêng của mình và để làm cho cầu tôi in tất cả bitmap của từ để một TBitmap tạm thời và sau đó bitblt() mà TBitmap tạm thời trên Canvas của một TPaintBox hiển thị. Các hoạt động kết xuất xảy ra trên một sự kiện bộ đếm thời gian TTimer xảy ra mỗi 50 mili giây.
Tuy nhiên, không có vấn đề làm thế nào cứng tôi cố gắng có một "jitter" đáng chú ý đến sự chuyển động của các từ, đặc biệt là so với chuyển động mượt mà mượt của trình phát Flash. Tôi nghĩ việc tăng tốc độ khung hình có thể hữu ích và thậm chí tôi đã thử sử dụng bộ hẹn giờ Đa phương tiện cập nhật cứ 10 mili giây bằng khóa và mở khóa thích hợp tất cả Canvases do bản chất đa luồng của bộ hẹn giờ MM. Vẫn còn hốt hoảng. Điều duy nhất tôi có thể tính toán là các phép tính tôi thực hiện dẫn đến các vị trí pixel rời rạc cho mỗi từ để hiển thị tại và gây ra jitter. Ngược lại, và đây là giả định, có lẽ Flash có khả năng phối màu để tạo điều kiện cho việc hiển thị "giữa pixel" hoặc có thể chống răng cưa trong thời gian thực và đó là lý do tại sao nó không jitter?
Trong mọi trường hợp, có thể chuyển động mượt mà mượt mà tôi đang tìm bằng mã Delphi gốc không? Hoặc là cách duy nhất để làm điều đó là đi tất cả các cách để một cái gì đó giống như một giải pháp Direct3D hoặc OpenGL? Tôi không muốn lãng phí thời gian để điều chỉnh điều này đến chết nếu đó là một trận thua. Mặt khác, nếu bạn có bất kỳ lời khuyên nào tôi muốn nghe chúng. Tôi đoán là nếu tôi phải đi theo tuyến đường Direct3D/OpenGL thì đó là một công việc lớn và đường cong học tập vì vậy nếu tôi có thể tìm ra cách để thực hiện điều này trong mã Delphi bản địa, tôi rất thích điều đó.
THEO-UP EDIT: Sẽ in bằng bitmap "ảo" lớn hơn nhiều và sau đó sử dụng một phương pháp lấy mẫu lại như thế giúp đưa ra ở đây để in "xuống" để thực tế có thể nhìn thấy Canvas ?:
Scale an image nicely in Delphi?
Bạn có trên DoubleBuffering, AllPaintingInWmPaint, SupportsTransparentBackColor và UserPaint không? Sử dụng các công cụ này khi thực hiện hiển thị GDI trên biểu mẫu sẽ ngăn không cho nhấp nháy. – Nowayz
Nowayz. Tôi không có nhấp nháy. Các jitter là vị trí, không phải do repaints. –
Câu trả lời chắc chắn là có. Nhưng nếu bạn muốn đồ họa 3D thực sự mượt mà, CPU không đủ nhanh. Bạn cần sử dụng GPU, sử dụng OpenGL. –