Russian Qt Forum
Октябрь 03, 2024, 07:30 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Наложение текстуры (ньюбский затык)  (Прочитано 2949 раз)
ibnz
Гость
« : Сентябрь 18, 2013, 15:02 »

Тыкните носом нубку, плз, где косяк с текстурированием?
Рисует токмо желтый квадрат.
Код:
void GLWidget::initializeGL()
{
    quint8 texData[16][16];
    qsrand(100);
    for (int i = 0; i < 16; ++i) {
        for (int j = 0; j < 16; ++j) {
            texData[i][j] = qRound(qrand()*255.0/RAND_MAX);
        }
    }
    glClearColor(0.0, 0.0, 0.0, 0.0);
    glEnable(GL_TEXTURE_2D);
//    GLuint m_texture;
    glGenTextures(1, &m_texture);
    glBindTexture(GL_TEXTURE_2D, m_texture);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, 16, 16, 0, GL_ALPHA, GL_UNSIGNED_BYTE, texData);
}


void GLWidget::paintGL()
{
    glLoadIdentity();
    glColor3f(1.0, 1.0, 0.0);
    glBindTexture(GL_TEXTURE_2D, m_texture);
    glBegin(GL_QUADS);
       glTexCoord2f(0.0,0.0);glVertex2f(0.0,0.0);
       glTexCoord2f(1.0,0.0);glVertex2f(1.0,0.0);
       glTexCoord2f(1.0,1.0);glVertex2f(1.0,1.0);
       glTexCoord2f(0.0,1.0);glVertex2f(0.0,1.0);
    glEnd();
}
Записан
ibnz
Гость
« Ответ #1 : Сентябрь 18, 2013, 16:41 »

методом научного тыка было найдено решение:
Код:
glTexImage2D(GL_TEXTURE_2D, 0, 1, 16, 16, 0, GL_RED, GL_UNSIGNED_BYTE, texData);

Причем именно GL_RED. ни GL_GREEN ни GL_BLUE не дают нужного результата.
Пока не разобрался как и почему так...
Записан
mutineer
Гость
« Ответ #2 : Сентябрь 18, 2013, 16:47 »

методом научного тыка было найдено решение:
Код:
glTexImage2D(GL_TEXTURE_2D, 0, 1, 16, 16, 0, GL_RED, GL_UNSIGNED_BYTE, texData);

Причем именно GL_RED. ни GL_GREEN ни GL_BLUE не дают нужного результата.
Пока не разобрался как и почему так...

Может потому, что список допустимых значений такой?
Цитировать
GL_RED, GL_RG, GL_RGB, GL_BGR, GL_RGBA, GL_BGRA, GL_RED_INTEGER, GL_RG_INTEGER, GL_RGB_INTEGER, GL_BGR_INTEGER, GL_RGBA_INTEGER, GL_BGRA_INTEGER, GL_STENCIL_INDEX, GL_DEPTH_COMPONENT, GL_DEPTH_STENCIL
Записан
ibnz
Гость
« Ответ #3 : Сентябрь 18, 2013, 17:07 »

Да, именно этот список меня и наставил на путь истинный. Но по дороге к истине меня смущали 2 аспекта.
1. Перед глазами был очень похожий пример, где использовалась GL_ALPHA.
2. Логика подсказывала, что красный компонент цвета ничем не лучше синего или зеленого.

Честно говоря они меня смущают до сих пор, поэтому копаю дальше
Записан
mutineer
Гость
« Ответ #4 : Сентябрь 18, 2013, 17:47 »

1. А пример у тебя мог быть потому, что, например, в OpenGLES (подозреваю что первом) список допустимых форматов другой
Цитировать
GL_ALPHA, GL_RGB, GL_RGBA, GL_LUMINANCE, and GL_LUMINANCE_ALPHA

2. Красный компонент лучше синего или зеленого потому что идет первым.
GL_RED означает что у твоей текстуры только один цветовой канал. Красный используется потому, что в RGB идет первым
GL_RG означает что каналов два. Наименование "красный" и "зеленый" используются потому, что это цвета, обычно хранящиеся в первом и втором каналах
« Последнее редактирование: Сентябрь 18, 2013, 17:53 от mutineer » Записан
ibnz
Гость
« Ответ #5 : Сентябрь 18, 2013, 20:59 »

спасибо
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.043 секунд. Запросов: 21.