不会绘制 2D 纹理

我正在尝试创建一些代码,用于在LWJGL中加载和绘制2D纹理。这是我的绘图代码:


glfwShowWindow(window);

GL.createCapabilities();

loadTextures();

glClearColor(1f, 1f, 1f, 1f);


while (!glfwWindowShouldClose(window))

{

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);


    //draw


    glEnable(GL_BLEND);

    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);


    glPushMatrix();

    glTranslatef(100, 100, 0);

    glBindTexture(GL_TEXTURE_2D, testTexture);

    glBegin(GL_QUADS);

    {

        glTexCoord2f(0, 0);

        glVertex2f(0, 0);


        glTexCoord2f(1, 0);

        glVertex2f(TEXTURE_WIDTH, 0);


        glTexCoord2f(1, 1);

        glVertex2f(TEXTURE_WIDTH, TEXTURE_HEIGHT);


        glTexCoord2f(0, 1);

        glVertex2f(0, TEXTURE_HEIGHT);

     }


     glEnd();

     glPopMatrix();


    //end draw


    glfwSwapBuffers(window);

    glfwPollEvents();

}


glfwFreeCallbacks(window);

glfwDestroyWindow(window);

glfwTerminate();

glfwSetErrorCallback(null).free();

这是我的纹理加载代码:


try

{

    BufferedImage image = ImageIO.read(file);

    /*

    if (image.getType() != BufferedImage.TYPE_INT_ARGB)

    {

        throw new TextureException("Invalid image!");

    }

    */

    int[] pixels = new int[image.getWidth() * image.getHeight()];

    image.getRGB(0, 0, image.getWidth(), image.getHeight(), pixels, 0, image.getWidth());

    ByteBuffer byteBuffer = BufferUtils.createByteBuffer(image.getWidth() * image.getHeight() * 4);


    for (int x = 0; x < image.getWidth(); x++)

    {

        for (int y = 0; y < image.getHeight(); y++)

        {

            int pixel = pixels[y * image.getWidth() + x];

            byteBuffer.put((byte)((pixel >> 16) & 0xFF));

            byteBuffer.put((byte)((pixel >> 8) & 0xFF));

            byteBuffer.put((byte)(pixel & 0xFF));

            byteBuffer.put((byte)((pixel >> 24) & 0xFF));

        }

    }



但是,当我运行此代码时,我得到的只是一个白屏。我检查了testTexture的值,它被设置为1,所以我假设这是纹理的ID,让我相信这是有效的,但我认为在绘制时出了点问题。


翻阅古今
浏览 107回答 1
1回答

慕容3067478

二维纹理必须通过&nbsp;glEnable 启用,并且可以通过以下方式禁用:glDisableglEnable(GL_TEXTURE_2D);如果启用了纹理,则当几何图形由&nbsp;glBegin/glEnd&nbsp;序列绘制时,将应用当前绑定的纹理。如果要在窗口(像素)坐标中绘制几何图形,则必须设置正交投影。正交投影可以通过格乐多进行设置。如果未设置正交投影,则顶点坐标必须位于归一化设备空间中 [-1.0, 1.0]。在下面,假定 a 是窗口的宽度和高度:windowWidthwindowHeightglMatrixMode(GL_PROJECTION);glLoadIdentity();glOrtho(0.0, windowWidth, windowHeight, 0.0, -1.0, 1.0);glMatrixMode(GL_MODELVIEW);while (!glfwWindowShouldClose(window)){&nbsp; &nbsp; glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);&nbsp; &nbsp; // [...]}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java