Люди! Помогите пожалуйста мне написать программу на паскале по изменению размеров изображения из файла (программа должна считывать графический файл, выводитть его на экран и изменять его размеры, как бы растягивать). Но не все так просто... Нужно сделать так, чтобы получился эффект вытягивания какого-нибудь угла изображение( или, если сказать проще, нужно "посадить" нашу картинку в произвольный четырехугольник). Я уже сделал программу с таким эффектом. Но я использовал не графический файл, а произвольный рисунок нарисованный с помощью стандартных процедур Graph-а. Да и программа работает очень медленно даже на моём Athlon-не. Не удивительно, ведь я создавал плоскость, состоящую из нескольких тысяч маленьких плоскостей(что-то типа пикселей картинки), заполнял их соответствующим цветом графического файла, и тянул их как хотел... Вообщем получается то что надо, но тормозит! Если у кого-нибудь есть кое-какие идеи отзовитесь! Буду очень рад и признателен! Заранее спасибо.
FreeMan
7.08.2006 15:24
юзай опенгл. рисуешь свой четырехугольник и натягиваешь изображение как текстурку
Pentagon
7.08.2006 20:32
Не, надо обязательно без Opengl или Direct3d, забыл сообщить... Важен сам принцип наложения текстуры. Все-таки научная работа....
Гость
8.08.2006 12:06
Ускорить производительность программы можно почти в 10 раз перейдя на целочисленную арифметику. Т.е. вместо real использовать integer. Если нужна какая-то точность, то считай две поледних цифры от integer как идущие после запятой (реальное значение выдавать как integer div 100). Всякие функции типа синуса и т.д. просчитать заранее и запомнить в массиве (например mass_sin[integer]=100*sin(integer/100) ). Советую изображение брать в формате BMP, этот формат хорошо описан и можно поискать готовую библиотеку по его чтению-записи. Удачи!
volvo
11.08.2006 20:37
Цитата(Pentagon @ 7.08.2006 11:06)
Я уже сделал программу с таким эффектом. <...> Да и программа работает очень медленно даже на моём Athlon-не. <...> Вообщем получается то что надо, но тормозит!
Ну, если у тебя уже получилось то, что надо - может быть ты покажешь, КАК ты это делал? А вдруг можно будет ускорить программу (может быть и не только в 10 раз, а на порядки) Не хочется просто второй раз заниматься изобретением того же самого велосипеда...
(программу присоединяй к сообщению в виде файла, а не вставляй сюда ее текст)
Pentagon
18.08.2006 13:46
Для тех кто не верит, вот exe-шник, только я место закрашеных четырехугольников использовал точки, быстрее пашет. Управление: обзор с помощью мыши (старался сделать как в Half-Life ), вепед W, назад S, вправо D, влево A. Щас уберу ненужные комментарии и исходник дам. Если сказать честно я пишу научную работу по Трехмерной графике, именно тут мне и надо накладывать текстуры. По-моему получилось здорово! И идея неплохая. (Программа без OpenGl и Direct3D).
volvo
18.08.2006 14:18
Цитата(Pentagon @ 18.08.2006 9:46)
Для тех кто не верит, вот exe-шник
Дело не в "верит" - "не верит"... Здесь - не форум любителей гадания на ромашках. Никто не сомневается, что твоя программа работает, НО... Ты что думаешь, чтобы разобраться КАК она работает (и, возможно, ускорить ее) кто-то будет ее дизассемблировать? По-моему, ты ошибаешься, тебе так не кажется?
Если нужна помощь - приводи исходник. EXE будет удален (читай правила форума, пункт 10...)
Pentagon
18.08.2006 14:31
Блин, я думал можно exe-ники посылать... Ладно, вот (если кто-че поймет) исходник. Для тех кто еще не понял программа на TMTPascal.
Помощь принимается и в алгоритмах. Не обязательно писать саму программу.
В программе все очень напутано... Я просто забросил эту тему, потому что думал что никто не ответит, занялся другим делом, из-за этого и не довёл плод моего умственного труда до нормального состояния.
volvo
19.08.2006 16:41
Молодец... Значит, Mouse.pas и Engine.pas мы по телепатическому каналу принимаем? Извини, сегодня этот канал закрыт, а наши штатные телепаты - в отпуске.
Гость
12.09.2006 17:32
Цитата(volvo @ 19.08.2006 12:41)
Молодец... Значит, Mouse.pas и Engine.pas мы по телепатическому каналу принимаем? Извини, сегодня этот канал закрыт, а наши штатные телепаты - в отпуске.
Слушай мне не нужны тексты программ, мне не нужна помощь в улучшении моего алгоритма, мне нужен НОВЫЙ алгоритм в ТЕКСТОВОМ виде, и я спросил: у кого есть какие идеи....... И я считаю что тем людям, которые это читают не нужен текст моей проги...
Гость
12.09.2006 17:33
Это я Pentagon, только с гостя зашел....
volvo
12.09.2006 17:51
Единственную возможную "идею" ты получил в первом же ответе. Все остальное называется "Повторное изобретение велосипеда". Тебе охота этим заниматься? You Are Welcome...
Pentagon
13.09.2006 18:47
Цитата(volvo @ 12.09.2006 13:51)
Все остальное называется "Повторное изобретение велосипеда".
По-моему я рассказал свою идею в первом сообщении. Я не прошу её опять изобретать.
Altair
14.09.2006 12:11
Pentagon, хватит цирка, или ты показываешь исходники (не беспокойся о своем авторском праве, здесь твои исходники никому нафиг не нужны) или не занимаешься пустотрепством!
Цитата
Я не прошу её опять изобретать.
не просишь изобретать, тогда дай его целиком а не без колес...
Pentagon
14.09.2006 18:41
<censored>: "мне не нужны тексты программ, мне НЕ НУЖНА помощь в улучшении моего алгоритма, мне нужен НОВЫЙ алгоритм в ТЕКСТОВОМ виде".
Максимум что я могу предложить это скомпилированнные файлы. Исходники я не дам (боюсь ).
Мне кажется того файла, который я дал, вполне достаточно. Mouse.pas и Engine.pas вам знать не обязательно. Это вообще не относится к моей просьбе.
М
Можешь скомпилированные файлы не давать... Внимательно читай здесь: Правила (пункт 10)
volvo
14.09.2006 19:32
Ну, тогда и тот ответ, который ты мог бы получить тебе тоже знать не обязательно... Вполне достаточно того, что предложил FreeMan...
[OffTop]Интересно получается... Человек пришел, жалуясь на то, что у него программа медленно работает... Предложили одно - нет, это нельзя, другие идеи давайте. "Покажи, как ты делаешь" - дает совершенно не то, что нужно, сам движок (который надо оптимизировать в первую очередь, кстати) остается тайной... Внимание, вопрос: Зачем спрашивал?[/OffTop]
А теперь вопрос к автору топика на засыпку...
У меня есть 2 программы: 1)
uses unit1; Var a: array[1 .. 20000] of integer; begin InitArray(A); PrintArray(A); end.
2)
uses unit2; Var a: array[1 .. 20000] of integer; begin InitArray(A); PrintArray(A); end.
Так вот, что я хотел спросить у тебя... Почему первая отрабатывает за полсекунды, а вторая - за минуту? Забыл совсем, содержимое Unit1/Unit2 тебе знать СОВЕРШЕННО необязательно, как ты, вероятно, догадался...
Так как насчет ответа?
P.S. А за оскорбление получаешь премод на неделю. Учись вести себя прилично. Пригодится...
Malice
14.09.2006 20:32
Тебе нужно обычное текстурирование. Только обычно для этого оперируют не 4-мя точками, а 3-мя, .т.е. натягивают текстуру на треугольник. В твоем случае можно разбить на 2 треугольника и все. Вот первая ссылка из гугля для этого http://www.enlight.ru:8002/faq3d/articles/42.htm Если хочется все таки на 4, могу поискать дома, изобретал я этот велосипед лет 10 назад, возможно сохранилось. Но треугольниками быстрее будет.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.