Форум программистов, компьютерный форум, киберфорум
OpenGL
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/21: Рейтинг темы: голосов - 21, средняя оценка - 5.00
Строитель
460 / 77 / 4
Регистрация: 18.06.2010
Сообщений: 514
1

OpenGL натянуть текстуру на 4х угольный полигон. Самый простой способ без лишнего кода

23.02.2017, 09:39. Показов 3991. Ответов 24
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В интернете слишком много кода на OpenGL с натяжкой полигона. Но большинство кодов использует так много сторонних библиотек, что не понимаешь что с чем связать. На DirectX натяжка полигона намного проще. На OpenGL кода очень много.

А еще пишут, что мол OpenGL проще в изучении чем directX по мне дык. OpenGL намного сложнее чем DirectX. В DirectX я больше мог сделать за короткое время. А с OpenGL усложняется большим количеством встроенных библиотек, которые уже не актуальны. И коды перестают работать.

Существует простой код без всякого сложного добавления?
Интересует код WinAPI OpenGL. Без всяких лишних библиотек. Нужны коды использующие библиотеки: <gl\gl.h> <gl\glu.h> opengl32.lib glu32.lib на этих библиотеках требуется найти реализацию натяжки текстуры на полигон.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.02.2017, 09:39
Ответы с готовыми решениями:

Самый простой способ рисования
Здравствуйте. Недавно перешёл на Qt и вот появилась потребность нарисовать обычный прямоугольник...

Самый простой способ создать таблицу
подскажите пожалуйста как можно сделать таблицу, прошу привести пример, даже самый простой ...

Самый простой способ удаления файла
Напишите пожалуйста на VB самый простой способ удаления файла на диске!

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

24
903 / 424 / 159
Регистрация: 02.04.2014
Сообщений: 1,206
23.02.2017, 10:03 2
Не надо гнать на OpenGL ! Мало ли кто на чём мог бы больше сделать. .
Вот для версии 1.5 Урок 6. Наложение текстуры
А тут для версии 3.3 learnopengl. Урок 1.6 — Текстуры (правда для загрузки JPEG используется библиотека SOIL, но если брать обычные BMP, то можно обойтись и без неё)
0
Строитель
460 / 77 / 4
Регистрация: 18.06.2010
Сообщений: 514
23.02.2017, 10:45  [ТС] 3
Цитата Сообщение от rao Посмотреть сообщение
Вот для версии 1.5 Урок 6. Наложение текстуры
А тут для версии 3.3 learnopengl. Урок 1.6 — Текстуры (правда для загрузки JPEG используется библиотека SOIL, но если брать обычные BMP, то можно обойтись и без неё)
Позже проверю. Но мне нужно без лишних библиотек! Неужели библиотеки (<gl\gl.h> <gl\glu.h> opengl32.lib glu32.lib) не способны на загрузку текстуры???

Может кодики и статьи подкините еще? Но только для библиотек (<gl\gl.h> <gl\glu.h> opengl32.lib glu32.lib)
0
5158 / 2770 / 465
Регистрация: 05.10.2013
Сообщений: 7,321
Записей в блоге: 147
23.02.2017, 11:50 4
Цитата Сообщение от infobos Посмотреть сообщение
Позже проверю. Но мне нужно без лишних библиотек!
Вы имеете ввиду, что нужно без gl\glaux.h из предыдущей ссылки по версии 1.5?

Добавлено через 13 минут
Цитата Сообщение от rao Посмотреть сообщение
Вот для версии 1.5 Урок 6. Наложение текстуры
На всякий случай добавлю, что исходники к этим переводным урокам от NeHe можно скачать на оригинальном сайте в разделе справа "Legacy Tutorials", в самом низу каждого урока.
0
Строитель
460 / 77 / 4
Регистрация: 18.06.2010
Сообщений: 514
23.02.2017, 12:12  [ТС] 5
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Вы имеете ввиду, что нужно без gl\glaux.h
Да!
Мне интересно почему для вывода текстуры нужно использовать glaux.h?
Но одновременно с этим эта библиотека считается устаревшей. А где альтернативы этой библиотеки?
Интернет битком набит этой библиотекой. Мне интересно найти коды на актуальные библиотеки, которые есть в среде и в windows.

