转自原文 OpenGL 获取当前屏幕坐标对应的三维坐标,使用很简单glu库中的一个函数

#include <GL/glut.h>
#include <stdlib.h>
#include <stdio.h>void display(void)
{glClear(GL_COLOR_BUFFER_BIT);glFlush();
}/* Change these values for a different transformation  */
void reshape(int w, int h)
{glViewport (0, 0, (GLsizei) w, (GLsizei) h);glMatrixMode(GL_PROJECTION);glLoadIdentity();gluPerspective (45.0, (GLfloat) w/(GLfloat) h, 1.0, 100.0);glMatrixMode(GL_MODELVIEW);glLoadIdentity();
}void mouse(int button, int state, int x, int y)
{GLint viewport[4];GLdouble mvmatrix[16], projmatrix[16];GLint realy;  /*  OpenGL y coordinate position  */GLdouble wx, wy, wz;  /*  returned world x, y, z coords  */switch (button) {case GLUT_LEFT_BUTTON:if (state == GLUT_DOWN) {glGetIntegerv (GL_VIEWPORT, viewport);glGetDoublev (GL_MODELVIEW_MATRIX, mvmatrix);glGetDoublev (GL_PROJECTION_MATRIX, projmatrix);/*  note viewport[3] is height of window in pixels  */realy = viewport[3] - (GLint) y - 1;printf ("Coordinates at cursor are (%4d, %4d)\n", x, realy);gluUnProject ((GLdouble) x, (GLdouble) realy, 0.0,mvmatrix, projmatrix, viewport, &wx, &wy, &wz);printf ("World coords at z=0.0 are (%f, %f, %f)\n",wx, wy, wz);gluUnProject ((GLdouble) x, (GLdouble) realy, 1.0,mvmatrix, projmatrix, viewport, &wx, &wy, &wz);printf ("World coords at z=1.0 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;}
}/**  Open window, register input callback functions*/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;
}

//相关API含义

gluPerspective //指定观察视景体

gluUnProject //传入模型矩阵和视点矩阵,根据当期屏幕坐标,返回对应的三维坐标。

没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。
本文转自wenglabs博客园博客,原文链接:http://www.cnblogs.com/arxive/p/7007030.html,如需转载请自行联系原作者

OpenGL 获取当前屏幕坐标对应的三维坐标相关推荐

  1. UG模型边界上的点集生成及获取其三维坐标

    文章目录 前言 一.三维模型添加点集 二.存为.IGS文件 三.程序读取每个点的三维坐标 附录 前言 UG上自己画的三维模型(.prt)在边界上添加点集,得到边界上密集的点,然后另存为.IGS文件,获 ...

  2. OpenGL之建立三维坐标网格

    OpenGL之建立三维坐标网格 By Cracent 之前的一件作品,在此与大家分享一下: 这件作品里面涉及到了三维坐标网格的建立,本文将进行代码解析. 1.网格建立函数 void CMyStatic ...

  3. 双目视觉目标追踪及三维坐标获取—python(代码)

    2022年九月更新: 在原来的基础上,我使用了yolov5代替了opencv的目标检测算法辅助相机进行三维坐标的获取,并成功用获取的坐标实时控制机械臂,感兴趣的话可以看我b站里的视频,视频下方也有开源 ...

  4. Realsense获取像素点在相机坐标系下的三维坐标

    系统:Windows10 设备:RealSense D435i 提前搭建好Python环境,安装pyrealsense2,numpy,opencv. python-代码 # -*- coding: u ...

  5. 十、获取人体骨骼关键点三维坐标——Azure Kinect DK入门

    Azure Kinect DK 文档 Azure-Kinect-Sensor-SDK 文档 Azure Kinect Body Tracking SDK 文档 OpenCV文档 参考文档学习,边学,边 ...

  6. Kinect Azure DK获取深度图、深度数据和人体骨骼关键点三维坐标

    使用环境:Azure Kinect SDK v1.4.1 + Azure Kinect Body Tracking SDK 1.0.1 + VS2019 + Opencv 文章目录 一.获取深度图 二 ...

  7. 三维坐标与平面坐标的转换(threejs)

    这个是世界坐标转平面坐标 function updateScreenPosition() {     if (sprite === undefined) {         return false; ...

  8. OpenGL将二维图形显示为三维点云图

    全文参考:http://blog.csdn.net/sky_freebird/article/details/6695059 运用OpenGL实现二维图像的三维点云图显示. #include < ...

  9. 基于OpenCV的立体相机标定StereoCalibration与目标三维坐标定位

    说明:以下涉及到的一些公式以及图片来自于Learning OpenCV. 做了快2个月的立体相机标定,遇到了一些问题,也有了一些体会,在这里记下来. 1.在做立体相机标定的时候,标定板的规范与否直接影 ...

最新文章

  1. 数据研发岗位需要技能
  2. 解放你内心的自然领袖,从你的内心而非你的自我来领导你自己
  3. 基于struts2拦截器实现用户操作日志记录
  4. 优秀的java代码_像这样写,Java菜鸟也能写出牛逼的代码
  5. 深入浅出设计模式原则之开闭原则(OCP)
  6. equals和hashCode
  7. Activity加载View调用顺序
  8. 批量删除table或view
  9. 利用C++语言设计可扩展线程池
  10. Hash冲突以及如何解决Hash冲突
  11. 台式计算机用u盘给电脑安装系统,台式机用u盘装系统,教您用u盘装系统给台式机...
  12. 从LeNet-5 CNN模型入门PyTorch
  13. 【nvidia Xavier】感受gpu算力
  14. android 电池(一):锂电池基本原理篇 .
  15. Webview 打开qq聊天窗口,申请进群
  16. Linux 磁盘管理-配额管理-配置用户对磁盘进行指定大小或者文件数量的使用权限
  17. 全面屏的 iPhone X,雷军妥协的库克做到了
  18. 应用程序无法正常启动(0xc000007b)
  19. 计算机如何共享电视,win7系统电视共享视频的操作方法
  20. 对国家最新战略“新基建”的解读,一起把握赚钱的机会

热门文章

  1. Java继承中为什么不可以降低父类重写方法的访问权限
  2. Django uplodify 多文件同时上传
  3. 【体系结构】Oracle如何保证提交的数据不丢失
  4. 第10组-通信2班-011-抓包分析
  5. ODE网络:一场颠覆RNN的革命即将到来
  6. iOS 实现简单的列表预加载
  7. linux 读写权限
  8. 如何在Angular 2项目中使用Bootstrap css库
  9. 一些系统事件的手动触发方法
  10. mysqldump的一些用法