我希望能够在 OpenGL 上将某些东西渲染到纹理中,这样我就可以随时进一步使用它,而无需重新渲染所有内容。这个网站在这里给了我做这件事的指导方针,而不使用 FrameBuffer。由于兼容性问题,我不想使用 FrameBuffer 对象,因为这台旧机器不支持它。我已经完成了一些代码,它创建了我的纹理,渲染了我的场景,然后我创建了一个 Quad 来在其上渲染纹理。唯一的问题是纹理被渲染为“Alpha Mask”,这意味着,看起来它只考虑了 Alpha 值,保持我的矩形始终具有相同的颜色,但只是改变像素的透明度。这是我到目前为止所做的一些代码:
void CreateTexture ()
{
    xSize = 512;
    ySize = 512; //size of texture
//new array
    char* colorBits = new char[ xSize * ySize * 3 ];
//texture creation..
    glGenTextures(1,&texture);
    glBindTexture(GL_TEXTURE_2D,texture);
    glTexImage2D(GL_TEXTURE_2D,0 ,3 , xSize,
                 ySize, 0 , GL_RGB,
                 GL_UNSIGNED_BYTE, colorBits);
//you can set other texture parameters if you want
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER, GL_LINEAR);
//clean up
    delete[] colorBits;
}
然后:
int viewport[4];
    glGetIntegerv(GL_VIEWPORT,(int*)viewport);
    glViewport(0,0,xSize,ySize);
    DrawScene(hDC);
    //save data to texture using glCopyTexImage2D
    glBindTexture(GL_TEXTURE_2D,texture);
    glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA,
                     0,0, xSize, ySize, 0);
    glClearColor(.0f, 0.5f, 0.5f, 1.0f);                // Set The Clear Color To Medium Blue
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glViewport(viewport[0],viewport[1],viewport[2],viewport[3]);
    // glBindTexture(GL_TEXTURE_2D,texture);
最后:
glEnable(GL_TEXTURE_2D);                    // Enable 2D Texture Mapping
        glBlendFunc(GL_DST_COLOR,GL_ONE);               // Set Blending Mode
        glEnable(GL_BLEND);
        glClear(GL_COLOR_BUFFER_BIT);
        glBindTexture(GL_TEXTURE_2D,texture);
        glRotatef(theta, 0.0f, 0.0f, 0.01f);
        glBegin(GL_QUADS);
         //Front Face
        glTexCoord2f(0.0f, 0.0f);
        glVertex3f(-0.5, -0.5f,  0.5f);
        glTexCoord2f(1.0f, 0.0f);
        glVertex3f( 0.5f, -0.5f,  0.5f);
        glTexCoord2f(1.0f, 1.0f);
        glVertex3f( 0.5f,  0.5f,  0.5f);
        glTexCoord2f(0.0f, 1.0f);
        glVertex3f(-0.5f,  0.5f,  0.5f);
        glEnd();
        SwapBuffers(hDC);
DrawScene() 函数简单地渲染一个矩形,上面有一个三角形,每个顶点都有不同的颜色……没什么特别的。
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClear(GL_COLOR_BUFFER_BIT );//| GL_DEPTH_BUFFER_BIT);
glPushMatrix();
//    glRotatef(theta, 0.0f, 0.0f, 1.0f);
glBegin(GL_QUADS);
glColor3f(1.0f, 0.0f, 0.0f);
glVertex3f(-1.0f, -1.0f,  1.0f);
glColor3f(0.0f, 1.0f, 0.0f);
glVertex3f( 1.0f, -1.0f,  1.0f);
glColor3f(0.0f, 0.0f, 1.0f);
glVertex3f( 1.0f,  1.0f,  1.0f);
glColor3f(1.0f, 1.0f, 1.0f);
glVertex3f(-1.0f,  1.0f,  1.0f);
glEnd();
glBegin(GL_TRIANGLES);
glColor3f(1.0f, 0.0f, 0.0f);
glVertex2f(0.0f,   1.0f);
glColor3f(0.0f, 1.0f, 0.0f);
glVertex2f(0.87f,  -0.5f);
glColor3f(0.0f, 0.0f, 1.0f);
glVertex2f(-0.87f, -0.5f);
glEnd();
glPopMatrix();