gpt4 book ai didi

java - JOGL倒置渲染

转载 作者:行者123 更新时间:2023-12-04 05:36:20 26 4
gpt4 key购买 nike

我正在使用 JOGL 渲染图像,使用 Texture对象,但是它被颠倒渲染(图片:http://puu.sh/Q2QT)。任何建议都会很棒,代码如下:

private void renderImage(GL2 gl, String filename, int width, int height) {
Texture texture = null;
try {
texture = TextureIO.newTexture(new File(this.getClass().getResource(filename).toURI()), true);
}
catch (URISyntaxException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
catch (IOException e) {
e.printStackTrace();
throw new RuntimeException(e);
}

int left = 0;
int top = 0;

texture.enable(gl);
texture.bind(gl);

gl.glBegin(GL2.GL_POLYGON);
gl.glTexCoord2d(0, 0);
gl.glVertex2d(left, top);
gl.glTexCoord2d(1, 0);
gl.glVertex2d(left + width, top);
gl.glTexCoord2d(1, 1);
gl.glVertex2d(left + width, top + height);
gl.glTexCoord2d(0, 1);
gl.glVertex2d(left, top + height);
gl.glEnd();
gl.glFlush();

texture.disable(gl);
texture.destroy(gl);
}

最佳答案

Java 和 OpenGL 对坐标系的默认方向有不同的想法。 Java 将 y = 0 作为坐标系描述的任何内容的上边缘,从那里向下。 OpenGL 将 y = 0 作为引用矩形的底部。您可以在多个位置翻转图像。在您的情况下,最简单的方法是更改​​场景和纹理坐标之间的关联:

  gl.glTexCoord2d(0, 1);
gl.glVertex2d(left, top);
gl.glTexCoord2d(1, 1);
gl.glVertex2d(left + width, top);
gl.glTexCoord2d(1, 0);
gl.glVertex2d(left + width, top + height);
gl.glTexCoord2d(0, 0);
gl.glVertex2d(left, top + height);

编辑:
version of newTexture 提供 mustFlipVertically标志,但从文件创建纹理的人显然没有。处理不同方向的“官方”方法是使用 getImageTexCoords :
  TextureCoords tc = texture.getImageTexCoords();
gl.glTexCoord2f(tc.left(), tc.top());
gl.glVertex2d(left, top);
gl.glTexCoord2f(tc.right(), tc.top());
gl.glVertex2d(left + width, top);
gl.glTexCoord2f(tc.right(), tc.bottom());
gl.glVertex2d(left + width, top + height);
gl.glTexCoord2f(tc.left(), tc.bottom());
gl.glVertex2d(left, top + height);

关于java - JOGL倒置渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11881150/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com