不使用glOrtho的OpenGL窗口右上角的场景

时间:2013-04-07 19:54:23

标签: opengl rendering

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

我的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();
}

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

Window during rendering red image 我是否不正确地设置了视口,没有正确缩放某些内容,或者我是否完全错过了某些内容?如果您需要更多信息,请询问。我已经给出了所有opengl双面代码,其余的不应该有所作为。从理论上讲,它应该在整个屏幕上呈现红色。

0 个答案:

没有答案