Добавлено через 17 минут
Цитата Сообщение от 8Observer8 Посмотреть сообщение
На всякий случай добавлю, что исходники к этим переводным урокам от NeHe можно скачать на оригинальном сайте в разделе справа "Legacy Tutorials", в самом низу каждого урока.
Тут используется библиотека glaux.h придется ее грузить. Опять поплывут тараканы с этой библиотекой.
0
Строитель
460 / 77 / 4
Регистрация: 18.06.2010
Сообщений: 514
23.02.2017, 15:16  [ТС] 6
Получилось загрузить текстуру без всякого хламья типа glaux.h
Прилагаю исходник сие творения: Загрузка текстуры без лишней библиотеки.
Использовано только: (<gl\gl.h> <gl\glu.h> opengl32.lib glu32.lib)
Вложения
Тип файла: rar Win32Texture.rar (7.25 Мб, 16 просмотров)
0
Строитель
460 / 77 / 4
Регистрация: 18.06.2010
Сообщений: 514
23.02.2017, 15:19  [ТС] 7
C++
1
GLuint groundTex;
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
GLuint LoadTexture( const char * filename )
{
 
  GLuint texture;
 
  int width, height;
 
  unsigned char * data;
 
  FILE * file;
 
  file = fopen( filename, "rb" );
 
  if ( file == NULL ) return 0;
  //width = 1024;
  //height = 512;
  width = 550;
  height = 430;
  data = (unsigned char *)malloc( width * height * 3 );
  //int size = fseek(file,);
  fread( data, width * height * 3, 1, file );
  fclose( file );
 
 for(int i = 0; i < width * height ; ++i)
{
   int index = i*3;
   unsigned char B,R;
   B = data[index];
   R = data[index+2];
 
   data[index] = R;
   data[index+2] = B;
 
}
 
 
glGenTextures( 1, &texture );
glBindTexture( GL_TEXTURE_2D, texture );
glTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE,GL_MODULATE );
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST );
 
 
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,GL_LINEAR );
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S,GL_REPEAT );
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T,GL_REPEAT );
gluBuild2DMipmaps( GL_TEXTURE_2D, 3, width, height,GL_RGB, GL_UNSIGNED_BYTE, data );
free( data );
 
return texture;
}
C++
1
groundTex=LoadTexture("1.bmp");//Загрузка текстуры
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
glEnable(GL_TEXTURE_2D);
    glBindTexture(GL_TEXTURE_2D, groundTex);
    glEnable(GL_POLYGON_OFFSET_FILL);
    glColor3f(1.0f, 1.0f, 1.0f);
    glBegin(GL_QUADS);
        glNormal3f( 0.0f, 1.0f, 0.0f);
 
        glTexCoord2f( 0.0f,  0.0f); 
        glVertex3f(-5.0f, -3.0f,-5.0f);
 
        glTexCoord2f( 0.0f, 1.0f); 
        glVertex3f(-5.0f, -3.0f, 5.0f);
 
        glTexCoord2f(1.0f, 1.0f); 
        glVertex3f( 5.0f, -3.0f, 5.0f);
 
        glTexCoord2f(1.0f,  0.0f); 
        glVertex3f( 5.0f, -3.0f,-5.0f);
 
    glEnd();
    glDisable(GL_POLYGON_OFFSET_FILL);
    glBindTexture(GL_TEXTURE_2D, 0);
    glDisable(GL_TEXTURE_2D);
    //Текстура
