Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Загрузка изображения без расстягивания 
:(
    Опции темы
ecspertiza
Дата 17.9.2009, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 3.11.2008
Где: г.Смоленск

Репутация: нет
Всего: 5



Начну с того что в OpenGL валенок по сравнению со мной доцент химико-технических наук, поэтому поправте если буду пороть чего нибудь не то, суть такова нужно загрузить на сцену изображение, я пока пользовался только так

загрузка изображения

Код

        QPixmap pxm;
        pxm.load(QCoreApplication::applicationDirPath()+"/image/"+QString::number(i)+".jpg");

        GLuint texture = bindTexture(pxm,GL_TEXTURE_2D,GL_RGBA);


зате собственно рисование

Код

            glTranslatef(0.0,0.0,0.0);
            glBindTexture(GL_TEXTURE_2D, texture);
            glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
            glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
            glBegin(GL_QUADS);
                glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f,  0.0f);    // Низ лево
                glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f,  0.0f);    // Низ право
                glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f,  -1.0f,  0.0f);    // Верх право
                glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f,  0.0f);    // Верх лево
            glEnd();


вобщем самое простое, естественно оно расстягивается по всей поверхности, а как его загрузить так что бы оно не дефформировалось(не расстягивалось) ?


--------------------
С уважением,
мастер конфетного цеха!

онлайн компилер
залип
PM MAIL   Вверх
Solomon
  Дата 18.9.2009, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 471
Регистрация: 23.1.2006
Где: Украина Киев

Репутация: нет
Всего: 2



я ничего не понял если честно  smile 

Что тебе требуется? нарисовать текстуру не на всем QUADS  а только на части его? или что значит загрузить что бы оно не дефформировалось????



--------------------
Если не идти до конца к поставленным целям и не пытатся их достигнуть, каким бы тяжелым не казался путь, то лучше и не ставь их перед собой, но тот кто не ставит перед собой труднодоступные цели, никогда не ощутит эйфорию настоящей победы... победы над миром...
Соломон 2008
PM MAIL ICQ GTalk YIM   Вверх
ecspertiza
Дата 18.9.2009, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 3.11.2008
Где: г.Смоленск

Репутация: нет
Всего: 5



Ну да немного странно объяснил.


Цитата(Solomon @  18.9.2009,  10:38 Найти цитируемый пост)
нарисовать текстуру не на всем QUADS  а только на части его


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


--------------------
С уважением,
мастер конфетного цеха!

онлайн компилер
залип
PM MAIL   Вверх
Solomon
Дата 21.9.2009, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 471
Регистрация: 23.1.2006
Где: Украина Киев

Репутация: нет
Всего: 2



ecspertiza, ну ты же когда квад строишь, то задаешь координаты вершин... посмотри внимательно в свой код... 
Т.е. при рисовании вершин квада просто отталкивайся от размеров текстуры...

попробуй сам это реализовать, если не получиться пиши... помогу


--------------------
Если не идти до конца к поставленным целям и не пытатся их достигнуть, каким бы тяжелым не казался путь, то лучше и не ставь их перед собой, но тот кто не ставит перед собой труднодоступные цели, никогда не ощутит эйфорию настоящей победы... победы над миром...
Соломон 2008
PM MAIL ICQ GTalk YIM   Вверх
ecspertiza
Дата 24.9.2009, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 3.11.2008
Где: г.Смоленск

Репутация: нет
Всего: 5



Видимо помощь все таки потребуется, я пока накидал вот так вот

Код

if (width > height)
        {
                    glTexCoord2f(0.0f, 0.0f);glVertex3f(0.0,0.0,0.0);
                    glTexCoord2f(1.0f, 0.0f);glVertex3f(2,0,0.0);
                    glTexCoord2f(1.0f, 1.0f);glVertex3f(2,2,0.0);
                    glTexCoord2f(0.0f, 1.0f);glVertex3f(0,2,0.0);
        }else
        {
            glTexCoord2f(0.0f, 0.0f);glVertex3f(0.0,0.0,0.0);
            glTexCoord2f(1.0f, 0.0f);glVertex3f(1.5,0,0.0);
            glTexCoord2f(1.0f, 1.0f);glVertex3f(1.5,2,0.0);
            glTexCoord2f(0.0f, 1.0f);glVertex3f(0,2,0.0);
        }


width и height это ширина и высота изображения в соответствии с ними я изменяю размер поверхности, ну чую что это неверно, ибо здесь еще нужно как то учитывать пропорции изображения и видимо разрешение экрана.

Вот пока не знаю как.  


--------------------
С уважением,
мастер конфетного цеха!

онлайн компилер
залип
PM MAIL   Вверх
Solomon
Дата 25.9.2009, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 471
Регистрация: 23.1.2006
Где: Украина Киев

Репутация: нет
Всего: 2



ecspertiza, сделай следующую проекцию 

Код

glMatrixMode(GL_PROJECTION);
 glLoadIdentity();             
 glOrtho(0.0f, screen_width, screen_height, 0.0f, -1.0f, 1.0f); 
 glMatrixMode(GL_MODELVIEW);    


далее при рисовании ты уже будешь отталкиваться от размеров... примерно так... а там поглядишь.. могу ошибиться 
Код

 glTexCoord2f(0.0f, 0.0f);glVertex3f(posX,              posY,               0.0f);
 glTexCoord2f(1.0f, 0.0f);glVertex3f(posX + imageWidth, posY,               0.0f);
