首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 平面设计 > 图形图像 >

怎么用opengl实现鼠标拖动模型【】

2012-12-30 
如何用opengl实现鼠标拖动模型【在线等】我的想法是:把鼠标点下的点和鼠标移动的点转换成世界坐标,然后计算

如何用opengl实现鼠标拖动模型【在线等】
我的想法是:把鼠标点下的点和鼠标移动的点转换成世界坐标,然后计算偏移量,再调用gltranslatef函数,但移动偏差很大。屏幕坐标转世界坐标代码:

void CPointCloudView::screen2world(int x, int y, GLdouble* worldC)
{
    GLint viewport[4];
    GLdouble modelview[16];
    GLdouble projection[16];
    GLfloat winX, winY, winZ;
    GLdouble posX=0, posY=0, posZ=0;
 
    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);
    gluUnProject(winX, winY, winZ, modelview, projection, viewport, &posX, &posY, &posZ);
 
    worldC[0] = posX;
    worldC[1] = posY;
    worldC[2] = posZ;
 
}

我做的是点云的显示,现在想实现用鼠标拖动点云
[解决办法]
不用这么复杂吧,直接把鼠标的移动增量放大或缩小,然后喂给 gltranslate 就可以了,放缩的参数得具体调节。
[解决办法]
楼上说的是正道,不要变换来变换去
用6个全局变量来控制平移x,y,z和旋转x_angle,y_angle,z_angle
在render的过程中,模型的显示就要跟这6个变量关联起来
然后你鼠标移动过程中几乎没有什么操作,就是根据鼠标移动来改变这6个全局变量的值,模型会自动更新的.
变换的话走了弯路了

热点排行