Форум программистов, компьютерный форум, киберфорум
OpenGL
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
14 / 14 / 5
Регистрация: 21.01.2012
Сообщений: 122

Текстуры в Qt

23.02.2015, 10:58. Показов 2148. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите понять как работать с текстурами. Нашел в нете несколько примеров, делаю по ним. вывод на консоль говорит что текстуры успешно загружены, но на экране отображается обычный полигон без всяких текстур.
Код
инициализация
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void Pole::initializeGL()
{
    glMatrixMode(GL_MODELVIEW);
    glClearColor(0.0f,0.0f,0.0f,1.0f);
    glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);
    glEnable(GL_DEPTH_TEST);
    glEnable(GL_NORMALIZE);
    glMatrixMode(GL_TEXTURE);
    QPixmap img("img/holm.bmp");
    qDebug()<<"holm:"<<img.isNull();
    holm=bindTexture(img,GL_TEXTURE_2D,GL_RGBA);
    qDebug()<<"HOLMIK"<<holm;
    glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_REPLACE);
}
отрисовка
C++ (Qt)
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
void Pole::paintGL()
{
    glMatrixMode(GL_MODELVIEW);
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();
    glTranslated(sdvig.x,sdvig.y,0.0d);
    glCallList(1);
 
    // рисование сетки карты
    qglColor(QColor(100,100,100));
    glBegin(GL_LINES);
        for(int i=0,l=SHAG*element.size(),l1=SHAG*element[0].size();
            i<=l;i+=SHAG)
        {
            glVertex3i(i,0,5);
            glVertex3i(i,l1,5);
        }
        for(int i=0,l1=SHAG*element.size(),l=SHAG*element[0].size();
            i<=l;i+=SHAG)
        {
            glVertex3i(0,i,5);
            glVertex3i(l1,i,5);
        }
    glEnd();
 
    // Рисование клеток карты
    for(int i=0,j,l=element[0].size();i<element.size();i++)
    {
        for(j=0;j<l;j++)
        {
            glBegin(GL_QUADS);
 
            glEnable(GL_TEXTURE_2D);
            glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_REPLACE);
            /*glVertex3i(i*SHAG,j*SHAG,-1);
            glVertex3i(i*SHAG,(j+1)*SHAG,-1);
            glVertex3i((i+1)*SHAG,(j+1)*SHAG,-1);
            glVertex3i((i+1)*SHAG,j*SHAG,-1);*/
            bool b=true;
            switch(element[i][j])
            {
            case None:
                qglColor(QColor(200,200,100));
                b=false;
                break;
            case Holm:
                qglColor(QColor(255,150,100));
                qDebug()<<"holm";
                glBindTexture(GL_TEXTURE_2D,holm);
                break;
            case Hill:
                qglColor(QColor(255,40,40));
                glBindTexture(GL_TEXTURE_2D,hill);
                break;
            case Mestorod:
                qglColor(QColor(200,100,200));
                glBindTexture(GL_TEXTURE_2D,mestorod);
                break;
            case Water:
                qglColor(QColor(30,30,250));
                glBindTexture(GL_TEXTURE_2D,water);
                break;
            case River:
                qglColor(QColor(150,150,255));
                glBindTexture(GL_TEXTURE_2D,river);
            }
            glVertex3i(i*SHAG,j*SHAG,0);
            if(b) glTexCoord2i(0,1);
            glVertex3i(i*SHAG,(j+1)*SHAG,0);
            if(b) glTexCoord2i(1,1);
            glVertex3i((i+1)*SHAG,(j+1)*SHAG,0);
            if(b) glTexCoord2i(1,0);
            glVertex3i((i+1)*SHAG,j*SHAG,0);
            if(b) glTexCoord2i(0,0);
            glDisable(GL_TEXTURE_2D);
            glEnd();
        }
    }
//-------------
//остальной код
//--------------
    swapBuffers();
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.02.2015, 10:58
Ответы с готовыми решениями:

Почему при наложении текстуры изменяется цвет фигур без текстуры
Исходный вид, когда текстура не накладывалась (рис-1). После наложения текстуры на одну из фигур изменился цвет второй фигуры (рис-2). ...