glTexCoord2f(1.0f, 1.0f);glVertex3f (posX + imageWidth, posY + imageHeight, 0.0f);
glTexCoord2f(0.0f, 1.0f);glVertex3f(posX,               posY + imageHeight, 0.0f);

где posX, posY  соответственно позиция картинки на экране
imageWidth, imageHeight - размеры картинки в пикселах

так же почитай этот урок



--------------------
Если не идти до конца к поставленным целям и не пытатся их достигнуть, каким бы тяжелым не казался путь, то лучше и не ставь их перед собой, но тот кто не ставит перед собой труднодоступные цели, никогда не ощутит эйфорию настоящей победы... победы над миром...
Соломон 2008
PM MAIL ICQ GTalk YIM   Вверх
Rickert
Дата 28.9.2009, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 2
Всего: 52



ecspertiza, а вы не в курсе, что все текстуры должны быть ТОЛЬКО квадратными, а их размеры кратны 2? Если вам нужна не квадратная текстура, то тут сложнее будет.
Допустим у вас изображение 68х80 (ш/в). Начинается процесс загрузки; смотрим самую большую цифру в нашем размере - 80. Ближайшее число, кратное двойке - это 128 (в 64 - картинка вся не влезет); отводим память под изображение размером 128х128; в область 68х80 копируем наше изображение, остальная часть картинки - пусть будет забита нулями(т.е. будет чёрной). Текстура готова, можем сказать opengl чтобы он её загрузил в видео память; теперь дело за малым - надо  правильно наложить текстуру на наш объект; за это ответственны UV координаты; теперь у вас минимум будет, как и раньше - 0 и 0, а максимум - 0.68 (U) и 0.8 (V).


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
Solomon
Дата 28.9.2009, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 471
Регистрация: 23.1.2006
Где: Украина Киев

Репутация: нет
Всего: 2



Цитата(Rickert @  28.9.2009,  09:30 Найти цитируемый пост)
ecspertiza, а вы не в курсе, что все текстуры должны быть ТОЛЬКО квадратными, а их размеры кратны 2?


Ну я бы не говорил это как аксиому... это скорее рекомендация...очень хорошая рекомендация


--------------------
Если не идти до конца к поставленным целям и не пытатся их достигнуть, каким бы тяжелым не казался путь, то лучше и не ставь их перед собой, но тот кто не ставит перед собой труднодоступные цели, никогда не ощутит эйфорию настоящей победы... победы над миром...
Соломон 2008
PM MAIL ICQ GTalk YIM   Вверх
Rickert
Дата 28.9.2009, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 2
Всего: 52



Solomon, не понял. С каких пор это не аксиома? Нет, понятное дело что мипмап карты можно построить из не квадратных изображений, но они будут искажены.


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
Solomon
Дата 28.9.2009, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 471
Регистрация: 23.1.2006
Где: Украина Киев

Репутация: нет
Всего: 2



Rickert, Ну тут все зависит от контекста использования... в 2Д, к примеру, очень даже активно используються не квадратные текстуры. А судя из поставленного вопроса обсуждался именно вывод 2Д картинки...

 Но опять же я не буду говорить что я категорически не соглашаюсь с твоей точкой зрения...

p.s. ладно не будем разводить флейм и путать человека...



--------------------
Если не идти до конца к поставленным целям и не пытатся их достигнуть, каким бы тяжелым не казался путь, то лучше и не ставь их перед собой, но тот кто не ставит перед собой труднодоступные цели, никогда не ощутит эйфорию настоящей победы... победы над миром...
Соломон 2008
PM MAIL ICQ GTalk YIM   Вверх
ecspertiza
Дата 30.9.2009, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 3.11.2008
Где: г.Смоленск

Репутация: нет
Всего: 5



Вот что у меня получилось навоять(в аттаче), конечно с пропорциями изображений я немного накосячил, ещё вопрос не знаю можно ли сюда тоже отписать, я попробовал реализовать отражение и чё то всё совсем плохо стало, если что торкните носом где я туплю.

Для того что бы пример заработал нужно в папке с exe-шником создать папку image и закинуть туда несколько картинок с именами от 1 до 11 включительно.

Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  release.rar 22,12 Kb


--------------------
С уважением,
мастер конфетного цеха!

онлайн компилер
залип
PM MAIL   Вверх
just_geek
Дата 30.9.2009, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 309
Регистрация: 13.12.2007

Репутация: нет
Всего: 10



Если сильно приперло, можешь воспользоватся расширениями, которые позволяют работать NPOT текстурами. Естественно у них есть ограничения, в отличии от POT текстур.
  • GL_NV_texture_rectangle
  • GL_ARB_texture_rectangle
  • GL_EXT_texture_rectangle
Выбирай какой больше нравится smile

p.s. на Intel'ax с ними может быть проблема.Л

Это сообщение отредактировал(а) just_geek - 30.9.2009, 16:56
PM MAIL   Вверх
Rickert
Дата 1.10.2009, 06:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 2
Всего: 52



И не только на интелах. Например GL_NV_texture_rectangle является расширением от NVIDIA, следоватльено на других видяхах могут быть проблемы.

Это сообщение отредактировал(а) Rickert - 1.10.2009, 06:56


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.0563 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.