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

> Правила раздела!

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

2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
> Ускорение графики, методы
сообщение
Сообщение #1


Ищущий истину
******

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

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


Очень медленно выводятся некоторые фигуры, например, окружность.
Как можно ускорить вывод графики?

В программе выводятся только окружности, но много.
Вывод осуществляется ОЧЕНЬ медленно.
Может поможет написание процедуры Circle на асме?


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Пионер
**

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

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


Могу привести тебе программку с рисованием окружности (см. присоединенный файл). Можно, в принципе, основную процедуру набросить на асме.
Очень хотелось бы взглянуть на graph.tpu, то есть на graph.pas, но где его взять - вот проблема.
p.s. конечно же, мне сейчас рейтинг еще раз понизят за то что программу припер в этот раздел.

Сообщение отредактировано: NetAnton -


Прикрепленные файлы
Прикрепленный файл  CIRCLE.PAS ( 2.12 килобайт ) Кол-во скачиваний: 355


--------------------
Я люблю этот форум!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Профи
****

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

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


Цитата(NetAnton @ 4.07.04 12:51)
Могу привести тебе программку с рисованием окружности (см. присоединенный файл). Можно, в принципе, основную процедуру набросить на асме.
Очень хотелось бы взглянуть на graph.tpu, то есть на graph.pas, но где его взять - вот проблема.
p.s. конечно же, мне сейчас рейтинг еще раз понизят за то что программу припер в этот раздел.

С дизассемблером не пробовал поработать?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Пионер
**

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

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


с тем, что tpu расклеивает в текстовый документ с подробной информацией о процедурах, переменных и т.п.? да, опыт небольшой есть


--------------------
Я люблю этот форум!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Ищущий истину
******

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

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


lol.gif
нет, дизасемблировать, значит загружать с помощью специальной проги свою прогу в память и переводить машинные инструкции в код ассемблера


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Пионер
**

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

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


lol.gif
зачем мне объяснять, что это такое. я прекрасно знаю, что такое декомпиляция, дизассемблирование и прочие штучки


--------------------
Я люблю этот форум!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Ищущий истину
******

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

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


тогда зачем спрашивал что это?
Цитата
с тем, что tpu расклеивает

Кстати не все расклеиваются.
Ты я так понимаю пробовал с помощью спец. утилитки?
Она вроде на tp 7 не работает ...


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Пионер
**

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

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


у меня есть такие утилитки для tpu-шников для 5, 6 и 7 версии. пока не замечал ничего такого. если хочешь, выложу на свой сайт для седьмой версии. сюда экзешники не хочет цеплять.

http://netanton.narod.ru/other/TINFO70.EXE

Сообщение отредактировано: NetAnton -


--------------------
Я люблю этот форум!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Ищущий истину
******

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

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


Ладно, так есть какие-нибудь реальные способы ускорить графику, кроме асма?


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Смотрю...
*****

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

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


Та прога, что была выложена, она использует стандартную процедурку вывода точек. А ведь можно попробовать работать напрямую с памятью - скорость наверняка будет больше...


P.S.:
Цитата
p.s. конечно же, мне сейчас рейтинг еще раз понизят за то что программу припер в этот раздел.

Ай-яй-яй! angry.gif


--------------------
Если что-то не делает того, что вы запланировали ему делать - это еще не означает, что оно бесполезно.
--------------------
Прежде, чем задать вопрос - Правила :: FAQ :: Поиск
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Ищущий истину
******

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

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


Точно, как я сразу не догадался. Спасибо, APAL.
Осталось только определить как нарисовать точку в режими 640*480 ?


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Гость






smile.gif
Уж лучше 13h. Там явно проще.
А вообще можно было бы подумать о "прозрачной" вставке изображения. Если у тебя однотипные фигуры, то можно создать маску этой фигуры с указанием индексов цветов той или иной точки и флага прозрачности. Затем при выводе брать какую-то палитру и выводить с её помощью. Получается довольно быстро, если не пользоваться PutPixel. По сравнению с рисованием самой окружности выигрыш идёт на отсутствии каких-либо вычислений. А если фигура куда сложней...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Ищущий истину
******

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

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


13h проще, но мне надо именно 640*480.
А можешь поподробнее про твой метод?
Делов в том, что у меня выводятся только окружности, при этом разного радиуса.


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Знаток
****

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

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


Цитата(Oleg_Z)
Ладно, так есть какие-нибудь реальные способы ускорить графику, кроме асма?

OpenGL, DirectX... smile.gif

В ДОСе ты все равно быстро ничего не сделаешь.
Кстати, пробовал ли ты вывод графики во Фри ?


--------------------
Romiras HomeLab- материалы и статьи по разработке ПО, моделирование алгоритмов, обработка и анализ информации, нейронные сети, машинное зрение и прочее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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;

Ну, или примерно так.

В твоём случае, конечно, это плохой выход. Даже, наверное, совсем не выход. Но в будующем может и пригодится smile.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Знаток
****

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

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


Во первых, это лишнее использование памяти.
Во вторых, вряд ли увеличит скорость вывода окружностей.


--------------------
Romiras HomeLab- материалы и статьи по разработке ПО, моделирование алгоритмов, обработка и анализ информации, нейронные сети, машинное зрение и прочее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Гость






Я про сложные фигуры. Например 20 камазов разного цвета. Проще один раз забить в массив, чем 20 раз рисовать.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #18


Бывалый
***

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

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


Oleg_Z
но мне надо именно 640*480
да еще в 16 цветов поди?

в принципе не намного сложнее, чем в 13h, особенно в защищенном режиме с несегментированной проекцией видеопамяти... правда не совсем просто установить этот режим - видеопорты надо настраивать... но пример на асме у меня где-то был...
а если в реальном режиме, то так же, по адресу A000h... только с большими разрешениями надо проецируемые сегменты видеопамяти переключать, с VESA-функциями это сделать несложно, а без них не знаю, наверное опять в видеопорты надо лезть...
да еще если 4х- (или 1-) битный цвет, то придется по ORу биты складывать
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #19


Lonely_Raven
****

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

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


необязательно ASM, но напрямую в видео память
можно предварительные расчеты хранить в файле
после запуска программы грузить их в опреативку
да много способов....
----------
но тут есть особенность оптимизация под скорость
увеличивает размер программы зависимость smile.gif

Сообщение отредактировано: Shadow -


--------------------
Программа делает то что вы ей приказали а не то что бы ВАМ хотелось бы.
МЕРФИ
---------------------
RTFM - Read the fucking manual
---------------------
http://www.livejournal.com/users/lonley_raven/
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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.

Увеличивается только кол-во строк в исходнике, да и то не так уж сильно smile.gif
 К началу страницы 
+ Ответить 

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

 





- Текстовая версия 24.12.2024 7:50
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name