博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二维图像到二维屏幕的投影 用例
阅读量:6936 次
发布时间:2019-06-27

本文共 1197 字,大约阅读时间需要 3 分钟。

说明

在默认的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,如需转载请自行联系原作者

你可能感兴趣的文章
JavaScript学习历程和心得
查看>>
Linux大文件处理,伪分区
查看>>
我的友情链接
查看>>
Hive 元数据表结构详解
查看>>
C#抽象工厂模式的几种实现方法及比较
查看>>
MYSQL启用日志,查看日志,利用mysqlbinlog工具恢复MySQL数据库
查看>>
OSPF分解试验部分-LAB7:NSSA区域
查看>>
Jedis使用示例
查看>>
Android关于绘图中Shader 的效果(中级)
查看>>
AlertDialog显示错误 Unable to add window token null is not for an application
查看>>
new二维数组的几种方法
查看>>
Ionic css组成(三)
查看>>
Python xrange与range的区别
查看>>
Aspose.Pdf 系列组件介绍
查看>>
easyopen原理解析——不到100行代码实现一个最精简的easyopen
查看>>
jsp 页面中El表达式失效处理
查看>>
srs-2-CentOS6 创建 Simple-Rtmp-Server
查看>>
红芯浏览器下载
查看>>
记录日志方法
查看>>
日常接口请求
查看>>