Пример 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.

Другие вопросы по тегам