关于Opengl中glRasterPos2i函数导致无法显示的问题!(标签-windows|关键词-stream)

问题遇到的现象和发生背景

使用glRasterPos2i函数,当坐标不为(0,0)时就无法通过gldrawpixels函数显示图片

问题相关代码,请勿粘贴截图

主函数

#include 
#include 
#include 
#include
#include
#include  
#include "bmpload.h"

void disp(){
    BmpLoader b = BmpLoader();
    b.read();
    b.display(0,0);
}
int main()
{
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
    glutInitWindowSize(300, 300);
    glutInitWindowPosition(0, 0);
    glViewport(0, 0, 300,300);
    gluOrtho2D(0, 300, 0, 300);
    glutCreateWindow("zhipuqi");
    glutDisplayFunc(disp);
    glutMainLoop();
}

头文件


#include 
#include 
#include 
#include
#include
#include 
#pragma once
using namespace std;
#pragma once
class BmpLoader {
public:
    BmpLoader() {};
    void display(float x, float y) {
        glRasterPos2i(x, y);
        glDrawPixels(ImageWidth, ImageHeight,
            GL_BGR_EXT, GL_UNSIGNED_BYTE, PixelData);
        glutSwapBuffers();
    };
    void read() {
        FileName = "E:\\program\\tupianxianshi\\tupianxianshi\\fuck.bmp";
        FILE* pFile = fopen(FileName.c_str(), "rb");
        fseek(pFile, 0x0012, SEEK_SET);
        fread(&ImageWidth, sizeof(ImageWidth), 1, pFile);
        fread(&ImageHeight, sizeof(ImageHeight), 1, pFile);
        PixelLength = ImageWidth * 3;
        while (PixelLength % 4 != 0)
            ++PixelLength;
        PixelLength *= ImageHeight;
        PixelData = (GLubyte*)malloc(PixelLength);
        if (PixelData == 0)
            exit(0);
        fseek(pFile, 54, SEEK_SET);
        fread(PixelData, PixelLength, 1, pFile);
        fclose(pFile);
    };
private:
    string FileName;
    GLint ImageWidth;
    GLint ImageHeight;
    GLint PixelLength;
    GLubyte* PixelData;
};


运行结果及报错内容

当x = 0,y = 0时

img


当x = 1,y = 1时

img

我的解答思路和尝试过的方法

我查了,没有和我问题一样的

我想要达到的结果

能不在0,0处显示图片

图片显示到窗口逻辑坐标之外了吗? X=0,Y=1呢?

当前窗口位置
glWindowPos{23}{sifd} (TYPE x, TYPE y,TYPE z);
设置当前窗口位置,不需要经过模型投影矩阵变换

glOrtho (-20, 80, 0, h, -1.0, 1.0);
左图1:光栅坐标
右图2:窗口坐标