0
5158 / 2770 / 465
Регистрация: 05.10.2013
Сообщений: 7,321
Записей в блоге: 147
23.02.2017, 15:20 8
Цитата Сообщение от infobos Посмотреть сообщение
Мне интересно найти коды на актуальные библиотеки, которые есть в среде и в windows.
К слову сказать, уроки NeHe от конца 90-x годов. Не знаю сколько лет, может лет 10, но glBegin/glEnd считается устаревшим способом рисования. Часто пишут, что glBegin/glEnd - это legacy или deprecated. На некоторых устройствах этот способ вообще не работает, например, на мобильных или веб. На Desktop актуальной считается версия OpenGL 3.3 с шейдерами, она наиболее распространена и на XP тоже. В отличие от версии 4.5. Поэтому тех кто использует шейдеры гораздо больше, чем тех кто glBegin/glEnd и следовательно больше возможности найти туторы, людей, помощь. На этом форуме может только несколько человек используют glBegin/glEnd, остальные почти сразу стали использовать шейдеры, считая что glBegin/glEnd - неактуален.
0
Строитель
460 / 77 / 4
Регистрация: 18.06.2010
Сообщений: 514
23.02.2017, 15:25  [ТС] 9
Цитата Сообщение от 8Observer8 Посмотреть сообщение
glBegin/glEnd - неактуален
Да в курсе, что не актуален и очень не производителен. Потому что есть буфер памяти в видеокарте для отрисовки.
Я пока учусь, вот и пытаюсь понять что с чем взаимосвязано.
И больше всего расстраивает, что новички сразу через эту кашу хломья проходит.
А без этой каши серьезного блюда не сваришь...
Нужен опыт даже в (glBegin/glEnd)
1
5158 / 2770 / 465
Регистрация: 05.10.2013
Сообщений: 7,321
Записей в блоге: 147
23.02.2017, 15:25 10
infobos, а как загружаются текстуры в этом приложении: Исходники Проектов на OpenGL

И как там без шейдеров сделана аура выделения жёлтого цвета вокруг выбранного объекта?
0
Строитель
460 / 77 / 4
Регистрация: 18.06.2010
Сообщений: 514
23.02.2017, 15:28  [ТС] 11
Цитата Сообщение от 8Observer8 Посмотреть сообщение
infobos, а как загружаются текстуры в этом приложении: Исходники Проектов на OpenGL
И как там без шейдеров сделана аура выделения жёлтого цвета вокруг выбранного объекта?
Использован шейдер.
Про текстуры пока не знаю. Там сложно пока понять. Много кода и конечно связано в большей части для буфера памяти видеокарты.
0
5158 / 2770 / 465
Регистрация: 05.10.2013
Сообщений: 7,321
Записей в блоге: 147
23.02.2017, 15:45 12
Цитата Сообщение от infobos Посмотреть сообщение
И больше всего расстраивает, что новички сразу через эту кашу хломья проходит.
А без этой каши серьезного блюда не сваришь...
Нужен опыт даже в (glBegin/glEnd)
Да, с этим я полностью согласен. Нужно столкнуться с ограничениями статического конвейера, помучиться, чтобы по-настоящему понять спасение в шейдерах. Такую аура выделения - старым способом, наверное, очень сложно сделать, хотя делали, наверное, а может и нет. А Normal Map вообще нельзя сделать без шейдеров.
0
Строитель
460 / 77 / 4
Регистрация: 18.06.2010
Сообщений: 514
23.02.2017, 16:13  [ТС] 13
Оставлю на всякий случай ссылку где код нарыл про загрузку текстуры: http://stackoverflow.com/quest... -a-texture

Добавлено через 3 минуты
Тут еще что-то написали про этот код: http://www.nullterminator.net/gltexture.html

Добавлено через 21 минуту
Тут рассказано как загрузить файлы tga в текстуру: https://sites.google.com/site/... gruzka-tga
1
903 / 424 / 159
Регистрация: 02.04.2014
Сообщений: 1,206
23.02.2017, 17:46 14
infobos, загрузка текстуры вручную это по твоему "без лишнего кода"? Сравни 30 строк своей GLuint LoadTexture( const char * filename ) с тем как это выглядит с библиотекой SOIL:
C++
1
unsigned char* image1 = SOIL_load_image("./container.jpg", &width, &height, 0, SOIL_LOAD_RGB);
Одна строка! Причём JPG! (а может и другие форматы).
Так что твой минимализм и стремление к простоте наоборот всё усложняют.
0
Строитель
460 / 77 / 4
Регистрация: 18.06.2010
Сообщений: 514
23.02.2017, 18:03  [ТС] 15
Цитата Сообщение от rao Посмотреть сообщение
Одна строка! Причём JPG! (а может и другие форматы).
Так что твой минимализм и стремление к простоте наоборот всё усложняют.
Ну что, вступим в полемику... Философию давно проходили?

