Member
Статус: Не в сети Регистрация: 29.05.2005 Откуда: Белгород
Ветка создана для обсуждения графических режимов и работы с ними под DOS-ом. (Pascal, C)
Первый вопрос: нужен режим не менее 65k (16M...) цветов и 640x480. Пишу на Borland C 3.0 ( ). 640x480 и 16 цветов (VGAHI) нафиг не надо.
Научился, меняя палитру, выводить 16-цветные bmp... Слышал про VESA:
Код:
asm { mov ax,4f02h mov bx,0112h int 10h }
через это прерывание устанавливается вроде режим 640x480x16M... оптимальный ли это вариант работы, да и как вообще с ним работать? или есть что-то более рациональное?
PS если у кого есть "умные" BGI дрова с такими характеристиками, буду рад взять
В стадии разработки проекты:
2DMark (тесты скорей больше проца-памяти, но рисует )
SlideShow (или даже графический просмотрщик может...)
PaintD ( Paint для DOS-а... )
_________________ Взрослеем. Возможностей стало больше, времени - меньше. долгосрочно общался: CelD2.1@3.7|A64Venice@2.6|A64SanDiego@2.7|E6420@3.2|E6750@3.5|Q9300@3.5
Member
Статус: Не в сети Регистрация: 29.05.2005 Откуда: Белгород
vo1 писал(а):
Могу драйвер дать, который поддерживает 1024х768 256 цветов!!!
было б неплохо, на ПС или где-нидь выложи. он поддерживает стандартные функции graphics.h?
вообще вывод setpixel() работает крайне медленно. есть способ быстрее выводить пиксели?
_________________ Взрослеем. Возможностей стало больше, времени - меньше. долгосрочно общался: CelD2.1@3.7|A64Venice@2.6|A64SanDiego@2.7|E6420@3.2|E6750@3.5|Q9300@3.5
void main() { double x,y,z1,z2,z3,z4,i,j,stp,eps,col,phi,t,maxcol; int gd,gm,n=0;
gd=installuserdriver("svga256",mode); gm=4; initgraph(&gd,&gm,"d:\\tc\\bgi\"); for (x=-1024/2;x<1024/2;x+=1) for (y=-768/2;y<768/2;y+=1) puttexel(x,y,z(x,y),0);
Member
Статус: Не в сети Регистрация: 29.05.2005 Откуда: Белгород
vo1 писал(а):
Пример работы с библиотекой:
чёт не пойму, как эта красота получается где взял?
vo1 писал(а):
Во, все, качай и радуйся!
Ну да, разница между 16 и 256 цветами есть...
vo1 писал(а):
Может есть, но мне они неведомы
да есть, тока надо работать через асемблер. буду спрашивать...
PS putpixel() даёт на моей профильной машине заполнение в 2.98 fps на 1024x768, а в 640x480 - 7.64 . Итого: 2,35 мегапикс./с
PS2 графический редактор прикольный тока вот твои bmp ACD See не читает...
Начал в общем я работу с модулем. Сейчас пытаюсь менять палитру для вывода 256-цветных bmp. пока не успешно
_________________ Взрослеем. Возможностей стало больше, времени - меньше. долгосрочно общался: CelD2.1@3.7|A64Venice@2.6|A64SanDiego@2.7|E6420@3.2|E6750@3.5|Q9300@3.5
Member
Статус: Не в сети Регистрация: 30.09.2006 Откуда: Ростов-на-Дону
TuneD писал(а):
чёт не пойму, как эта красота получается Very Happy где взял?
Сам написал - долго эксперементировал. А изначально прога должна была поверхности рисовать. Добавлено спустя 2 минуты, 7 секунд
TuneD писал(а):
тока вот твои bmp ACD See не читает...
Странно... Пэинт вроде читал... Добавлено спустя 14 минут, 14 секунд Посмотри, кстати, как хитро реализовано сохранение в этом формате. Долбался с нуля... Чтоб не глючило ничего... Добавлено спустя 16 минут, 22 секунды Имя файла нужно давать с расширением bmp. Имя файла не должно превышать 8 знаков.
_________________ Я знаю, что ничего не знаю. Но некоторые не знают даже этого!
Member
Статус: Не в сети Регистрация: 29.05.2005 Откуда: Белгород
vo1 писал(а):
Посмотри, кстати, как хитро реализовано сохранение в этом формате
посмотрю сегодня-завтра. дык есть же спецификации к формату bmp. я долбался с реализацией тоже дооолго во время летней практики
vo1 писал(а):
Имя файла не должно превышать 8 знаков
да это я всё знаю...
TuneD писал(а):
Сейчас пытаюсь менять палитру для вывода 256-цветных bmp. пока не успешно
успешно научился делать вывод 256-цветных bmp, предварительно конвертированных из 16M ч/з ACD See.
по качеству отличий от полноценных нет. и это в DOS-е!!!! ещё написал алгоритм "урезания" цветов до 256 из 16M. так что могу выводить любые bmp-шки правда урезание пока на уровне Paint-а, но это первый метод, пришедший в голову...
_________________ Взрослеем. Возможностей стало больше, времени - меньше. долгосрочно общался: CelD2.1@3.7|A64Venice@2.6|A64SanDiego@2.7|E6420@3.2|E6750@3.5|Q9300@3.5
int x[256],y[256],i,j,stp,eps,col,phi,t,rx,ry; int gd,gm,n=0;
int huge mode(void) { return(4); } void main() { randomize(); gd=installuserdriver("svga256",mode); gm=4; for (i=0;i<256;i++) { x[i]=1024/2; y[i]=768/2; } initgraph(&gd,&gm,"d:\\tc\\bgi");
while (1==1) {
for (i=0;i<256;i++) { t=random(8); switch (t) { case 0: x[i]+=1;break; case 1: x[i]-=1;break; case 2: y[i]+=1;break; case 3: y[i]-=1;break; case 4: x[i]+=1;y[i]+=1;break; case 5: x[i]-=1;y[i]-=1;break; case 6: y[i]-=1;x[i]+=1;break; case 7: y[i]+=1;x[i]-=1;break; } if (x[i]>1024) x[i]=1024; if (x[i]<1) x[i]=1; if (y[i]<1) y[i]=1; if (y[i]>768) y[i]=768;
putpixel(x[i],y[i],i);
}
} }
_________________ Я знаю, что ничего не знаю. Но некоторые не знают даже этого!
Member
Статус: Не в сети Регистрация: 29.05.2005 Откуда: Белгород
vo1 писал(а):
TuneD, лови еще!
прикольная вещь тока выход не предусмотрел...
PS У меня есть готовый слайдшоу для 24-битных bmp!! на ПС бери если хочешь. выводит тока 24-битные bmp и фото до 1024x768 выход: ESCAPE
_________________ Взрослеем. Возможностей стало больше, времени - меньше. долгосрочно общался: CelD2.1@3.7|A64Venice@2.6|A64SanDiego@2.7|E6420@3.2|E6750@3.5|Q9300@3.5
Member
Статус: Не в сети Регистрация: 30.09.2006 Откуда: Ростов-на-Дону
TuneD писал(а):
тока выход не предусмотрел...
Ctrl-break rullez!!!
TuneD писал(а):
PS У меня есть готовый слайдшоу для 24-битных bmp!! Супер! на ПС бери если хочешь. выводит тока 24-битные bmp и фото до 1024x768
Как замутил????? Нашел 64К - драйвер? РЕСПЕКТ!!!! Ща прогой, которая поверхности рисует,
займусь... Добавлено спустя 25 минут, 24 секунды TuneD, что-то в C++ не пашет твоя библиотека... Режимы как ставить?
_________________ Я знаю, что ничего не знаю. Но некоторые не знают даже этого!
Member
Статус: Не в сети Регистрация: 29.05.2005 Откуда: Белгород
vo1 писал(а):
Нашел 64К - драйвер? РЕСПЕКТ!!!!
полазил по исходникам инета ещё есть VESA драйвер, но либо он, либо я тугой (?) - в общем там та же палитра из 256 цветов, их мона задавать, но выгоды я так и не заметил по сравнению с SVGA256
нам книжки по компьютерной графике наконец-то выдали в универе. там видел что-то VESA-подобное. займуся я...
vo1 писал(а):
что-то в C++ не пашет твоя библиотека... Режимы как ставить?
ты про какой C++ ? Режимы как?
Код:
int huge mode(void) { return(4); // тока не понимаю зачем ето... int gd=instralluserdriver("SVGA64k", mode), gm=5; //1024x768 initgraph(&gd,&gm,"");
В общем такие варианты:
0 - 320x200
1 - 640x350
2 - 640x400
3 - 640x480
4 - 800x600
5 - 1024x768
6 - 1280x1024
А как же эмпирический тык? ты ж вроде тоже программер. у меня нет к дровам спецификаций getmaxmode() - количество режимов в драйвере
getmaxx(), getmaxy() - без комментариев... PS по поводу вывода пикселей:
1) setrgbpalette(0,R,G,B) // нужный тебе оттенок: 0<=R<32, 0<=G<64, 0<=B<32
2) putpixel(x,y,0)
короче номер цвета любой и каждый раз нужно, ибо палитры нету...
но вывод достаточно шустренький ох скока нервных клеток убил кроме 2-3 часов раскопок, пока допёр до "правильного вывода" из-за зелёного оттенка и отсутствия палитры...
ещё: если сумеешь каким-то макаром считать цвет с экрана, просвети!!!
_________________ Взрослеем. Возможностей стало больше, времени - меньше. долгосрочно общался: CelD2.1@3.7|A64Venice@2.6|A64SanDiego@2.7|E6420@3.2|E6750@3.5|Q9300@3.5
Member
Статус: Не в сети Регистрация: 30.09.2006 Откуда: Ростов-на-Дону
TuneD писал(а):
А как же эмпирический тык? ты ж вроде тоже программер. у меня нет к дровам спецификаций
Думаешь, не тыкал?
TuneD писал(а):
Код: int huge mode(void) { return(4); // тока не понимаю зачем ето... int gd=instralluserdriver("SVGA64k", mode), gm=5; //1024x768 initgraph(&gd,&gm,"");
Все равно черный экран...
Кстати, после одного из запусков ТurboС++ выкинуло в винду с ошибкой... И... изображение на мониторе сильно задрожало Дрожь прекратилась после запуска С++ с поседующим выходом из него.
Подобное наблюдается с Дос-игрой Poker3... Тоже вылетает, рабочий стол винды дрожит... Дрожь пропадает после запуска другого ДОС-приложения.
А на Х1600ХТ все запускалось!!!
Самое интересное, что твое "слайд-шоу" пашет без проблем...
_________________ Я знаю, что ничего не знаю. Но некоторые не знают даже этого!
Member
Статус: Не в сети Регистрация: 29.05.2005 Откуда: Белгород
ща кину на ПС обновлённую версию с выбором режима
Цитата:
Самое интересное, что твое "слайд-шоу" пашет без проблем
может проблема в компиляторе?
я использую Borland C++ 3.1
PS у тебя "i86.h" не завалялся. посмотри
_________________ Взрослеем. Возможностей стало больше, времени - меньше. долгосрочно общался: CelD2.1@3.7|A64Venice@2.6|A64SanDiego@2.7|E6420@3.2|E6750@3.5|Q9300@3.5
Member
Статус: Не в сети Регистрация: 29.05.2005 Откуда: Белгород
DiMMension благодарю. вкратце прощёлкал. почитаю. там всё на асме. думаю, получится ли вставками в BC обойтись?
_________________ Взрослеем. Возможностей стало больше, времени - меньше. долгосрочно общался: CelD2.1@3.7|A64Venice@2.6|A64SanDiego@2.7|E6420@3.2|E6750@3.5|Q9300@3.5
Member
Статус: Не в сети Регистрация: 19.10.2006 Откуда: Нижний Новгород
TuneD Почему нет? Только небольшой совет - если хочешь увеличить (в разы ) быстродействие, переходи полностью на ASM, так как вставки - это обращения к подпрограммам каждый раз, что ООЧЕНЬ долго (дольше обычных команд Pascal, C++, не говоря уже о чистом ASM, сам сравнивал).
Member
Статус: Не в сети Регистрация: 29.05.2005 Откуда: Белгород
DiMMension писал(а):
переходи полностью на ASM
знаешь, на нём далеко не уедешь... особенно при расширении кода программы...
скажу честно, я не силён в нём на столько, чтобы писать хоть какую-то сурьёзную прогу,.. PS какой компилятор/среду разработки посоветуешь для asm?
_________________ Взрослеем. Возможностей стало больше, времени - меньше. долгосрочно общался: CelD2.1@3.7|A64Venice@2.6|A64SanDiego@2.7|E6420@3.2|E6750@3.5|Q9300@3.5
Member
Статус: Не в сети Регистрация: 19.10.2006 Откуда: Нижний Новгород
TuneD Тогда делай на нем целиком откомпилированные модули и подключай в Pascal или C++.
Посоветовать конкретный компилятор сейчас не могу, плотно занимался программированием 10..15 лет назад, тогда использовал TASM (Borland), а в основном сидел на Turbo Pascal, немного Borland C++.
Сейчас программирую редко, отстал Кстати, тормознуло меня в развитии в свое время как раз отсутствие доступных средств обработки SVGA... Иногда порываюсь чего-нибудь подучить посовременнее, но получается все как-то урывками. Но в своей логике по-прежнему уверен, если надо будет, любой язык осилить уверен, смогу.
И тебе почему перейти на ASM посоветовал, целиком на нем прогу писать необязательно (неудобно), но модулями (содержащими готовые наборы подпрограмм) получится намного эффективнее код, а для этого ASM знать надо получше.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения