user-interface - 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
我的三角形看起来像(但里面的纹理是倒置的):
| \
| \
| \
|_________
需要更多代码?我知道如何手动反转纹理,但我认为最好的方法是找到问题......
但是,如果有人知道如何以更好的方式添加用户界面,我会非常感兴趣!
解决方案
推荐阅读
- kubernetes - Kafka svc 外部 ip 无法访问
- javascript - 没有得到更新的状态
- java - 如何通过右键单击选择列表/树/表格项目并同时打开上下文菜单?
- javascript - React 等待来自 API 的特定响应
- java - Android中的日期格式问题
- xml - 在 XSLT 1.0 中使用 document() 时防止 xml 缓存
- objective-c - 是否有使用#selector 的 UIApplication.didBecomeActiveNotification 的替代方法?
- java - 使用 Java Hibernate 和 JPA 建模友谊的最佳方法是什么
- javascript - JavaScript - 如何在变量中存储和使用函数的返回值
- javascript - "res.end" 不是 "res.on('end', () =>" (express.js) 中的函数