首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络游戏 >

关于一个屏幕坐标转换为世界坐标的一个特殊有关问题

2012-04-19 
关于一个屏幕坐标转换为世界坐标的一个特殊问题。我看了很多屏幕坐标转换为世界坐标的描述。也用过下列这段

关于一个屏幕坐标转换为世界坐标的一个特殊问题。
我看了很多屏幕坐标转换为世界坐标的描述。也用过下列这段代码。
GLint viewport[4]; 
GLdouble modelview[16]; 
GLdouble projection[16]; 
GLfloat winX, winY, winZ; 
GLdouble posX, posY, posZ; 
glGetDoublev(GL_MODELVIEW_MATRIX, modelview); 
glGetDoublev(GL_PROJECTION_MATRIX, projection); 
glGetIntegerv(GL_VIEWPORT, viewport); 
winX = (float)x; 
winY = (float)viewport[3] - (float)y; 
glReadPixels(x, int(winY), 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &winZ);
winZ = 1;
gluUnProject(winX, winY, winZ, modelview, projection, viewport, &posX, &posY, &posZ); 

可是我一直都想不到我得到的结果。(简单来说,当y接近于0的时候,我可以得到我想要的结果。)

事实上小弟在做一个粒子系统,也就是particle system。我想做到的就是形成鼠标和屏幕的互动。(好吧,这也是小弟第一次写opengl代码。很多原理暂且不懂。。只是时间紧迫,也没法参详了。。咳咳)

我的具体问题是这样的:

其实我想做到的,和真正的屏幕坐标转换为世界坐标可能有些不太一样。

我想做到的是。我已知一个坐标平面z=-5.0,我要做到的是,屏幕坐标和这个平面上的坐标的切换。

也就是我点击屏幕,我获得的坐标是x=x0,y=y0,z=-5这样一个结果。

我的几个初始化函数是这样的:
void initRendering()
{
glEnable(GL_DEPTH_TEST);
glEnable(GL_DEPTH);
}
void handleResize(int w,int h)
{
glViewport(0,0,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45.0,(double)w/(double)h,1.0,200.0);
}

下面是在drawscene里面的一些参数设置。
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glPointSize(2.0f);
glPushMatrix();

glScalef(1,1,1);
glTranslatef(e->currentpos.x, e->currentpos.y, e->currentpos.z);

glRotatef(0, 0.0f, 0.0f, 1.0f);
glRotatef(0, 0.0f, 1.0f, 0.0f);
glRotatef(0, 1.0f, 0.0f, 0.0f); 

急需求救!望高手解围!!非常感谢大家……

[解决办法]
不知到楼主参考过我blog中的文章没有

先弄清楚gl的图形管线
http://blog.csdn.net/zhangci226/archive/2010/02/21/5314184.aspx

然后可以使用ray picking来实现屏幕坐标到世界坐标的转换http://blog.csdn.net/zhangci226/archive/2010/03/19/5396986.aspx

热点排行