Обратите внимание, что рисование последовательностями glBegin
/ glEnd
, стек матрицы конвейеров с фиксированными функциями и конвейер с фиксированными функциями для каждой модели освещения вершин не рекомендуется с десятилетий.Прочитайте о конвейере с фиксированными функциями и посмотрите Спецификация вершины и Шейдер для современного способа рендеринга.
Когда я изменяю GL_TEXTURE_MIN_FILTER
на GL_TEXTURE_MAG_FILTER
в glTexParameteri
, текстура исчезает.Почему?
Начальное значение GL_TEXTURE_MIN_FILTER
равно GL_NEAREST_MIPMAP_LINEAR
.Если вы не измените его и не создадите мип-карты, то текстура не является «полной» и не будет «показана».См. glTexParameter
.
См. Спецификация профиля совместимости API OpenGL 4.6;8.17 Полнота текстуры;стр. 306
Текстура считается завершенной , если все изображения текстуры и параметры текстуры, необходимые для использования текстуры для наложения текстуры, определены последовательно.
... текстура завершена, если не выполняется любое из следующих условий:
- Для фильтра минимизации требуется mipmap (не является ни
NEAREST
, ни LINEAR
), итекстура не завершена.
Когда я изменяю GL_LINEAR
на GL_NEAREST
, ничего не происходит.Разрешение используемой текстуры изменилось до 300x300px.Почему это так?
Если текстура меньше, чем область, в которую обернута текстура, минимизирующий фильтр не действует, но увеличение будет иметь эффект.Если вы установите значение GL_NEAREST
на GL_TEXTURE_MAG_FILTER
, тогда тексели больше не будут интерполироваться.
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST)
Как я могу создавать мипмапы и затем использовать их?
Mipmaps могут быть сгенерированы с помощью glGenerateMipmap
:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_LINEAR)
glTexImage2D(GL_TEXTURE_2D, 0, 3, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, textureData)
glGenerateMipmap(GL_TEXTURE_2D)
Функция loadImage()
создает текстуру.Как узнать PyOpenGL, какую текстуру следует использовать в функции makeQuad()
?
OpenGL - это движок состояний.Каждое состояние сохраняется, пока вы не измените его снова, даже за рамками.Поскольку вы связали текстуру в loadImage
glBindTexture(GL_TEXTURE_2D, bgImgGL)
, текущий в настоящее время объект текстуры, который привязан к единице текстуры 0, равен bgImgGL
.Эта текстура используется для рисования.