Есть что ответить:
Я за длинный код, который имеет минимум библиотек.
А лишние библиотеки чаще могут навредить в будущем. Когда эта библиотека тянет за собой другие ссылки, которые в будущем имеют тенденцию умирать, а за ним и работа программы умрет...

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

Я хочу захватить только актуальные библиотеки, в которых буду уверен, что они будут жить долго. А библиотека SOIL пока не внушает доверия лишь потому, что ее нужно принудительно вшивать...

Добавлено через 8 минут
Библиотеку SOIL хочется ковырнуть. Возможно, что оттуда можно просто вытащить полезные алгоритмы-коды, если конечно они открыты, а не зашиты в DLL.

Добавлено через 2 минуты
Если DLL, то молиться и надеяться, что разработчики будут ее обновлять. Если microsoft не держит ее у себя? Я лучше найду альтернативу.
0
903 / 424 / 159
Регистрация: 02.04.2014
Сообщений: 1,206
23.02.2017, 18:10 16
философию давно. ..то ли на втором, то ли на третьем курсе. .забыл ужо точно

Какие ссылки имеют тенденцию умирать? В ПО обратная совместимость версий практически является стандартом. Да, при технологических скачках бывают конфликты. Только я сомневаюсь, что стоит беспокоиться о том, что твоя учебная программа [может быть] перестанет через десять лет работать (когда все поголовно перейдут на Vulkan или еще куда-нибудь). Что должно "умереть", что бы перестала работать SOIL? или glut ? или SDL? или SFML ? и т.п.

Глубинные процессы нужны и важны. Но не нужно "растекаться мыслью по древу". Изучаешь OpenGL ? вот и сосредоточься на его механизмах и принципах, а всю рутину пусть делают библиотеки и утилиты. Ну ладно .BMP загрузил, а ты возьми JPEG попробуй вручную распакуй. Да ты же так к пенсии только первый треугольник на экран выедешь. Тем более, что этих "глубинных принципов" и в самом OpenGL'е хватает с избытком.
0
Строитель
460 / 77 / 4
Регистрация: 18.06.2010
Сообщений: 514
23.02.2017, 19:07  [ТС] 17
Цитата Сообщение от rao Посмотреть сообщение
Какие ссылки имеют тенденцию умирать?
Я имел ввиду, если внутри библиотеки метод использует старый метод функций, и он в будущих версиях может быть отменен или еще что там. Ну то есть метод ссылающийся на определенный DLL в операционной системе. И прочее. Это и может теоретически привести к стопору программы.

Добавлено через 4 минуты
Цитата Сообщение от rao Посмотреть сообщение
В ПО обратная совместимость версий практически является стандартом.
Вы имеете ввиду все, что старое не забывается? То есть новые выпуски ОС должны поддерживать старые версии. Да согласен. Однако библиотеки некоторые исключаются от различных сред. Также и операционная система наверно может не поддерживать старые версии Net.Framework-и и прочее. Теперь думаю понятно о чем речь? А я знаком со старыми программами, которые требуют старый net.framework.

Добавлено через 3 минуты
Цитата Сообщение от rao Посмотреть сообщение
Глубинные процессы нужны и важны. Но не нужно "растекаться мыслью по древу". Изучаешь OpenGL ? вот и сосредоточься на его механизмах и принципах, а всю рутину пусть делают библиотеки и утилиты. Ну ладно .BMP загрузил, а ты возьми JPEG попробуй вручную распакуй. Да ты же так к пенсии только первый треугольник на экран выедешь. Тем более, что этих "глубинных принципов" и в самом OpenGL'е хватает с избытком.
Пускай занимаются. Иногда приходится лазить куда бы не стоило. Но лазишь, чтобы понять, что туда лазить не стоит. А как иначе. Вот изучаешь OpenGL, а на ум приходит поиск альтернатив. Вот и лазишь по всяким. И не только ради экономии пространства, а ради того, чтобы увидеть и понять где границы OpenGL.

