| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > Загрузка изображения без расстягивания |
| Автор: ecspertiza 17.9.2009, 14:50 | ||||
| Начну с того что в OpenGL валенок по сравнению со мной доцент химико-технических наук, поэтому поправте если буду пороть чего нибудь не то, суть такова нужно загрузить на сцену изображение, я пока пользовался только так загрузка изображения
зате собственно рисование
вобщем самое простое, естественно оно расстягивается по всей поверхности, а как его загрузить так что бы оно не дефформировалось(не расстягивалось) ? |
| Автор: Solomon 18.9.2009, 10:38 |
| я ничего не понял если честно Что тебе требуется? нарисовать текстуру не на всем QUADS а только на части его? или что значит загрузить что бы оно не дефформировалось???? |
| Автор: ecspertiza 18.9.2009, 11:37 |
| Ну да немного странно объяснил. Наверное это оно, просто есть массив изображений у одних высота больше чем ширина, у других наоборот, вот и хотелось бы их загрузить таким образом что бы параметры ширины и высоты не изменялись, а если и изменялись то пропорционально, в коде выше, все изображения примут форму квадрата. |
| Автор: Solomon 21.9.2009, 14:19 |
| ecspertiza, ну ты же когда квад строишь, то задаешь координаты вершин... посмотри внимательно в свой код... Т.е. при рисовании вершин квада просто отталкивайся от размеров текстуры... попробуй сам это реализовать, если не получиться пиши... помогу |
| Автор: ecspertiza 24.9.2009, 12:17 | ||
Видимо помощь все таки потребуется, я пока накидал вот так вот
width и height это ширина и высота изображения в соответствии с ними я изменяю размер поверхности, ну чую что это неверно, ибо здесь еще нужно как то учитывать пропорции изображения и видимо разрешение экрана. Вот пока не знаю как. |
| Автор: Solomon 25.9.2009, 14:06 | ||||
ecspertiza, сделай следующую проекцию
далее при рисовании ты уже будешь отталкиваться от размеров... примерно так... а там поглядишь.. могу ошибиться
где posX, posY соответственно позиция картинки на экране imageWidth, imageHeight - размеры картинки в пикселах так же почитай этот http://pmg.org.ru/nehe/nehe21.htm |
| Автор: Rickert 28.9.2009, 10:30 |
| ecspertiza, а вы не в курсе, что все текстуры должны быть ТОЛЬКО квадратными, а их размеры кратны 2? Если вам нужна не квадратная текстура, то тут сложнее будет. Допустим у вас изображение 68х80 (ш/в). Начинается процесс загрузки; смотрим самую большую цифру в нашем размере - 80. Ближайшее число, кратное двойке - это 128 (в 64 - картинка вся не влезет); отводим память под изображение размером 128х128; в область 68х80 копируем наше изображение, остальная часть картинки - пусть будет забита нулями(т.е. будет чёрной). Текстура готова, можем сказать opengl чтобы он её загрузил в видео память; теперь дело за малым - надо правильно наложить текстуру на наш объект; за это ответственны UV координаты; теперь у вас минимум будет, как и раньше - 0 и 0, а максимум - 0.68 (U) и 0.8 (V). |
| Автор: Rickert 28.9.2009, 12:02 |
| Solomon, не понял. С каких пор это не аксиома? Нет, понятное дело что мипмап карты можно построить из не квадратных изображений, но они будут искажены. |
| Автор: Solomon 28.9.2009, 13:09 |
| Rickert, Ну тут все зависит от контекста использования... в 2Д, к примеру, очень даже активно используються не квадратные текстуры. А судя из поставленного вопроса обсуждался именно вывод 2Д картинки... Но опять же я не буду говорить что я категорически не соглашаюсь с твоей точкой зрения... p.s. ладно не будем разводить флейм и путать человека... |
| Автор: ecspertiza 30.9.2009, 16:36 |
| Вот что у меня получилось навоять(в аттаче), конечно с пропорциями изображений я немного накосячил, ещё вопрос не знаю можно ли сюда тоже отписать, я попробовал реализовать отражение и чё то всё совсем плохо стало, если что торкните носом где я туплю. Для того что бы пример заработал нужно в папке с exe-шником создать папку image и закинуть туда несколько картинок с именами от 1 до 11 включительно. |
| Автор: just_geek 30.9.2009, 16:55 |
Если сильно приперло, можешь воспользоватся расширениями, которые позволяют работать NPOT текстурами. Естественно у них есть ограничения, в отличии от POT текстур.
p.s. на Intel'ax с ними может быть проблема.Л |
| Автор: Rickert 1.10.2009, 06:55 |
| И не только на интелах. Например GL_NV_texture_rectangle является расширением от NVIDIA, следоватльено на других видяхах могут быть проблемы. |