二维图像到二维屏幕的投影 用例

简介:

说明

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

}




    本文转自fengyuzaitu 51CTO博客,原文链接:http://blog.51cto.com/fengyuzaitu/1881305,如需转载请自行联系原作者




相关文章
|
机器学习/深度学习 算法 计算机视觉
图形的透视矫正
图形的透视矫正
194 0
|
5月前
|
算法 图形学
【计算机图形学】实验四 二维图形的缩放、旋转,平移,组合变换
【计算机图形学】实验四 二维图形的缩放、旋转,平移,组合变换
129 2
|
10月前
|
数据采集 数据管理 大数据
真正用起来,二维比三维更重要
今天这篇文章起这个标题似乎有点逆潮流,但是这确实是开发的表达,同时也是我这两天和开发交流之后最直接的感受,当然这个开发的群体是有一定的限定的,就是时空大数据的开发团队主管,但是这些经验对于建设其他数字孪生类的应有也有着很好的借鉴和参考意义。(本人工作于交通行业,现在本人单位也在建设数字孪生相关内容,有感而发故此想谈谈感受)
|
5月前
|
算法
[Halcon&几何] 矩形顶点和对角连线角度计算
[Halcon&几何] 矩形顶点和对角连线角度计算
118 0
|
Python
点云在任意平面上获取二维投影
点云在任意平面上获取二维投影
1107 0
点云在任意平面上获取二维投影
|
数据可视化 C++
【影像配准】配准之棋盘网格图(镶嵌图像)(附有 C++ 代码)
【影像配准】配准之棋盘网格图(镶嵌图像)(附有 C++ 代码)
|
算法 图形学
【计算机图形学】实验三:二维图形变换
【计算机图形学】实验三:二维图形变换
219 0
【计算机图形学】实验三:二维图形变换
|
图形学
Unity射线检测3d,2D,正交透视。
使用射线功能制作点击物体获取物体名字。可以做简单点击相应。 3D射线检测,Camera 在正交模式与透视模式皆可使用 void Update() { Ray ray = Camera.main.ScreenPointToRay(Input.
1920 0
|
算法 Java 数据安全/隐私保护
二值图像分析之轮廓分析
二值图像分析之轮廓分析
450 0
二值图像分析之轮廓分析
|
机器学习/深度学习
883. 三维形体投影面积 : 简单模拟题
883. 三维形体投影面积 : 简单模拟题