Цитата Сообщение от infobos Посмотреть сообщение
Ну ладно .BMP загрузил, а ты возьми JPEG попробуй вручную распакуй. Да ты же так к пенсии только первый треугольник на экран выедешь.
Я смотрю Вы тут самый умный прямо блещете умом... Вы бы в начале тупо помогли, а потом мысли о писсимизме приподносили. Сначала реально делом помогайте, а потом бейте тревогу: Ой как это все сложно лучше пусть библиотекари этим занимаются. Говорит о том, что Вы на самом деле слабый программист, который туда пробовал лазить и только увидел темный лес и как там страшно...

Мысли пускать тут все таланты...
0
5158 / 2770 / 465
Регистрация: 05.10.2013
Сообщений: 7,321
Записей в блоге: 147
23.02.2017, 20:27 18
Цитата Сообщение от infobos Посмотреть сообщение
Также и операционная система наверно может не поддерживать старые версии Net.Framework-и и прочее.
Вы имеете ввиду .NET 1.0? Версия .NET 2.0 есть в списке VS2015. Что мне нравится у Microsoft .NET - это чёткое разделение по версиям фреймворков. Если программа пишется на конкретной версии .NET, то по крайней мере до XP они работают, а вот на более ранних версия: 2000, 98 - уже не факт. Я нацелен, чтобы программы хотя бы на XP запускались. .NET был портирован на Mac и Linux и этот проект называется Mono. Разработкой занимается компания Xamarin, которая так же портировала .NET на Android и iOS. Вот как там обеспечивается запуск на старых версиях ОС - ещё мне предстоит узнать.

Добавлено через 10 минут
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Вот как там обеспечивается запуск на старых версиях ОС
Уточну, что я имею ввиду запуск на старых версиях Mac, Linux и мобильные. Чем хорош Mono, что можно один раз написать проект в VS и потом открыть его на других OC в среде MonoDevelop и создать билд приложения.

Добавлено через 1 час 3 минуты
Цитата Сообщение от infobos Посмотреть сообщение
Интересует код WinAPI OpenGL. Без всяких лишних библиотек.
Я пытался найти пример, чтобы окно создавалось с помощью WinAPI и чтобы использовался OpenGL 3.3, но не смог найти. Везде для создания окна используют GLUT, FreeGLUT, GLFW и т.д. А вот чтобы окно WinAPI и шейдеры GL 3.3 - не нашёл. Если у кого есть ссылка, то дайте, пожалуйста.
0
Строитель
460 / 77 / 4
Регистрация: 18.06.2010
Сообщений: 514
24.02.2017, 05:36  [ТС] 19
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Вы имеете ввиду .NET 1.0?
Да!
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Везде для создания окна используют GLUT, FreeGLUT, GLFW и т.д.
Я еще не понял, наверно код для окна не сильно мешает понять другой код. Главное, чтобы команды и возможности OpenGL не оказались внедренными в эти библиотеки.
0
Строитель
460 / 77 / 4
Регистрация: 18.06.2010
Сообщений: 514
24.02.2017, 07:52  [ТС] 20
Сделал загрузку текстуры через файл: .tga
Качество прекрасное!
взял код из: https://sites.google.com/site/... gruzka-tga
Исходник прикрепил:
Вложения
Тип файла: rar Win32Texture2.rar (8.11 Мб, 14 просмотров)
0
24.02.2017, 07:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.02.2017, 07:52
Помогаю со студенческими работами здесь

Самый простой способ шифрования файла
как сделать чтоб при открывании файла текстовым редактором вместо понятных слов созданных...

Самый простой способ проверить медиа-файл
Какой самый простой способ проверить звуковые файлы, тоесть попробовать открыть-проиграть их в...

создать стоку из n нулей, самый простой способ
пока придумал &quot;000000000000000000000000000000000&quot;.slice(0, n) з.ы. n = {0, 254}

минимальный и самый простой способ сортировки массива
Вот минимальный и самый простой способ сортировк массива. Кто ни бдь может сказать более короткий?...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru