二维图像到二维屏幕的投影用例-创新互联

说明

专注于为中小企业提供网站建设、网站制作服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业下城免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了近千家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。

在默认的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

#include

#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;

}

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


本文标题:二维图像到二维屏幕的投影用例-创新互联
URL标题:http://ybzwz.com/article/shcop.html