二维图像到二维屏幕的显示,对应屏幕坐标

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二维图像到二维屏幕的显示,对应屏幕坐标相关的知识,希望对你有一定的参考价值。

说明

    默认情况下,中心点在屏幕的中心,范围都是从[-1,1],所以物体的实际坐标映射到屏幕坐标需要一个转换过程,上文中描述到使用gluOrtho2D函数通过正投影,将物理坐标映射到屏幕坐标,但是坐标的原点在左下角,一般情况下,屏幕的原点都是从左上角开始,因此在上述的所有例子中,都需要重新计算Y轴的坐标,屏幕的高减去点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);

  glMatrixMode(GL_PROJECTION);

  glLoadIdentity();

  //gluOrtho2D(0.0, WINDOWWIDTH, 0.0, WINDOWHEIGHT);

  gluOrtho2D(0.0, WINDOWWIDTH , WINDOWHEIGHT, 0.0);

}


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

        glVertex2f(x,  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;

}






以上是关于二维图像到二维屏幕的显示,对应屏幕坐标的主要内容,如果未能解决你的问题,请参考以下文章

汇编输入行与列实现对二维数组的查询

OpenGL:绘制二维图像的最快方法

坐标系的概念和坐标系之间的变换

三维图形显示流程

THREE.js:如何计算有多少个屏幕像素代表1个世界坐标单位

OpenGLES 透视变换与屏幕UV坐标