Ускорение графики, методы |
1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
Ускорение графики, методы |
Altair |
4.07.2004 15:15
Сообщение
#1
|
Ищущий истину Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: 45 |
Очень медленно выводятся некоторые фигуры, например, окружность.
Как можно ускорить вывод графики? В программе выводятся только окружности, но много. Вывод осуществляется ОЧЕНЬ медленно. Может поможет написание процедуры Circle на асме? -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
NetAnton |
4.07.2004 15:51
Сообщение
#2
|
Пионер Группа: Пользователи Сообщений: 112 Пол: Мужской Репутация: 0 |
Могу привести тебе программку с рисованием окружности (см. присоединенный файл). Можно, в принципе, основную процедуру набросить на асме.
Очень хотелось бы взглянуть на graph.tpu, то есть на graph.pas, но где его взять - вот проблема. p.s. конечно же, мне сейчас рейтинг еще раз понизят за то что программу припер в этот раздел. Сообщение отредактировано: NetAnton - 4.07.2004 15:54 Прикрепленные файлы CIRCLE.PAS ( 2.12 килобайт ) Кол-во скачиваний: 218 -------------------- Я люблю этот форум!
|
GLuk |
4.07.2004 18:05
Сообщение
#3
|
Профи Группа: Пользователи Сообщений: 775 Пол: Мужской Репутация: 0 |
Цитата(NetAnton @ 4.07.04 12:51) Могу привести тебе программку с рисованием окружности (см. присоединенный файл). Можно, в принципе, основную процедуру набросить на асме. Очень хотелось бы взглянуть на graph.tpu, то есть на graph.pas, но где его взять - вот проблема. p.s. конечно же, мне сейчас рейтинг еще раз понизят за то что программу припер в этот раздел. С дизассемблером не пробовал поработать? |
NetAnton |
4.07.2004 18:38
Сообщение
#4
|
Пионер Группа: Пользователи Сообщений: 112 Пол: Мужской Репутация: 0 |
с тем, что tpu расклеивает в текстовый документ с подробной информацией о процедурах, переменных и т.п.? да, опыт небольшой есть
-------------------- Я люблю этот форум!
|
Altair |
4.07.2004 18:49
Сообщение
#5
|
Ищущий истину Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: 45 |
нет, дизасемблировать, значит загружать с помощью специальной проги свою прогу в память и переводить машинные инструкции в код ассемблера -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
NetAnton |
4.07.2004 19:20
Сообщение
#6
|
Пионер Группа: Пользователи Сообщений: 112 Пол: Мужской Репутация: 0 |
зачем мне объяснять, что это такое. я прекрасно знаю, что такое декомпиляция, дизассемблирование и прочие штучки -------------------- Я люблю этот форум!
|
Altair |
4.07.2004 19:48
Сообщение
#7
|
Ищущий истину Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: 45 |
тогда зачем спрашивал что это?
Цитата с тем, что tpu расклеивает Кстати не все расклеиваются. Ты я так понимаю пробовал с помощью спец. утилитки? Она вроде на tp 7 не работает ... -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
NetAnton |
4.07.2004 20:58
Сообщение
#8
|
Пионер Группа: Пользователи Сообщений: 112 Пол: Мужской Репутация: 0 |
у меня есть такие утилитки для tpu-шников для 5, 6 и 7 версии. пока не замечал ничего такого. если хочешь, выложу на свой сайт для седьмой версии. сюда экзешники не хочет цеплять.
http://netanton.narod.ru/other/TINFO70.EXE Сообщение отредактировано: NetAnton - 4.07.2004 21:03 -------------------- Я люблю этот форум!
|
Altair |
5.07.2004 6:56
Сообщение
#9
|
Ищущий истину Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: 45 |
Ладно, так есть какие-нибудь реальные способы ускорить графику, кроме асма?
-------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
APAL |
5.07.2004 9:25
Сообщение
#10
|
Смотрю... Группа: Модераторы Сообщений: 1 055 Пол: Мужской Реальное имя: Пшеничный Алексей Анатольевич Репутация: 6 |
Та прога, что была выложена, она использует стандартную процедурку вывода точек. А ведь можно попробовать работать напрямую с памятью - скорость наверняка будет больше...
P.S.: Цитата p.s. конечно же, мне сейчас рейтинг еще раз понизят за то что программу припер в этот раздел. Ай-яй-яй! -------------------- |
Altair |
5.07.2004 10:32
Сообщение
#11
|
Ищущий истину Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: 45 |
Точно, как я сразу не догадался. Спасибо, APAL.
Осталось только определить как нарисовать точку в режими 640*480 ? -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
BlackShadow |
5.07.2004 11:23
Сообщение
#12
|
Гость |
Уж лучше 13h. Там явно проще. А вообще можно было бы подумать о "прозрачной" вставке изображения. Если у тебя однотипные фигуры, то можно создать маску этой фигуры с указанием индексов цветов той или иной точки и флага прозрачности. Затем при выводе брать какую-то палитру и выводить с её помощью. Получается довольно быстро, если не пользоваться PutPixel. По сравнению с рисованием самой окружности выигрыш идёт на отсутствии каких-либо вычислений. А если фигура куда сложней... |
Altair |
5.07.2004 11:48
Сообщение
#13
|
Ищущий истину Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: 45 |
13h проще, но мне надо именно 640*480.
А можешь поподробнее про твой метод? Делов в том, что у меня выводятся только окружности, при этом разного радиуса. -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
Romtek |
14.07.2004 11:44
Сообщение
#14
|
Знаток Группа: Пользователи Сообщений: 303 Пол: Мужской Реальное имя: Роман Репутация: 2 |
Цитата(Oleg_Z) Ладно, так есть какие-нибудь реальные способы ускорить графику, кроме асма? OpenGL, DirectX... В ДОСе ты все равно быстро ничего не сделаешь. Кстати, пробовал ли ты вывод графики во Фри ? -------------------- Romiras HomeLab- материалы и статьи по разработке ПО, моделирование алгоритмов, обработка и анализ информации, нейронные сети, машинное зрение и прочее.
|
BlackShadow |
14.07.2004 12:38
Сообщение
#15
|
Гость |
Принцип примерно такой:
1). Готовишь матрицу m*n, в которой записываешь коды цвета каждого пикселя. Например: Код 0 0 1 0 0 0 1 0 1 0 1 0 2 0 1 2). Когда нужно вывести фигуру пробегаешь по массиву и вместо кода цвета подставляешь нужный цвет или пропускаешь точку вобще. Например при выводе фигуры указанного массива можно поступить так.Написать функцию DrawShtuka с четырьмя параметрами: x, y, цвет №1 и цвет №2. В функции пробежаться по этому массиву типа Код For i:=0 To 4 Do For j:=0 To 2 Do Case Matrix[i,j] Of 1: PutPixel(x+i,y+j,Color1); 2: PutPixel(x+i,y+j,Color2) End Для шибкоразноцветных фигур можно передавать массив цветов. А в идилии такая функция описывается примерно так: Код Type TIntVector=Array Of Integer; TIntMatrix=Array Of TIntVector; Procedure Draw(x,y:Integer;Matrix:TIntMatrix;Colors:TIntVector); Var i,j:Integer; Begin For i:=0 To Hi(Matrix) Do For j:=0 To Hi(Matrix[i]) Do If Matrix[i][j]<>-1 Then PutPixel(x+i,y+j,Colors[Matrix[i][j]] End; Ну, или примерно так. В твоём случае, конечно, это плохой выход. Даже, наверное, совсем не выход. Но в будующем может и пригодится |
Romtek |
14.07.2004 14:46
Сообщение
#16
|
Знаток Группа: Пользователи Сообщений: 303 Пол: Мужской Реальное имя: Роман Репутация: 2 |
Во первых, это лишнее использование памяти.
Во вторых, вряд ли увеличит скорость вывода окружностей. -------------------- Romiras HomeLab- материалы и статьи по разработке ПО, моделирование алгоритмов, обработка и анализ информации, нейронные сети, машинное зрение и прочее.
|
BlackShadow |
14.07.2004 14:59
Сообщение
#17
|
Гость |
Я про сложные фигуры. Например 20 камазов разного цвета. Проще один раз забить в массив, чем 20 раз рисовать.
|
P@sh@ |
16.07.2004 7:47
Сообщение
#18
|
Бывалый Группа: Пользователи Сообщений: 180 Пол: Мужской Репутация: 2 |
Oleg_Z
но мне надо именно 640*480 да еще в 16 цветов поди? в принципе не намного сложнее, чем в 13h, особенно в защищенном режиме с несегментированной проекцией видеопамяти... правда не совсем просто установить этот режим - видеопорты надо настраивать... но пример на асме у меня где-то был... а если в реальном режиме, то так же, по адресу A000h... только с большими разрешениями надо проецируемые сегменты видеопамяти переключать, с VESA-функциями это сделать несложно, а без них не знаю, наверное опять в видеопорты надо лезть... да еще если 4х- (или 1-) битный цвет, то придется по ORу биты складывать |
Shadow |
29.07.2004 3:32
Сообщение
#19
|
Lonely_Raven Группа: Пользователи Сообщений: 640 Пол: Мужской Репутация: 1 |
необязательно ASM, но напрямую в видео память
можно предварительные расчеты хранить в файле после запуска программы грузить их в опреативку да много способов.... ---------- но тут есть особенность оптимизация под скорость увеличивает размер программы зависимость Сообщение отредактировано: Shadow - 29.07.2004 3:34 -------------------- Программа делает то что вы ей приказали а не то что бы ВАМ хотелось бы.
МЕРФИ --------------------- RTFM - Read the fucking manual --------------------- http://www.livejournal.com/users/lonley_raven/ |
BlackShadow |
29.07.2004 12:58
Сообщение
#20
|
Гость |
Не всегда оптимизация по скорости приводит к росту размеров. Вот яркий пример:
Код Begin Asm MOV AX,0013h INT 10h MOV AX,$A000 MOV ES,AX MOV CX,100 MOV AL,$FF XOR DI,DI REP STOSB XOR AH,AH INT 16h MOV AX0003 INT 10h End End. против Код Uses Graph,Crt; Var r,m:Integer; Begin r:=DETECT; InitGraph('',r,m); SetColor(WHITE); Line(0,0,99,0); ReadKey; RestoreCRTMode End. Увеличивается только кол-во строк в исходнике, да и то не так уж сильно |
Текстовая версия | 5.06.2024 2:39 |