【问题标题】:Rendering a VBO to a fullscreen Quad将 VBO 渲染到全屏 Quad
【发布时间】:2015-10-08 01:35:30
【问题描述】:

我一直在尝试将屏幕分辨率大小的 1/3 的 VBO 渲染为屏幕大小的 Quad。我做错了什么?

public void initGL() {
    frameBufferID = glGenFramebuffersEXT();
    colorBufferID = glGenTextures();
    depthBufferID = glGenRenderbuffersEXT();

    glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, frameBufferID);

    glBindTexture(GL_TEXTURE_2D, colorBufferID);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, WIDTH / SCALE, HEIGHT / SCALE, 0, GL_RGBA, GL_INT, (java.nio.ByteBuffer)null);

    glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, colorBufferID, 0);

    glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, depthBufferID);
    glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL14.GL_DEPTH_COMPONENT24, WIDTH / SCALE, HEIGHT / SCALE);
    glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, depthBufferID);

    glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
}

public void render() {
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    GLU.gluPerspective(90.0f, WIDTH/(float)HEIGHT, 0.001f, 1000.0f);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

    glViewport(0, 0, WIDTH / SCALE, HEIGHT / SCALE);

    glBindTexture(GL_TEXTURE_2D, 0);
    glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, frameBufferID);

    glClearColor(1.0f, 0.0f, 0.0f, 0.5f);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glColor3f(1, 1, 1);
    // Render game code here
    glBegin(GL_LINES);
    {
        glVertex2f(0, 0);
        glVertex2f(1, 1);
    }
    glEnd();

    glMatrixMode(GL_PROJECTION);
    glPushMatrix();
    glLoadIdentity();
    glOrtho(0, WIDTH, 0, HEIGHT, 0.001f, 1000.0f);
    glMatrixMode(GL_MODELVIEW);
    glPushMatrix();
    glLoadIdentity();

    glEnable(GL_TEXTURE_2D);
    glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
    glBindTexture(GL_TEXTURE_2D, colorBufferID);

    glClearColor(1.0f, 0.0f, 0.0f, 1.0f);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glViewport(0, 0, WIDTH, HEIGHT);

    glTranslatef(0, 0, -1);
    //Draw Quad
    glBegin(GL_QUADS);
    {
        glTexCoord2f(0, 0);
        glVertex2f(0, 0);

        glTexCoord2f(1, 0);
        glVertex2f(WIDTH, 0);

        glTexCoord2f(1, 1);
        glVertex2f(WIDTH, HEIGHT);

        glTexCoord2f(0, 1);
        glVertex2f(0, HEIGHT);
    }
    glEnd();

    glPopMatrix();
    glMatrixMode(GL_PROJECTION);
    glPopMatrix();
    glMatrixMode(GL_MODELVIEW);
}

我正在尝试在透视图中渲染 VBO 中的东西,然后在正交图中绘制全屏四边形。但我尝试过的一切都不起作用......就像。有什么我搞砸了吗?

【问题讨论】:

    标签: java opengl render lwjgl vbo


    【解决方案1】:

    您正在渲染一个在红色背景前具有完全红色纹理的四边形,因此没什么可看的。 当您在 z=0 平面中绘制时,您尝试渲染到纹理中的线条实际上位于截锥体之外,而您的截锥体在 z=[-0.001,-1000] 范围内。

    出于调试目的,我建议更改两次绘制通道之间的清除颜色,以便您更好地查看两次绘制中的哪一个失败。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多