Люди! Помогите пожалуйста мне написать программу на паскале по изменению размеров изображения из файла (программа должна считывать графический файл, выводитть его на экран и изменять его размеры, как бы растягивать). Но не все так просто... Нужно сделать так, чтобы получился эффект вытягивания какого-нибудь угла изображение( или, если сказать проще, нужно "посадить" нашу картинку в произвольный четырехугольник). Я уже сделал программу с таким эффектом. Но я использовал не графический файл, а произвольный рисунок нарисованный с помощью стандартных процедур Graph-а. Да и программа работает очень медленно даже на моём Athlon-не. Не удивительно, ведь я создавал плоскость, состоящую из нескольких тысяч маленьких плоскостей(что-то типа пикселей картинки), заполнял их соответствующим цветом графического файла, и тянул их как хотел... Вообщем получается то что надо, но тормозит! Если у кого-нибудь есть кое-какие идеи отзовитесь! Буду очень рад и признателен! Заранее спасибо.
юзай опенгл. рисуешь свой четырехугольник и натягиваешь изображение как текстурку
Не, надо обязательно без Opengl или Direct3d, забыл сообщить... Важен сам принцип наложения текстуры. Все-таки научная работа....
Ускорить производительность программы можно почти в 10 раз перейдя на целочисленную арифметику. Т.е. вместо real использовать integer. Если нужна какая-то точность, то считай две поледних цифры от integer как идущие после запятой (реальное значение выдавать как integer div 100). Всякие функции типа синуса и т.д. просчитать заранее и запомнить в массиве (например mass_sin[integer]=100*sin(integer/100) ).
Советую изображение брать в формате BMP, этот формат хорошо описан и можно поискать готовую библиотеку по его чтению-записи.
Удачи!
Для тех кто не верит, вот exe-шник, только я место закрашеных четырехугольников использовал точки, быстрее пашет. Управление: обзор с помощью мыши (старался сделать как в Half-Life ), вепед W, назад S, вправо D, влево A. Щас уберу ненужные комментарии и исходник дам. Если сказать честно я пишу научную работу по Трехмерной графике, именно тут мне и надо накладывать текстуры. По-моему получилось здорово! И идея неплохая. (Программа без OpenGl и Direct3D).
Блин, я думал можно exe-ники посылать... Ладно, вот (если кто-че поймет) исходник. Для тех кто еще не понял программа на TMTPascal.
Помощь принимается и в алгоритмах. Не обязательно писать саму программу.
В программе все очень напутано... Я просто забросил эту тему, потому что думал что никто не ответит, занялся другим делом, из-за этого и не довёл плод моего умственного труда до нормального состояния.
Прикрепленные файлы
Paskal3D.pas ( 6.49 килобайт )
Кол-во скачиваний: 297
Молодец... Значит, Mouse.pas и Engine.pas мы по телепатическому каналу принимаем? Извини, сегодня этот канал закрыт, а наши штатные телепаты - в отпуске.
Это я Pentagon, только с гостя зашел....
Единственную возможную "идею" ты получил в первом же ответе. Все остальное называется "Повторное изобретение велосипеда". Тебе охота этим заниматься? You Are Welcome...
Pentagon, хватит цирка, или ты показываешь исходники (не беспокойся о своем авторском праве, здесь твои исходники никому нафиг не нужны) или не занимаешься пустотрепством!
<censored>: "мне не нужны тексты программ, мне НЕ НУЖНА помощь в улучшении моего алгоритма, мне нужен НОВЫЙ алгоритм в ТЕКСТОВОМ виде".
Максимум что я могу предложить это скомпилированнные файлы. Исходники я не дам (боюсь ).
Мне кажется того файла, который я дал, вполне достаточно. Mouse.pas и Engine.pas вам знать не обязательно. Это вообще не относится к моей просьбе.
М | Можешь скомпилированные файлы не давать... Внимательно читай здесь: http://forum.pascal.net.ru/rules.html |
Ну, тогда и тот ответ, который ты мог бы получить тебе тоже знать не обязательно... Вполне достаточно того, что предложил FreeMan...
[OffTop]Интересно получается... Человек пришел, жалуясь на то, что у него программа медленно работает... Предложили одно - нет, это нельзя, другие идеи давайте. "Покажи, как ты делаешь" - дает совершенно не то, что нужно, сам движок (который надо оптимизировать в первую очередь, кстати) остается тайной... Внимание, вопрос: Зачем спрашивал?[/OffTop]
А теперь вопрос к автору топика на засыпку...
У меня есть 2 программы:
1)
uses unit1;
Var a: array[1 .. 20000] of integer;
begin
InitArray(A);
PrintArray(A);
end.
uses unit2;
Var a: array[1 .. 20000] of integer;
begin
InitArray(A);
PrintArray(A);
end.
Тебе нужно обычное текстурирование. Только обычно для этого оперируют не 4-мя точками, а 3-мя, .т.е. натягивают текстуру на треугольник. В твоем случае можно разбить на 2 треугольника и все. Вот первая ссылка из гугля для этого http://www.enlight.ru:8002/faq3d/articles/42.htm
Если хочется все таки на 4, могу поискать дома, изобретал я этот велосипед лет 10 назад, возможно сохранилось. Но треугольниками быстрее будет.