首页 > 解决方案 > OpenGL - 纹理原点在左上角

问题描述

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

我在发现opengl(我使用lwjgl 3)方面取得了进展,我想制作一个界面。
在我看来,我只需要显示一个包含文本的纹理来显示一个按钮。
所以我像往常一样创建了一个新的着色器(vertexShader + fragmenShader)。

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

这是我的顶点着色器:

#version 330

in vec3 position;
in vec2 texCoords;

out vec2 pass_texCoords;

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

这是我的片段着色器:

#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

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

      |  \
      |    \
      |      \
      |_________

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

但是,如果有人知道如何以更好的方式添加用户界面,我会非常感兴趣!

标签: user-interfaceopengltextureslwjgl

解决方案


推荐阅读