3-8

来源:互联网 发布:马士兵大数据 编辑:程序博客网 时间:2024/05/01 20:34

从屏幕坐标到世界坐标的逆变换.

//3-8.cpp -- 2013-04-11-22:20#include <gl/glut.h>#include <stdlib.h>#include <stdio.h>void Display(void){glClear(GL_COLOR_BUFFER_BIT) ;glFlush() ;}void Reshape(int width, int height){glViewport(0, 0, (GLsizei)width, (GLsizei)height) ;glMatrixMode(GL_PROJECTION) ;glLoadIdentity() ;gluPerspective(45, (GLfloat)width / (GLfloat)height, 1, 100) ;glMatrixMode(GL_MODELVIEW) ;glLoadIdentity() ;}void Mouse(int button, int state, int x, int y){GLint viewport[4] ;GLdouble mvMatrix[16] ;GLdouble projMatrix[16] ;GLint realY ;GLdouble wx, wy, wz ;switch (button){case GLUT_LEFT_BUTTON:if (state == GLUT_DOWN){glGetIntegerv(GL_VIEWPORT, viewport) ;glGetDoublev(GL_MODELVIEW_MATRIX, mvMatrix) ;glGetDoublev(GL_PROJECTION_MATRIX, projMatrix) ;realY = viewport[3] - (GLint)y - 1 ;printf("Coordinates at cursor are (%4d, %4d)\n", x, realY) ;gluUnProject((GLdouble)x, (GLdouble)realY, 0,mvMatrix, projMatrix, viewport,&wx, &wy, &wz) ;printf("World coords at z = 0 are (%f, %f, %f)\n",wx, wy, wz) ;gluUnProject((GLdouble)x, (GLdouble)realY, 1,mvMatrix, projMatrix, viewport,&wx, &wy, &wz) ;printf("World coords at z = 1 are (%f, %f, %f)\n",wx, wy, wz) ;}break ;case GLUT_RIGHT_BUTTON:if (state == GLUT_DOWN)exit(0) ;break ;default:break ;}}void Keyboard(unsigned char key, int x, int y){   switch (key) {      case 27:         exit(0);         break;   }}   int main(int argc, char** argv){   glutInit(&argc, argv);   glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);   glutInitWindowSize (500, 500);    glutInitWindowPosition (100, 100);   glutCreateWindow (argv[0]);   glutDisplayFunc(Display);    glutReshapeFunc(Reshape);    glutKeyboardFunc (Keyboard);   glutMouseFunc(Mouse);   glutMainLoop();   return 0;}


原创粉丝点击