0

本质上,我将像素的原始缓冲区渲染到纹理上,该纹理被包裹到四边形上。

我的 GL 启动代码:

void INITOGL(int xres, int yres){
glShadeModel(GL_SMOOTH);
glClearColor(0.0f, 0.0f, 0.0f, 0.5f);
glClearDepth(1);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
//gluOrtho2D(0, xres, 0, yres);
}

渲染循环代码:

void RenderCycle(){
    register MSG msg = {0};
    while(1){
        if(PeekMessage(&msg, 0, 0, 0, PM_REMOVE)){
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }

        glEnable(GL_TEXTURE_2D);

        glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
        glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
        //glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
        glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);//GL_LINEAR
        glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE/*GL_DECAL*/);

        glTexImage2D( GL_TEXTURE_2D, 0, 3, 800, 600, 0, GL_RGB, GL_UNSIGNED_BYTE, framebuffer);//viewport virtual size

        glClear(GL_COLOR_BUFFER_B

IT | GL_DEPTH_BUFFER_BIT);

        glBegin(GL_POLYGON);
            glTexCoord2f(0.0f, 1.0f);
            glVertex3f(0, 0, 0.0f);
            glTexCoord2f(1.0f, 1.0f);
            glVertex3f( 800, 0, 0.0f);
            glTexCoord2f(1.0f, 0.0f);
            glVertex3f( 800, 600, 0.0f);
            glTexCoord2f(0.0f, 0.0f);
            glVertex3f( 0, 600, 0.0f);
        glEnd();

        glDisable(GL_TEXTURE_2D);

        SwapBuffers(hdc);
    }
   }

调整大小功能:

void ResizeViewport(int height, int width){
    if(!height)height++;
    //glMatrixMode(GL_MODELVIEW);
    //glLoadIdentity();
    //gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f);
    glMatrixMode(GL_PROJECTION);
    glViewport(0,0,width,height);
    //gluOrtho2D(0, width, 0, height);
    glLoadIdentity();
}

保存 RGB 数据的缓冲区刚刚使用 for 循环设置为红色,这就是输出。

渲染红色图像期间的窗口 我是否不正确地设置了我的视口,没有正确缩放某些东西,或者我只是完全错过了一些东西?如果您需要更多信息,请询问。我已经给出了所有的 opengl 代码,其余的应该没有什么区别。理论上,它应该将红色渲染到整个屏幕。

4

0 回答 0