屏幕坐标向OpenGL坐标转换的问题
来源:互联网 发布:2016全球社交网络排行 编辑:程序博客网 时间:2024/05/17 23:50
屏幕坐标向OpenGL坐标转换的问题
问题困扰我很久了,网上给出了这样一段代码:
voidTranslateGL(intx,inty,GLdouble &posX,GLdouble &posY,GLdouble &posZ)
{
GLint viewport[4];
GLdouble modelview[16];
GLdouble projection[16];
GLfloat winX,winY,winZ=10086;
glPushMatrix();
glLoadIdentity();
glTranslatef(0,0,-1.5);
// glRotatef(angx,1,0,0);
// glRotatef(angy,0,1,0);
// glRotatef(angz,0,0,1);
glGetIntegerv(GL_VIEWPORT, viewport);
glGetDoublev(GL_MODELVIEW_MATRIX, modelview);
glGetDoublev(GL_PROJECTION_MATRIX, projection);
glPopMatrix();
winX = (float)x;
winY = viewport[3] - (float)y;
glReadPixels( x, int(winY), 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &winZ );
gluUnProject(double(winX),double(winY), double(winZ), modelview, projection, viewport, &posX, &posY, &posZ);
}
我发现最后没有成功返回X ,Y,Z坐标,调试后发现错在了glReadPixels( x, int(winY), 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &winZ );这一句上,返回的winZ永远是1.0
查阅无数次Google后,总算在一个外国论坛上看到,问题出在了近平面与远平面设置的问题。
gluPerspective(50,aspect,0,2);
这一句我把近平面设为0,而glReadPixels返回的winZ是某点在近远平面之间的比例,而可能由于除数是0(近平面)的缘故,返回的是无穷大(也就是1.0)
修改的办法就是gluPerspective(50,aspect,0.5,2);
还是要掌握好原理呀~
- 屏幕坐标向OpenGL坐标转换的问题
- OpenGL: 屏幕坐标向OpenGL坐标转换
- 屏幕坐标向OpenGL坐标转换
- 屏幕坐标向OpenGL坐标转换
- 屏幕坐标向OpenGL坐标转换
- 屏幕坐标向OpenGL坐标转换
- 屏幕坐标向opengl三维坐标转换
- 屏幕坐标向OpenGL坐标的转换(完整版)(转载)
- 屏幕坐标向OpenGL坐标的转换(完整版)
- opengl坐标转换的问题
- OpenGL中的屏幕坐标和世界坐标的转换
- 屏幕坐标到OpenGL世界坐标的转换
- opengl屏幕坐标到三维坐标的转换
- OpenGL屏幕坐标到三维坐标转换
- 屏幕坐标到opengl世界坐标转换
- 屏幕坐标到opengl世界坐标转换
- OpenGL由屏幕坐标转换三维坐标
- 屏幕坐标向世界坐标转换
- C# 文件对话框总结
- hiho1122 二分匹配
- 从Xen Host Kernel复制出一个半虚拟化的Guest
- 使用Java完成《算法导论》习题2.3-4
- NYOJ 58 最少步数(BFS)
- 屏幕坐标向OpenGL坐标转换的问题
- 40 个超棒的免费 Bootstrap HTML5 网站模板
- Codeforces Round #248 (Div. 2) A - Kitahara Haruki's Gift
- 一起talk C栗子吧(第十三回:C语言实例--单链表二)
- Android笔记——Handler更新UI示例
- linux LCD驱动(一)--硬件分析
- Class.getResource和ClassLoader.getResource 获取资源文件路径
- android ORM框架的性能简单测试(androrm vs ormlite)
- search engine