У меня есть встроенный Delphi TFrame, который эмулирует просмотрщик облаков тегов Роя Танка, плагин WordPress Flash. Этот плагин создает трехмерную сферу слов, которая вращается на поверхности «виртуальной» сферы. Вы можете увидеть это в действии здесь:
http://www.roytanck.com/2008/03/06/wordpress-plugin-wp-cumulus-flash-based-tag-cloud/
В моей структуре приложения каждое слово имеет свой собственный TBitmap, и для рендеринга сферы я печатаю все растровые изображения слова на временном TBitmap, а затем BitBlt (), который временно помещает TBitmap на Canvas видимого TPaintBox. Операция рендеринга происходит с событием таймера TTimer, которое происходит каждые 50 миллисекунд.
Однако, как бы я ни старался, в движении слов есть заметный «джиттер», особенно по сравнению с плавным плавным движением Flash-плеера. Я подумал, что может помочь увеличение частоты кадров, и я даже попытался использовать мультимедийный таймер, который обновлялся каждые 10 миллисекунд с правильной блокировкой и разблокировкой всех холстов из-за многопоточной природы таймера MM. Все еще нервный. Единственное, что я могу понять, это то, что вычисления, которые я делаю, приводят к дискретным позициям пикселей для каждого слова для рендеринга, и это вызывает дрожание. В противоположность этому, и это предположение, возможно, что Flash потенциально выполняет сглаживание для облегчения рендеринга «между пикселями» или, возможно, сглаживание в реальном времени, и поэтому оно не дрожит?
В любом случае, возможно ли получить плавное плавное движение, которое я ищу, используя нативный код Delphi? Или единственный способ сделать это - пойти к чему-то вроде решения Direct3D или OpenGL? Я не хочу тратить время на настройку этой штуки до смерти, если это проигрышная битва. С другой стороны, если у вас есть какие-либо советы, я бы хотел их услышать. Я предполагаю, что если мне действительно нужно идти по пути Direct3D / OpenGL, это большая работа и кривая обучения, поэтому, если бы я мог найти способ сделать это в нативном коде Delphi, мне бы это понравилось.
ПОСЛЕДУЮЩЕЕ РЕДАКТИРОВАНИЕ: поможет ли печать в гораздо более крупный «виртуальный» растр, а затем использовать метод повторной выборки, подобный приведенному здесь, для печати «вниз» до фактического видимого холста?
Хорошо масштабировать изображение в Delphi?