OpenGL-纹理原点位于左上方

时间:2019-02-04 19:47:44

标签: user-interface opengl textures lwjgl

我有一个小问题:
我知道在UV中,原点(0,0)在左下角。

我在发现opengl方面很先进(我使用lwjgl 3),我想创建一个接口。
我认为,我只需要显示一个包含文本的纹理即可显示按钮。
因此,我像往常一样创建了一个新的着色器(vertexShader + fragmenShader)。

但令人惊讶的是,我的质地倒挂了!为什么?
很奇怪。

这是我的vertexShader:

#version 330

in vec3 position;
in vec2 texCoords;

out vec2 pass_texCoords;

void main() {
    gl_Position = vec4(position, 1);
    pass_texCoords = texCoords;
}

这是我的fragmentShader:

#version 330

in vec2 pass_texCoords;

out vec4 out_Color;
uniform sampler2D texSampler;

void main() {

    out_Color = texture(texSampler, pass_texCoords);
}

这就是我创建vao的方式
(目前我打算显示一个三角形):

my vetrices : -0.5, 0.5, 0, -0.5, -0.5, 0, 0.5, -0.5, 0
my texCoords : 0, 1, 0, 0, 1, 0
my indices : 0, 1, 2

现在如何显示它:

 //bind shader, bind VAO, enable VBOs
 GL13.glActiveTexture(GL13.GL_TEXTURE0);
 GL11.glBindTexture(GL11.GL_TEXTURE_2D, texture);
 GL11.glDrawElements(GL11.GL_TRIANGLES, 3, GL11.GL_UNSIGNED_INT, 0);
 //disableVBOs, unbind VAO, unbind shader

我的三角形看起来像(但是里面的纹理是倒置的):

      |  \
      |    \
      |      \
      |_________

需要更多代码吗? 我知道如何手动反转纹理,但是我认为最好的方法是发现问题...

但是,如果有人知道如何以更好的方式添加用户界面,那么我不止于此!

0 个答案:

没有答案