又是高分求指导

junzitang 2013-03-24 02:03:32
#pragma comment( lib, "opengl32.lib" )
#pragma comment( lib, "glu32.lib" )
#pragma comment( lib, "glut32.lib")
#pragma comment( lib, "glew32.lib")
#pragma comment( lib, "glaux.lib")
#pragma comment( lib, "vfw32.lib" )
/********************************************************************************************************************************/
#include <windows.h> // Windows的头文件
#include "glew.h" // 包含最新的gl.h,glu.h库
#include "glut.h" // 包含OpenGL实用库
#include "gl.h"
#include "glaux.h"


// Modified By jiangcaiyang

void init()
{
glClearColor( 0.0f, 0.0f, 0.0f, 1.0);
glShadeModel( GL_FLAT );
glClearDepth(1.0f);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
}

void reshape(int w, int h)
{
glViewport(0, 0, (GLsizei) w, (GLsizei) h);
glMatrixMode( GL_PROJECTION );// 新添加的
glLoadIdentity();
/*gluPerspective( 90.0, ( GLfloat)w/ ( GLfloat)h, 0.1, 100.0f);*/
gluPerspective(45.0f,(GLfloat)w/(GLfloat)h,0.1f,100.0f);
/*glOrtho(-1.0, 1.0, -1.0, 1.0, 1.0, 20.0);*/
glMatrixMode(GL_MODELVIEW);

}

void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glLoadidentity();
glPushMatrix( );// 新添加的
glColor3f( 1.0f, 1.0f, 1.0f );
glBegin( GL_POLYGON );// 下面四条语句的坐标为了符合顺时针的顺序而更改
glVertex3f( 0.5f, 0.5f, -4.0f );
glVertex3f( 0.5f, -0.5f, -4.0f );
glVertex3f( -0.5f, -0.5f, -4.0f );
glVertex3f( -0.5f, 0.5f, -4.0f );
glEnd();
glPopMatrix( );// 新添加的
glFlush();
}



int main(int argc, char ** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode( GLUT_SINGLE | GLUT_RGB );
glutInitWindowSize(400, 400);
glutInitWindowPosition(0, 0);
glutCreateWindow("hehe");
init();
glutReshapeFunc(reshape);
glutDisplayFunc(display);

int viewport[4];
double modelMatrix[16];
double projMatrix[16];
double nx, ny, nz;
GLdouble mx, my, mz;

glGetDoublev(GL_MODELVIEW_MATRIX, modelMatrix);
glGetDoublev(GL_PROJECTION_MATRIX, projMatrix);
glGetIntegerv(GL_VIEWPORT, viewport);

glReadPixels((GLint)0, GLint(viewport[3]-0), 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &nz/*distancePixels*/);
gluUnProject((GLdouble)0, (GLdouble)(viewport[3] - 0), (GLdouble)nz/*distancePixels[0][0]*/, modelMatrix, projMatrix, viewport, &mx, &my, &mz);
double c = nz;

glutMainLoop( );
return 0;
}
我写的从二维坐标转换为三维的坐标,先要求得一个点的深度比如我求的是(0,0)点, 然后用函数gluUnProject()求得他的三维坐标。但是为什么我总是求的不对呀。 mx = -1.0, my = 1.0, mz= -9.255e64次方。而且读取的深度值也是不对的。趋于无穷小了。为什么呀?帮忙看下,万分感谢。
...全文
256 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
junzitang 2013-04-02
  • 打赏
  • 举报
回复
引用 1 楼 victor_woo 的回复:
你的转换代码的位置有问题 在glutMainLoop写的这些代码获取不到代码中的那些矩阵数据的 glutReshapeFunc(reshape); glutDisplayFunc(display); 都只是设置回调函数,并未真正调用reshape或者display 这些是被glutMainLoop来调用的,而glutMainLoop生效你写的gluUnPro……
你是对的。谢谢呀。
彩阳 2013-03-27
  • 打赏
  • 举报
回复
为你捏一把汗,glut程序不带这么写的,顺便支持一下一楼。
  • 打赏
  • 举报
回复
帮顶,看不懂,现在。
菜牛 2013-03-26
  • 打赏
  • 举报
回复
没看懂程序的目的,如果只是坐标转换,用得着OpenGL吗?
jimette 2013-03-26
  • 打赏
  • 举报
回复
引用 1 楼 victor_woo 的回复:
你的转换代码的位置有问题 在glutMainLoop写的这些代码获取不到代码中的那些矩阵数据的 glutReshapeFunc(reshape); glutDisplayFunc(display); 都只是设置回调函数,并未真正调用reshape或者display 这些是被glutMainLoop来调用的,而glutMainLoop生效你写的gluUnPro……
++
  • 打赏
  • 举报
回复
没用过OpenGL啊
victor_woo 2013-03-25
  • 打赏
  • 举报
回复
按我最近做的类似坐标转换的经验来看,这个Screen2_3D 转换 获取的是投影函数中设置的Near矩形面上上对应点坐标
victor_woo 2013-03-25
  • 打赏
  • 举报
回复
你的转换代码的位置有问题 在glutMainLoop写的这些代码获取不到代码中的那些矩阵数据的 glutReshapeFunc(reshape); glutDisplayFunc(display); 都只是设置回调函数,并未真正调用reshape或者display 这些是被glutMainLoop来调用的,而glutMainLoop生效你写的gluUnProject这部分已经不会被执行了!! 试着在display函数里面计算看能不能生效

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