zoukankan      html  css  js  c++  java
  • OpenGL屏幕二维坐标转化成三维模型坐标

    我们把OpenGL里模型的三维坐标往二维坐标的转化称为投影,则屏幕上的二维坐标往三维坐标转化则可以称为反投影,下面我们来介绍一下反投影的方法。

    主要是gluUnProject函数的使用,下面是代码:

    void screen2GLPoint()
    {
    	int x = xCord;				/* 屏幕坐标 */
    	int y = yCord;
    	GLint viewport[4];
    	GLdouble mvmatrix[16], projmatrix[16];
    	GLfloat winx, winy, winz;
    	GLdouble posx, posy, posz;
    
    	glPushMatrix();
    
    	//glScalef(0.1, 0.1, 0.1);
    	glGetIntegerv(GL_VIEWPORT, viewport);			/* 获取三个矩阵 */
    	glGetDoublev(GL_MODELVIEW_MATRIX, mvmatrix);
    	glGetDoublev(GL_PROJECTION_MATRIX, projmatrix);
    
    	glPopMatrix();
    
    	winx = x;
    	winy = HEIGHT - y;
    
    	glReadPixels((int)winx, (int)winy, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &winz);			/* 获取深度 */
    	gluUnProject(winx, winy, winz, mvmatrix, projmatrix, viewport, &posx, &posy, &posz);	/* 获取三维坐标 */
    	cout << posx << ' ' << posy << ' ' << posz << endl;
    }



    网上有的文章说还要考虑模型的旋转、平移与缩放,即反投影的时候也要进行反旋转、反平移与反缩放,但是经过我的实验,这个是不用考虑的,因为反投影的时候导出的三个矩阵就包含旋转、平移与缩放的矩阵信息。

  • 相关阅读:
    Mybatis多表查询
    (转)Java安全通信:HTTPS与SSL
    (转)RSA加密解密及数字签名Java实现
    (转)大型企业电话会议视频会议备份解决方案
    (转)虚拟IP原理
    虚拟IP---Linux下一个网卡配置多个IP
    C++ 点
    算法(8)Maximum Product Subarray
    算法(7)Majority Element II
    算法(6)3Sum Closest
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3187089.html
Copyright © 2011-2022 走看看