IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Graph, метод вывода
sheka
сообщение 12.06.2009 17:21
Сообщение #1


Я.
****

Группа: Пользователи
Сообщений: 809
Пол: Мужской
Реальное имя: Саша

Репутация: -  11  +


я хочу сделать мультипликацию с помощью видеостраниц.
вопрос:
когда делаю вывод с помощью setactivepage,setvisualpage - после вывода второй страицы содержимое первой смещается куда-то вниз, а не исчезает.
а если делаю как прочитал в одной книге:
Код
procedure init;
var gd,gm:integer;
begin
gd:=detect;
initgraph(gd,gm,'');
if gd in [HercMono,EGA,EGA64,MCGA,VGA] then  / разница в наличии
  if gd<>HercMono then  SetGraphMode(gm-1);   \ этих строчек
end;

то изображение получается искаженным (вытянутым по вертикали).

почему? должно ли так быть?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 12.06.2009 17:29
Сообщение #2


Гость






Вообще-то надо инициализировать режим, в котором больше одной видеостраницы. В режиме VgaHi страница всего одна, он не пойдет. Инициализируй графику так:
g_driver := VGA; g_mode := VGAMed;
InitGraph(g_driver, g_mode, '');
и учти, что разрешение = 640*350 при двух видеостраницах
 К началу страницы 
+ Ответить 
sheka
сообщение 12.06.2009 22:35
Сообщение #3


Я.
****

Группа: Пользователи
Сообщений: 809
Пол: Мужской
Реальное имя: Саша

Репутация: -  11  +


а три страницы нельзя?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 12.06.2009 23:30
Сообщение #4


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(sheka @ 12.06.2009 23:35) *
а три страницы нельзя?
Нет)).
Наличие двух страниц дает принципиальную возможность подготовки данных для визуализации без мелькания. Это как бы необходимость. Две страницы позволяют обработать любую ситуацию. Три (четыре, пять..) - это уже типа для удобства. Это лишнее.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
sheka
сообщение 12.06.2009 23:54
Сообщение #5


Я.
****

Группа: Пользователи
Сообщений: 809
Пол: Мужской
Реальное имя: Саша

Репутация: -  11  +


то есть если мне надо больше, то просто заменять рисунок на предыдущей?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 13.06.2009 0:11
Сообщение #6


Гость






Да, просто меняешь рисунок и переключаешься на другую страницу.

Вся суть - в том, что самого процесса перерисовки не видно, смена активной страницы происходит мгновенно (по-моему, за один проход луча по экрану, но я могу ошибаться), и не видно мерцания, которое получается, когда стирается старое, и рисуется новое изображение, поскольку вот это самое затирание старого и рисование нового делается на НЕактивной странице, а показывается тебе сразу результат...

В принципе, есть видеорежимы и с четырьмя страницами (это EGA -> EGALo и VGA -> VGALo), но ты будешь только путаться с ними. В 4-х видеостраницах есть смысл только, если у тебя всего 4 кадра, ты сразу заполняешь все 4 страницы, каждую своим кадром, а потом просто меняешь активную страницу... Во всех остальных случаях выгоднее работать с 2-мя страницами...
 К началу страницы 
+ Ответить 
Lapp
сообщение 13.06.2009 0:50
Сообщение #7


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(volvo @ 13.06.2009 1:11) *

смена активной страницы происходит мгновенно (по-моему, за один проход луча по экрану, но я могу ошибаться)
Грубо говоря, между проходами. То есть этот проход делался из страницы 0, а следующий будет из страницы 1. Мигание исключено, если правильно подготовить данные.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Ozzя
сообщение 15.06.2009 7:44
Сообщение #8


Гуру
*****

Группа: Пользователи
Сообщений: 1 220
Пол: Мужской

Репутация: -  16  +


Цитата
Мигание исключено, если правильно подготовить данные.

Вроде как нужно отслеживать vertical retrace?


 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 15.06.2009 7:53
Сообщение #9


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Ozzя @ 15.06.2009 8:44) *
Вроде как нужно отслеживать vertical retrace?
Я полагаю, что SetVisualPage это делает. Никогда не наблюдал проблем с этим. Впрочем, это было настолько давно..


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Ozzя
сообщение 15.06.2009 8:13
Сообщение #10


Гуру
*****

Группа: Пользователи
Сообщений: 1 220
Пол: Мужской

Репутация: -  16  +


Не знаю кода от Borland не видел, но мигание при SetVisualPage даже на 386DX-40 явное. Снимается только ожиданием VR
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 15.06.2009 10:46
Сообщение #11


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Ozzя @ 15.06.2009 9:13) *
мигание при SetVisualPage даже на 386DX-40 явное. Снимается только ожиданием VR
Хым, странно.. Как грится, "либо одно из двух, либо я не прав")). Не помню мигания.. И проверить негде сейчас((.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 15.06.2009 11:15
Сообщение #12


Гость






Все зависело от версии VBE (VESA BIOS Extension), на версии 1.2 при SetVisualPage не было синхронизации с VerticalRetrace, и надо было добавлять код ожидания вручную. Начиная со второй VBE это делается автоматически. Оззя, ты ж TMT-шник? Посмотри описание SetVisualPage в доках на TMT, зачем там по твоему введен второй параметр? wink.gif
 К началу страницы 
+ Ответить 
Ozzя
сообщение 17.06.2009 13:28
Сообщение #13


Гуру
*****

Группа: Пользователи
Сообщений: 1 220
Пол: Мужской

Репутация: -  16  +


volvo
Стесняюсь сказать, но на сей 3-шке VGA стоит 256 kb (Phoenix BIOS). Так что, никаким vBE здеся и не пахнет близко blink.gif
Всё тестировалось на VGA Med.
Видел я код тмтшный, он как раз на vbe и based. 4-ка ТМТ ж не держит 640х350Х4bit
А, кстати, где-то на сорсах Вадим Бодров объяснял сей глюк/фичу. Пороюсь, постраюсь найти
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 21.06.2025 11:52
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"