Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

СОС!!! (Быстрый вывод изображения. 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 в секунду может вывести.


Наверх

Титульная страница Поиск, карта сайта Написать письмо