Пример OpenGL 3.x core sampleler2DRect (GL_TEXTURE_RECTANGLE)
Я пытаюсь выяснить, как сделать полупрозрачное 2D-наложение поверх моей 3D-сцены, для справки читая 5-е издание OpenGL SuperBible.
В нем есть пример, который накладывает логотип OpenGL на сцену (в главе 7) с использованием целевого объекта текстуры GL_TEXTURE_RECTANGLE и унифицированного типа GLSL, называемого sampler2DRect. Предполагается, что текстура отображается в фрагментном шейдере с помощью команды texture().
Пример в этой книге использует много исходных файлов, и мне очень трудно реализовать его в простой программе, поэтому мне интересно, кто-нибудь может указать мне на более простой пример sampleler2DRect.
У меня нет проблем с переключением на ортографическую проекцию, скорее, когда я пытаюсь загрузить текстуру, она просто отображает поверхность белым цветом. Мой код становится очень запутанным в данный момент, и я не могу точно определить проблему, поэтому я бы предпочел начать с нуля, следуя более простому примеру, если он доступен где-либо.
PS Я использую SFML 2.0rc для загрузки файла изображения, если это имеет значение.
2 ответа
error C1101: ambiguous overloaded function reference "mul(mat4, vec3)"
(0) : mat3x4 mul(mat3x1, mat1x4)
(0) : mat3 mul(mat3x1, mat1x3)
(0) : mat3x2 mul(mat3x1, mat1x2)
(0) : mat3x1 mul(mat3x1, mat1)
(0) : mat2x4 mul(mat2x1, mat1x4)
.....
Это очень многословный способ сказать вам, что нет такой функции, которая умножает mat4
с vec3
, Затем он перечисляет все легальные варианты mul
,
Ваши размеры должны совпадать, когда вы умножаете матрицы, то, что вы, вероятно, хотите, это умножить mat4
с vec4
, Если это для вашей координаты позиции, то добавьте 1.0
в качестве конечного значения вектора:
uniform mat4 mvpMatrix;
in vec3 position;
main()
gl_Position = mvpMatrix * vec4(position, 1.0);
В дополнение к ответу Тима, убедитесь, что:
- Ваша текстура связана: glBindTexture(GL_TEXTURE_2D, textureID);
- Вершинный шейдер выводит координаты UV: out vec2 UV;
- Вершинный шейдер получает координаты UV: в vec2 UV;
- VBO с UV-лучами существует, включен, связан и установлен (glEnableVertexAttribArray, glBindBuffer, glVertexAttribPointer)
- glEnable (GL_TEXTURE_2D)
И специальные предметы для текстур прямоугольника:
- Координаты UV находятся в [0, ширина]x[0, высота] (особый случай для текстур прямоугольника).
- Убедитесь, что ваш квад имеет ок. тот же размер, что и у текстуры ( rect.tex не имеет мипмапов)
- Вместо этого используйте стандартные текстуры. Они могут быть NPOT.
Также: используйте gDebugger.