2016-01-23 2 views
0

Когда я визуализую текстуру (хранящуюся в связанном объекте фреймбуфера), имеет значение любой из следующих параметров текстуры?Render to texture - форматы и параметры текстуры?

GL_TEXTURE_WRAP_S 
GL_TEXTURE_WRAP_T 
GL_TEXTURE_MIN_FILTER 
GL_TEXTURE_MAG_FILTER 

Это также избыточно, чтобы генерировать mipmaps, не так ли? (Возможно, это глупый вопрос, но я просто убедился!)

Что относительно типов данных (параметр type)? Должно ли type должно быть GL_FLOAT? Если нет, в чем разница между указанием type как GL_FLOAT и GL_UNSIGNED_BYTE?

Кроме того, каждый документ, который я нашел в Интернете относительно информации Texture2D (например, https://www.opengl.org/sdk/docs/man/html/glTexImage2D.xhtml), отсутствует. (а именно GL_DEPTH_COMPONENT16/24/32 и GL_RGB16 флагов, другие источники пропускают намного больше).

Есть ли источник полной информации об этих товарах? (желательно для метода рендеринга текстуры)

+0

Я не думаю, что эти параметры имеют какой-либо эффект при рендеринге текстуры. Да, mipmaps избыточны при рендеринге текстуры. «Тип» - это то, как сохраняются компоненты цвета. Нет, также имеет значение «GL_UNSIGNED_BYTE». Разница между ними потусторонняя, не так ли? '..._ FLOAT' сохраняет ваши цвета как четыре поплавка,' ..._ BYTE' сохраняет их как 4 байта.И если вы хотите получить полный документ, просто скачайте последнюю спецификацию профиля совместимости. – HolyBlackCat

+0

Я спрашивал о типах, потому что в учебнике [this] (http://learnopengl.com/#!Advanced-Lighting/Deferred-Shading) автор устанавливает большинство текстур как 'GL_FLOAT', но по какой-то неизвестной причине он устанавливает последняя текстура как 'GL_UNSIGNED_BYTE'. Любая идея почему? – Pilpel

+0

'..._ FLOAT' предлагает лучшую точность, но это часто избыточно, вы не увидите никакой разницы между ним и' ..._ BYTE' на большинстве мониторов. Но если результат используется в вычислениях, float может быть лучше. Возможно, это и есть причина. – HolyBlackCat

ответ

2

При визуализации текстуры (хранящейся в связанном объекте фреймбуфера) имеет значение любой из следующих параметров текстуры?

No. Хотя эти параметры могут быть установлены таким образом, что нарушает Texture Completeness, они не влияют на Framebuffer Object Completeness. Параметры texture или sampling могут повлиять на полноту кадра.

Как насчет типов данных (параметр типа)? Должен ли тип GL_FLOAT? Если нет, в чем разница между указанием типа GL_FLOAT и GL_UNSIGNED_BYTE?

Даже если вы не переносите ни одного байта данных (т.е. проходящего nullptr), вы должны обеспечить pixel transfer parameters, которые являются правовыми ценностями. Если вы этого не сделаете, ваш вызов glTexImage2D завершится с ошибкой.

Например, от версии OpenGL спецификации 4.5:

генерируется INVALID_OPERATION ошибки, если один из формата базового внутренней и format является DEPTH_COMPONENT или DEPTH_STENCIL, а другой является ни одно из этих значений.

Таким образом, ваш внутренний формат и формат передачи пикселей должны, по крайней мере, иметь возможность разговаривать друг с другом, даже если они никогда не используются. Поэтому, если вы создаете текстуру глубины/трафарета, вы должны использовать GL_DEPTH_STENCIL в качестве формата передачи пикселей.

Или вы можете просто прекратить скручивание с плохими API-интерфейсами и использовать glTexStorage.

+0

'glTexStorage' является ядром с версии 4.2. Вы уверены, что часть «должна быть в состоянии говорить»? Ребята [opengl.org] (https://www.opengl.org/discussion_boards/showthread.php/198121-Render-to-texture-texture-formats-and-parameters?p=1281266&posted=1#post1281266) предлагают " Просто установите их на что-то вроде GL_RED и GL_UNSIGNED_BYTE. – Pilpel

+0

@Pilpel: Я не могу нести ответственность за советы других. Я обновил сообщение, предоставив вам * прямую цитату * из спецификации OpenGL. Вы можете верить в это или нет. –

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