我要发帖 回复

中级会员

8

主题

131

积分

0

专家分

:

私信
发表时间 : 2009-3-3 16:39:49 | 浏览 : 1049    评论 : 1
void CMYMFCVegaView::OnKeyDown(UINT nChar,UINT nRepCnt,UINT nFlags )
{
        vgIsector  *ise;
        vgObserver *obs;
        double R;
        int i;
        vgPosition *pos =vgNewPos();
        float CurrentX,CurrentY,CurrentZ,CurrentH,CurrentP,CurrentR;
        obs=vgGetObserv(0);
        vgProp(obs,VGOBS_TETHERSTATE,VGOBS_STATIC);
        for(i=0;i<vgGetObservNumIsect(obs);i++)
        {
                ise = vgGetObservIsect(obs , i);
                vgRemObservIsect(obs,ise);
        }
        pos=vgNewPos();
        vgGetPos(obs,pos);
        vgGetPosVec(pos,&CurrentX,&CurrentY,&CurrentZ,&CurrentH,&CurrentP,&CurrentR);
        R=sqrt((875.26-CurrentX)*(875.26-CurrentX)+(2122.9-CurrentY)*(2122.9-CurrentY)+CurrentZ*CurrentZ);
       
        if(nChar==VK_UP)
        {
                CurrentX=CurrentX-sin(CurrentH*3.1415/180);
                CurrentY=CurrentY+cos(CurrentH*3.1415/180);
                CurrentZ=-tan(CurrentP*3.1415/180)*sqrt((875.26-CurrentX)*(875.26-CurrentX)+(2122.9-CurrentY)*(2122.9-CurrentY));
        }
    if(nChar==VK_DOWN)
        {
                CurrentX=CurrentX+sin(CurrentH*3.1415/180);
                CurrentY=CurrentY-cos(CurrentH*3.1415/180);
                CurrentZ=-tan(CurrentP*3.1415/180)*sqrt((875.26-CurrentX)*(875.26-CurrentX)+(2122.9-CurrentY)*(2122.9-CurrentY));
        }
        if(nChar==VK_LEFT)
        {
                CurrentH=CurrentH-0.5;
            R=sqrt((875.26-CurrentX)*(875.26-CurrentX)+(2122.9-CurrentY)*(2122.9-CurrentY));
                CurrentX=875.26+R*sin(CurrentH*3.1415/180);
                CurrentY=2122.9-R*cos(CurrentH*3.1415/180);
      
        }
        if(nChar==VK_RIGHT)
        {
                CurrentH=CurrentH+0.5;
                R=sqrt((875.26-CurrentX)*(875.26-CurrentX)+(2122.9-CurrentY)*(2122.9-CurrentY));
                CurrentX=875.26+R*sin(CurrentH*3.1415/180);
                CurrentY=2122.9-R*cos(CurrentH*3.1415/180);

        }
        if(nChar=='W'||nChar=='w')
        {
                CurrentP=CurrentP-0.5;
                CurrentZ=-R*sin(CurrentP*3.1415/180);
                CurrentX=875.26+R*cos(CurrentP*3.1415/180)*sin(CurrentH*3.1415/180);
                CurrentY=2122.9-R*cos(CurrentP*3.1415/180)*cos(CurrentH*3.1415/180);
        }
        if(nChar=='S'||nChar=='s')
        {
                CurrentP=CurrentP+0.5;
                CurrentZ=-R*sin(CurrentP*3.1415/180);
                CurrentX=875.26+R*cos(CurrentP*3.1415/180)*sin(CurrentH*3.1415/180);
                CurrentY=2122.9-R*cos(CurrentP*3.1415/180)*cos(CurrentH*3.1415/180);
        }
        vgPosVec(pos,CurrentX,CurrentY,CurrentZ,CurrentH,CurrentP,CurrentR);
        vgPos(obs,pos);
        vgDelPos(pos);

        CView::OnChar(nChar, nRepCnt, nFlags);       

}

视角始终对着你所设置的一定点(球心),可以任意调节仰角俯角,水平转角,和调节离中心的距离.

最近VR访客

huahuaxia 评论于2009-8-7 14:19:34
厉害,研究研究

手机版|VR开发网 统计 津ICP备18009691号
网安备12019202000257

GMT+8, 2021-4-21 01:46 PM

返回顶部