Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 绘制纹理四边形OpenGL不工作_Java_Opengl_Png_Textures_Lwjgl - Fatal编程技术网

Java 绘制纹理四边形OpenGL不工作

Java 绘制纹理四边形OpenGL不工作,java,opengl,png,textures,lwjgl,Java,Opengl,Png,Textures,Lwjgl,我正在尝试渲染一组纹理四边形 我可以使用彩色四边形进行渲染,但不能使用纹理四边形(屏幕显示为空) 我正在使用LWJGL和PNGDecoder 初始化我的OGL的代码: GL11.glMatrixMode(GL11.GL_PROJECTION); GL11.glLoadIdentity(); GL11.glOrtho(0, 800, 0, 600, 1, -1); GL11.glMatrixMode(GL11.GL_MODELVIEW); GL11.glEnable(GL11.GL_TEXTURE

我正在尝试渲染一组纹理四边形

我可以使用彩色四边形进行渲染,但不能使用纹理四边形(屏幕显示为空)

我正在使用LWJGL和PNGDecoder

初始化我的OGL的代码:

GL11.glMatrixMode(GL11.GL_PROJECTION);
GL11.glLoadIdentity();
GL11.glOrtho(0, 800, 0, 600, 1, -1);
GL11.glMatrixMode(GL11.GL_MODELVIEW);
GL11.glEnable(GL11.GL_TEXTURE_2D);
解码我的图像的代码:

ByteBuffer buffer = null;
InputStream in = ClassLoader.getSystemResourceAsStream(filename);
try {
    buffer = decodeStreamToBuffer(in);
} finally {
    in.close();
}
return buffer;
My
解码流缓冲(输入流输入)

我的渲染代码:

    GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT);
    GL11.glColor3f(0.5f, 0.5f, 1.0f); //Still there to test color quads.

    // draw quad
    GL11.glPushMatrix();
        GL11.glTranslatef(screencenter.getX(), screencenter.getY(), 0);
        GL11.glScalef(1f, 0.5f, 1f);
        GL11.glRotatef(camRotation, 0f, 0f, 1f);
        GL11.glTranslatef(-screencenter.getX(), -screencenter.getY(), 0);

        GL11.glBindTexture(GL11.GL_TEXTURE_2D, texture);
        GL11.glBegin(GL11.GL_TEXTURE_2D);

            GL11.glTexCoord2f(0.0f, 0.0f);
            GL11.glVertex2f(0, 0);

            GL11.glTexCoord2f(1.0f, 0.0f);
            GL11.glVertex2f(32, 0);

            GL11.glTexCoord2f(1.0f, 1.0f);
            GL11.glVertex2f(32, 32);

            GL11.glTexCoord2f(0.0f, 1.0f);
            GL11.glVertex2f(0, 32);

        GL11.glEnd();

    GL11.glPopMatrix();

当我不使用纹理绑定并将
GL\u texture\u 2D
更改为
GL\u MODELVIEW
时,一切都正常。。。但是用颜色而不是纹理。我在这里犯了一个noob错误吗?

这是错误的
GL11.glBegin(GL11.GL\u TEXTURE\u 2D)

glBegin
方法是一种
基本模式
GLenum

因此,您可以使用:

  • GL\u点数
  • GL\u行
  • GL\u线\u带
  • GL\u-LINE\u-LOOP
  • GL_三角形
  • GL\u三角带
  • GL\u三角形\u风扇
  • GL\u四边形
  • GL\u四条带
  • GL\u多边形
使用的模式指定要渲染的内容。在您的情况下,您需要编写
GL\u四边形
,因此要修复代码,您需要替换
GL11.glBegin(GL11.GL\u TEXTURE\u 2D)带有
GL11.glBegin(GL11.GL\u四边形)

额外的
还要记住,
glVertex
glNormal
glTexCoord
等方法已被弃用,不应使用。假设您使用VBO和着色器。虽然如果您正在学习OpenGL,那么请继续使用不推荐的方法,因为它们在学习时很好用

对于调用
glBegin(…)
,这两个枚举数都无效。你应该通过基本类型(例如GL_QUADS)哦,这很奇怪,因为我最初是从教程中复制并粘贴了该部分。谢谢你花时间陪我。我会尝试一下,然后用我的结果更新。
    GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT);
    GL11.glColor3f(0.5f, 0.5f, 1.0f); //Still there to test color quads.

    // draw quad
    GL11.glPushMatrix();
        GL11.glTranslatef(screencenter.getX(), screencenter.getY(), 0);
        GL11.glScalef(1f, 0.5f, 1f);
        GL11.glRotatef(camRotation, 0f, 0f, 1f);
        GL11.glTranslatef(-screencenter.getX(), -screencenter.getY(), 0);

        GL11.glBindTexture(GL11.GL_TEXTURE_2D, texture);
        GL11.glBegin(GL11.GL_TEXTURE_2D);

            GL11.glTexCoord2f(0.0f, 0.0f);
            GL11.glVertex2f(0, 0);

            GL11.glTexCoord2f(1.0f, 0.0f);
            GL11.glVertex2f(32, 0);

            GL11.glTexCoord2f(1.0f, 1.0f);
            GL11.glVertex2f(32, 32);

            GL11.glTexCoord2f(0.0f, 1.0f);
            GL11.glVertex2f(0, 32);

        GL11.glEnd();

    GL11.glPopMatrix();