gluUnProject()函数讲解

相关函数介绍

1、glReadPixels:从帧缓存 里读取一个像素块

void glReadPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum format,GLenum type, GLvoid * data);
参数x,y :指定从帧缓冲区读取的第一个像素的窗口坐标,此位置是矩形像素块的左下角
参数width,height: 指定像素矩形的尺寸;
参数format:指定像素的格式。
GL_INDEX 单个颜色索引
GL_RGB 先是红色分量,再是绿色分量,然后是蓝色分量
GL_RED 单个红色分量
GL_GREEN 单个绿色分量
GL_BLUE 单个蓝色分量
GL_ALPHA 单个Alpha值
GL_LUMINANCE_ALPHA 先是亮度分量,然后是Alpha值
GL_STENCIL_INDEX 单个的模板索引
GL_DEPTH_COMPONENT 单个深度分量
参数type:指定像素数据的数据类型
GL_UNSIGNED_BYTE 无符号的8位整数
GL_BYTE 8位整数
GL_BITMAP 无符号的8位整数数组中的单个数位
GL_UNSIGNED_SHORT 无符号的16位整数
GL_SHORT 16位整数
GL_UNSIGNED_INT 无符号的32位整数
GL_INT 32位整数
GL_FLOAT 单精度浮点数
参数data:返回的像素数据,是一个指针 ,指向存储图像数据的数组

2、glGetDoublevglGetIntegerv函数

获得投影矩阵模型视图矩阵

double projection[16];
glGetDoublev( GL_PROJECTION_MATRIX, projection );
double modelview[16];
glGetDoublev( GL_MODELVIEW_MATRIX, modelview );

获得当前视口

int viewport[4];
glGetIntegerv( GL_VIEWPORT, viewport );	

3、gluUnProject():获得屏幕坐标对应世界坐标

gluUnProject (
GLdouble winx, //屏幕像素坐标,以左下角为起点
GLdouble winy,
GLdouble winz,
const GLdouble modelMatrix[16], //模型矩阵
const GLdouble projMatrix[16], //投影矩阵
const GLint viewport[4], //视口
GLdouble *objx, //世界坐标
GLdouble *objy,
GLdouble *objz);

应用举例
  double modelview[16], projection[16];//模型投影矩阵
  int viewport[4];//视口
  float ScreenZ = 1;//深度值
  double objx,objy,objz;//获得的世界坐标值
  glGetDoublev( GL_PROJECTION_MATRIX, projection );//获得投影矩阵
  glGetDoublev( GL_MODELVIEW_MATRIX, modelview );//获得模型矩阵
  glGetIntegerv( GL_VIEWPORT, viewport );	//获得视口
  glReadPixels( x, viewport[3]-y, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &ScreenZ ); //获得屏幕像素对应的世界坐标深度值  
 gluUnProject( x, viewport[3]-y, ScreenZ , modelview, projection, viewport, &objx, &objy, &objz );//获得屏幕坐标对应的世界坐标

参考文章

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值