说明

在默认的2D渲染中,渲染的X,Y轴的范围都是从[-1, 1],屏幕的中心点(0,0),所以鼠标点击的坐标,必须转换成世界地理坐标系,在2D环境下,默认Z轴坐标为0.0

假设屏幕宽800,高4800

屏幕坐标地理坐标

左上角0,0-1,1

左下角 0,480-1,-1

右上角 800,0 1,1

右下角 800,480 1,-1

现在通过gluOrtho2D函数将二维图像到二维屏幕上的投影,将坐标移动到左下角,方向刚好和屏幕坐标的Y轴相反


代码

#include <gl/glut.h>

#include <Windows.h>


#define WINDOWHEIGHT 480

#define WINDOWWIDTH 800


void myInit()

{

glClearColor(1.0,1.0,1.0,0.0);

glLineWidth(3.0);

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

gluOrtho2D(0.0, WINDOWWIDTH, 0.0, WINDOWHEIGHT);

}


void myDisplay(void)

{

glClearColor(1.0f, 1.0f, 1.0f, 0.0f);

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glFlush();

}


void myMouse(int button,int state,int x,int y)

{

if(state==GLUT_DOWN)

{

glPointSize(10);

glBegin(GL_POINTS);

glColor3f(1.0f, 0.0f, 0.0f);

glVertex2f(x, WINDOWHEIGHT - y);

glEnd();

glFlush();

}

}


int main(int argc, char* argv[])

{

glutInit(&argc, argv);

glutInitDisplayMode(GLUT_RGBA | GLUT_SINGLE);

glutInitWindowSize(WINDOWWIDTH, WINDOWHEIGHT);

glutInitWindowPosition(100,150);

glutCreateWindow("OpenGL 窗口1");

glutDisplayFunc(&myDisplay);

glutMouseFunc(&myMouse);

myInit();

glutMainLoop();

return 0;

}