![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
СОС!!! (Быстрый вывод изображения. OpenGL?) [D7, WinXP]
Огнеяр © (2007-05-24 15:52:00)Я застрял. Проблема в том, чтобы вывести на экран содержимое TBitmap максимально быстро и без миганий. Поможите, кто чем может, уже месяц мучаюсь.
Задача:
Выводить на экран (можно на форму) исображения из файлов. частота вывода до 20 мкс с точностью до 1-3 мкс. Предполагаю, что это можно сделать через Директ Х или Опен ГЛ, но я с этими библиотеками совершенно не знаком.
Краснова прочитал, но там трехмерные задачи, а у меня - плоская графика. Либо, просто не понял.
Ognejar1 (2007-05-29 10:54:00) [1]Знать бы еще как. Говорил же, не знаю я этих библиотек.
Я Гость (2007-05-26 16:12:00) [2]чтобы не было мерцания нужно использоватьь буфферизацию и [11]
Ognejar1 (2007-05-25 12:38:00) [3]Стоит...
Jeer (2007-05-25 10:33:00) [4]
> Ognejar1 (24.05.07 23:41) [10]
а про SwapBuffer не забываешь ?
Ognejar1 (2007-05-24 23:41:00) [5]Сейчас перепроверил - мили. Извини за дезу...
Сперва выводил так:
// if flag=1 then glBindTexture(GL_TEXTURE_2D, MyTextureTex) // Bind the Texture to the object
// else if flag=2 then glBindTexture(GL_TEXTURE_2D, MyTextureTex1);
картинка правильная, но мерцает.
Потом вот так:
glClearColor (0.5, 0.5, 0.75, 1.0);
glClear(GL_COLOR_BUFFER_BIT);
glRasterPos2f(-0.25, -0.25);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
if flag=1 then glDrawPixels(ImageWidth, ImageHeight, GL_RGB, GL_UNSIGNED_BYTE, @MyTextureTexа)
else if flag=2 then glDrawPixels(ImageWidth, ImageHeight, GL_RGB, GL_UNSIGNED_BYTE, @MyTextureTexа1);
Теперь вместо картинки - черный прямоугольник.
homm (2007-05-24 23:12:00) [6]> дисплеи нормальные, никаких LCD, 200 мегагерц.
плакаль :)
DVM (2007-05-24 22:24:00) [7]
> но беда в том, что у меня мерцает при любой частоте экрана
> и вывода
BitBlt - это почти самый быстрый способ вывода. Мерцания быть не должно.
Покажи как выводишь.
DVM (2007-05-24 22:21:00) [8]Так уже яснее.
Теперь давай прикинем. Итак:
1) Тебе нужны миллионные (1/1 000 000) отрезки секунды.
2) Время переключения пиксела среднестатистического LCD монитора 3-8 мсек, т.е. 3-8 тысячных(!) секунды. Т.е. монитор тебе даст ограничение по точности в 1/1000 секунды не меньше. Про CRT я вообще молчу.
3) Рука - человек должен нажать кнопку на клавиатуре. Частота сканирования клавиатуры также не высока - тоже даст свое ограничение.
4) Операционная система не может гарантировать точный отсчет столь малых интервалов времени.
Тебе точно нужны миллионные доли секунды, а не тысячные?
Ognejar1 (2007-05-24 22:00:00) [9]Задача - проверка мозговой реакции человека (цепочка глаз->мозг->рука) дисплеи нормальные, никаких LCD, 200 мегагерц. Собственно, я думаю, что условие слишком суровое, но беда в том, что у меня мерцает при любой частоте экрана и вывода. И почти все тексты про быстрый вывод на С, а я в нем ни уха, ни рыла. Озверел уже.
DVM (2007-05-24 21:28:00) [10]
> но точность его должна быть такой, как я сказал.
такую точность нельзя обеспечить.
Мне вообще непонятно на кой ляд сменять изображения быстрее, чем частота обновления экрана или время реакции пиксела (для LCD монитора).
Честно говоря я все равно не понял задачи. Можно поточнее, может и придумаем что.
Ognejar1 (2007-05-24 19:14:00) [11]Уточняю.
Изображений от 2 до 3. Период вывода - разный, но точность его должна быть такой, как я сказал. Одна картинка стирает другую, затем точная пауза (до 10 секунд).
Нужен кусок кода, потому что я уже обалдел от разноязыких книжек, где все, якобы, элементарно, поэтому и не объясняется.
Блин, куда здесь пароль вводить?
antonn (2007-05-24 15:58:00) [12]стробоскоп какой то...
DVM (2007-05-24 15:57:00) [13]
> частота вывода до 20 мкс с точностью до 1-3 мкс
Ты не ошибся насчет микро- ? Если выводить через 20 микросекунд - то это за секунду будет 50 000 битмапов!!! Что это такое?
DVM (2007-05-24 15:55:00) [14]
> TBitmap максимально быстро и без миганий
BitBlt() мигает разве? Да она 1000 битмапов 800х600 в секунду может вывести.