使用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时
我查了,没有和我问题一样的
能不在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:窗口坐标