2014-12-13 2 views
0

Я пытаюсь добавить текстуру к простому квадрату более 5 часов, но мне все еще не удается это сделать.OpenGL: Не удается получить текстуры для отображения

Вот код, я использую в paintGL():

glEnable(GL_TEXTURE_2D); 

GLuint id; 
glGenTextures(1, &id); 
glBindTexture(GL_TEXTURE_2D, id); 

float pixels[] = { 
    0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 
    1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f 
}; 

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 2, 2, 0, GL_RGB, GL_FLOAT, pixels); 

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 

glColor4f(1.0f, 1.0f, 1.0f, 1.0f); 
glBegin(GL_QUADS); 
    glTexCoord2f(0.0f, 0.0f); glVertex3f(0,0,0); 
    glTexCoord2f(1.0f, 0.0f); glVertex3f(1,0,0); 
    glTexCoord2f(1.0f, 1.0f); glVertex3f(1,1,0); 
    glTexCoord2f(0.0f, 1.0f); glVertex3f(0,1,0); 
glEnd(); 

if (glGetError() != 0) 
{ 
    qDebug() << glGetError(); 
} 

Там нет ошибок, ни те, OpenGL в. Я инициализировал прозрачный цвет до серого. Когда я пытаюсь изменить цвет с помощью glColor3f(...), он работает.

Я прочитал все учебные пособия, которые я смог найти в Google, но никто не помог.

РЕШЕНИЕ: Я никогда не ставил

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 

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

+0

Перед 'glBegin', попробуйте добавить:' glColor4f (1.0f, 1.0f, 1.0f, 1.0f); 'Значение оттенка будет белым (текстура будет рисоваться при оригинальном цвете и непрозрачности). – Brandon

+0

Квадрат белый, только белый. – kiwixz

+1

Можете ли вы добавить следующие два строчки в свой код после 'glTexImage2D (...)' (чтобы сделать вашу копию mipmap завершена)? 'glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, 0); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 0); '. После этого, если вы будете следовать запросу user1118321, я подозреваю, что проблема будет решена. –

ответ

1

Вы должны указать фильтрации для вашей текстуры:

glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); 
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); 

Поскольку по умолчанию фильтр использует мип, но не генерировать их.

+0

Я потерял его, теперь он работает! Большое спасибо :) – kiwixz

+1

Вам не нужно указывать фильтрацию текстуры. Все текстуры имеют начальные фильтры миниатюризации и увеличения. Проблема в исходном вопросе заключается в том, что mipmap текстуры неполный, а фильтр фильтрации по умолчанию - «GL_NEAREST_MIPMAP_LINEAR». –

+0

Andon M Coleman @ Конечно, я не хотел его усложнять. – Anonymous

1

Мне кажется, что вы используете только одну четверть своей текстуры. Это всего 4 пикселя, и вы установили координаты текстуры как первый пиксель. Если этот пиксель белый и ваша текстурная среда настроена на умножение цвета квадрата на текстуру, и вы настроены на использование выборки ближайших соседей, тогда вы получите только цвет. Попробуйте изменить координаты текстуры (0,0) - (1,1) вместо (0,0) - (0,5,0,5) и посмотреть, дает ли это ожидаемый результат. Вы также можете попробовать настроить различные параметры текстуры и среды по-разному, чтобы увидеть, как это влияет на ваш рисунок.

+0

Не работает. Спасибо, что пытались помочь. (Я все еще пытаюсь выполнить некоторые параметры) – kiwixz

+1

** + 1 **: Это звучит хорошо в теории, но я думаю, что ответ неполный. Я подозреваю, что OP имеет все состояния фильтра текстур по умолчанию. Более насущная проблема заключается в том, что текстура не является полной mipmap, а фильтр минимизации по умолчанию - «GL_NEAREST_MIPMAP_LINEAR». Как только текстура станет полностью завершенной mipmap, остальная часть материала, обсуждаемая в вашем вопросе, очень актуальна. –

+0

Ах, да, не ударили по этому поводу, поэтому забыл об этом случае. Благодаря! – user1118321

Смежные вопросы