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

OpenGL窗口右上角的场景,不使用glOrtho,opengl,rendering,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_HIN

本质上,我正在渲染一个原始的像素缓冲区到一个纹理上,这个纹理被包装到一个四边形上

我的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方面的代码,其余的应该没有什么区别。理论上,它应该在整个屏幕上呈现红色。

直到你准备好了解投影是如何工作的:
gluOrtho2D(0.0,1.0,0.0,1.0)
我对投影有很好的处理能力,但我不知道glOrtho有这个功能。我总是被告知使用决议,它会做其余的…:|谢谢