![]() |
Проблема....... Двойная буферизация...
Привет!
У меня есть в тебе вопрос. Передо мной стоит задача: Написать программу(c++, win32 API), отображающую анимацию. Начало движения: левый нижний угол окна. Конец - правый верхний угол окна. Объект движения - круг, который уменьшается в размере, сменяя цвета. Использовать метод двойной буферизации. Ничего толкового не нашел? Как решить задачу? Еще нужно разобраться с такими вопросами, как класс Bitmap, cоздание, заполнение, вывод битовой карты Сергей-Минск |
Пользуй OpenGL там уже все встроено. API не предназначен для графики как таковой и катит только для самой простой "офисной" графики, ну там всякие диаграммки и др. А анимация без двойной буферизации будет очень сильно мерцать, т.к. стандартный API ее изначально не поддерживает. Самый простой выход чтобы не парится и самому не изобретать велосипед, я имею в виду двойную буферизацию - использования встроенного во все окна движка OpenGL. Что быстро и просто.
могу кинуть мануал, правда для дельфи, но зато там очень понятно все написано. |
|
|
Вводную читайте на _ttp://vr-online.ru/books/bib.htm в разделе библия Delphi есть в электронном варианте, целая глава как раз про OpenGL и API графику - автор Фленов М.
Пока не знаю куда залить целиковую книгу с экземплами. |
по сабжу: 100 лет не пользовал, если что - ногами не бить
1. движение объекта есть рисование его в различных позициях по таймеру 2. буферизация есть подготовка изображения ДО его показа (заполнили битмэм и ждём вызова на показ) 3. двойная буфф. - заполнение буфера №2 для СЛЕДУЮЩЕГО кадра, пока показывается текущий всего-то функций - заполни битмэп, приаттачь битмэп и таймер |
Я так тоже пробовал, но увы - мерцает. API графики не предназначены для более серьезных вещей, чем диграммки и пр. Там даже нет дефорлтной очистки битмапа. Двойная буферизация - имхо в наше время, это функциональная взможность девайса, который берет на себя, при определенной крутизне его самого, достаточно большую долю вычислений камня.
|
Mozhno vospolzovatsya DirectX.
Sam delal.:) Vse dovolno prosto:sozdaesh 2 surfaces i menyaesh ih. No inogda proishodyat takie oshibki, chto novichku ochen trudno razobratsya. Vobshem dlya DX nuzhna horoshaya kniga. Da tok smotrite, chtobi v knige visokoe resolution ressmatrivalos tozhe. |
создаешь переменную типа битмап чёто вроде
Graphics::TBitmap *bmp; bmp = new Graphics::TBitmap(); bmp->Height = 500; //задаешь высоту, ширину bmp->Width = 500; рисуешь на неё чё тебе надо(надеюсь, умеешь ;Р) дальше смотря куда ты рисуешь(допустим на форму) Form1->Canvas->CopyRect(TRect(0,0,500, 500), bmp->Canvas, TRect(0,0,500, 500)); усё, регламент ... т.е. получается что ты сначала в памяти рисуешь а потом на экран уже нарисованное пихаешь |
самый правильный вариант - openGL. очень простой АПИ, кроссплатформенность и т.д.
www.opengl.org |
| Часовой пояс GMT +4, время: 13:24. |
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.