Как побитово скопировать с текстуры на текстуры разных форматов, не прибегая к обращениям в CPU?
Если ли способ в opengl скопировать бит в бит текстуры любого формата в uint8 одноканальный, но с расширенной шириной? Да кстати нужно...

Поворот Текстуры (не вращая полигон текстуры)
Возник такой вопрос? Как повернуть текстуру на какой то определенный градус не вращая при этом полигон на который мы ее накладываем!...

6
827 / 244 / 47
Регистрация: 24.01.2013
Сообщений: 750
23.02.2015, 12:27
Сначала как минимум нужно команду glBegin(GL_QUADS) поставить после блока switch,
потому что текстура должна устанавливаться до начала рисования полигонов.

https://www.opengl.org/sdk/doc... lBegin.xml
Only a subset of GL commands can be used between glBegin and glEnd. The commands are glVertex, glColor, glSecondaryColor, glIndex, glNormal, glFogCoord, glTexCoord, glMultiTexCoord, glVertexAttrib, glEvalCoord, glEvalPoint, glArrayElement, glMaterial, and glEdgeFlag. Also, it is acceptable to use glCallList or glCallLists to execute display lists that include only the preceding commands. If any other GL command is executed between glBegin and glEnd, the error flag is set and the command is ignored.
0
14 / 14 / 5
Регистрация: 21.01.2012
Сообщений: 122
23.02.2015, 13:38  [ТС]
пробовал ставить glBegin и непосредственно перед первой вершиной с текстурой, также пробовал менять местами задание координат вершины и текстуры, изменений не обнаружил
0
827 / 244 / 47
Регистрация: 24.01.2013
Сообщений: 750
23.02.2015, 14:51
там может быть много причин, попробуй еще так:
Code
1
2
3
4
5
6
7
8
9
holm = bindTexture(img); // тут без дополнительных параметров
// задать фильтрацию
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
// параметры текстурирования
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
// вместо GL_REPLACE - GL_MODULATE если надо смешивать текущий цвет с текстурой
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
и да, может вместо glTexCoord2i лучше использовать glTexCoord2f ?
1
14 / 14 / 5
Регистрация: 21.01.2012
Сообщений: 122
23.02.2015, 16:53  [ТС]
Попробовал, указаную тобой инициализацию, никаких изменений нет
Цитата Сообщение от _Develop Посмотреть сообщение
и да, может вместо glTexCoord2i лучше использовать glTexCoord2f ?
а смысл, если используются только граничные координаты?
0
827 / 244 / 47
Регистрация: 24.01.2013
Сообщений: 750
23.02.2015, 17:34
Цитата Сообщение от gecheim Посмотреть сообщение
а смысл, если используются только граничные координаты?
в данном случае особого смысла нет, но лучше использовать нативные типы для GPU, драйвер все равно будет переводить во флоаты, да и меньше путаницы с преобразованиями.

З.Ы. выложи проект(или на почту), могу вечером посмотреть в чем проблема...
1
9948 / 2948 / 497
Регистрация: 05.10.2013
Сообщений: 8,019
Записей в блоге: 242
23.02.2015, 23:49
gecheim, посмотрите, как я делаю: треугольник, квадрат, куб
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.02.2015, 23:49
Помогаю со студенческими работами здесь

Текстуры
В общем такая проблема. Есть задача натянуть несколько текстур на ландшафт(который уже сгенерировал), причем необходимо это сделать...

Текстуры
вот у нас наложена текстура, теперь поверх нее еще налаживаем только меньше, как сделать что бы нужные части нижней текстуры были видны.....

Текстуры
Доброго времени суток. есть такой вопрос, как удалить с текстуры цвет например весь белый... эм точнее сделать его прозрачным) Надеюсь...

Текстуры
Мне необходимо менять текстуры объекта через скрипт c#. Не могли бы вы пожалуйста объяснить поэтапно, как это сделать, начиная с того, что...

Текстуры 3D
Здравствуйте, у меня вопрос мне нужно создать море или озеро, вот я создал текстуру 3D и используя Perlin noise даже не понял работает ли...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru