我要发帖 回复

正式会员

4

主题

66

积分

0

专家分

兴趣点(最多三项):

视景仿真

私信
发表时间 : 2011-12-1 11:21:24 | 浏览 : 767    评论 : 1
void zhuangpei::setSystemPointers()
{
        g_win   = vgGetWin( 0 );
        g_obs   = vgGetObserv( 0 );
        g_chan  = vgGetObservChan( g_obs, 0 );
        g_gfx   = vgGetObservGfx( g_obs );
        g_env   = vgGetEnv( 0 );
        g_scene = vgGetScene(0);
}
void zhuangpei::toggleGfx(vgGfx *gfx, int what)
{
        int i;
        i = (int)   vgGetProp( gfx,  what );
    if( i )  vgProp( gfx, what, VG_OFF );
    else  vgProp( gfx, what, VG_ON );
}
void zhuangpei::userUpdates()
{
        int    i;
        static int   stats = 0;
        static float tod   = 1.0;
        static float first = 1;
        if (first)
        {
                first = 0;
                tod = vgGetProp( g_env, VGENV_TOD );
        }
        while( (i = vgGetWinKey( g_win )) != 0 )
        {
                switch( i )
                {
                case '<':
                        tod -= 0.01f;
                        if( tod < 0.0 )
                                tod = 0.0;
                        vgProp( g_env, VGENV_TOD, tod );
                        break;
                case '>':
                        tod += 0.01f;
                        if( tod > 1.0 )
                                tod = 1.0;
                        vgProp( g_env, VGENV_TOD, tod );
                        break;
                case 's':
                        stats += 1;
                        if( stats > VGCHAN_FILL+1 )
                                stats = VGCHAN_STATSOFF;
                        vgProp( g_chan, VGCHAN_STATSSEL, stats );
                        break;
                case 'f':
                        toggleGfx( g_gfx, VGGFX_FOG );
                        break;
                case 't':
                        toggleGfx( g_gfx, VGGFX_TEXTURE );
                        break;
                case 'w':
                        toggleGfx( g_gfx, VGGFX_WIREFRAME );
                        break;
                case 'p' :
                        doPick();
                        break;
                default:
                        break;
                } /* switch */
        } /* while */
}

void zhuangpei::doPick()
{
                /* ################################################### */
        /* # Local Function                                  # */
        /* # Perform the a pick action if we are already  # */
        /* # have a valid pick picking it will unpick it     # */
        /* ################################################### */
        static  vgPosition *pos = NULL;
        // pfGeode *geode = NULL;
        vgPart    *part=NULL;
        float range,x,y,z;
        if( pos == NULL )
        {
                pos = vgNewPos();
                ASSERT( pos );
               
        }
        // *****************************************
        // * We need to get the observers position *
        // *****************************************
        vgGetPos( g_obs, pos );
        // ********************************************************
        // * Do the interection test if we have a valid hit with  *
        // * the an item then process it otherwise do nothing     *
        // * This takes the Eye ( observer ) position and fires a *
        // * LOS isector throught the Eye and mouse position      *
        // ********************************************************
        if( vgPerformPickProcessing( g_Picker, pos) )
        {
                /***************************************************************/
                /*                                                             */
                /* Retrieve a pointer to the pick item                         */
                /*                                                             */
                /* The following are used to get specific types                */
                /*                                                             */
                /*        (vgPlayer  *) vgGetPickerPickedPlayer( g_Picker );   */
                /*        (vgPobject *) vgGetPickerPickedObject( g_Picker );   */
                /*        (vgPart    *) vgGetPickerPickedPart  ( g_Picker );   */
                /*        (pfGeode   *) vgGetPickerPickedGeode ( g_Picker );   */
                /*        (pfGeoSet  *) vgGetPickerPickedGeoSet( g_Picker );   */
                /*                                                             */
                /* set with vgProp( g_Picker, VGPICK_HL_LEVEL, VGPICK_GEODE ); */
                /*                                                             */
                /***************************************************************/
                //   geode = (pfGeode*) vgGetPickerPickedGeode ( g_Picker );
                part  =   (vgPart *) vgGetPickerPickedPart  ( g_Picker );
                // ************************************************************/
                // * Get the intersection positionand range to the pick point */
                // ************************************************************/
                vgGetPickerIntersection( g_Picker, &range, &x,&y, &z);
        }
}

void zhuangpei::createPicker()
{
                /* ######################################## */
        /* # Local Function                       # */
        /* #    Create an instance of vgPicker    # */
        /* ######################################## */
    // *********************************
        // * Create the new Terrain picker *
        // *********************************
        g_Picker = vgNewPicker();
        ASSERT( g_Picker );
    vgName(g_Picker, "example_picker" );
  
  
    //  
    // we use the default scene 0 and channel 0  
    //  
    vgPickerScene(g_Picker,g_scene );
    vgPickerChannel(g_Picker,g_chan  );
  
    //  
    // Set the Pick highlight to Red
    //  
     vgPickerHighLightColor(g_Picker, 1.0f, 0.0f, 0.0f );   
         vgProp(g_Picker, VGPICK_TRANSFORM,     VGPICK_TRANSLATE   );
    vgProp(g_Picker, VGPICK_TRANSCOORDS,    VGPICK_OBJECT_AXES );
    vgProp(g_Picker, VGPICK_HL_LEVEL,       VGPICK_OBJECT      );  
    vgProp(g_Picker, VGPICK_HL_STYLE,       VGPICK_HL_LINES     );
    vgProp(g_Picker, VGPICK_TERRAIN_CLAMP,  VG_OFF             );
    vgProp(g_Picker, VGPICK_TRANSOVERRIDE,  VG_OFF             );
    vgProp(g_Picker, VGPICK_DISPLAY_STDOUT, VG_OFF             );  
    vgProp(g_Picker, VGPICK_MULTIPLE_PICKS, VG_OFF             );
    vgProp(g_Picker, VGPICK_AUTOTRANSFORM,  VG_OFF             );
    vgProp(g_Picker, VGPICK_TRACKPLANE,     VGPICK_TRACK_XY    );
    vgProp(g_Picker, VGPICK_AUTOTRACKPLANE, VG_OFF             );
    vgProp(g_Picker, VGPICK_DRAG_FACTOR,    1.0f               );
    vgProp(g_Picker, VGPICK_RENDER_ISECT,   VG_OFF             );
  
    //  
    // Set the Internal isector mask to ALL  
    //  
    vgPickerClampIsector( g_Picker, 0x10000000 );  
    vgPickerIsector(g_Picker, 0x10000000 );
  
    //  
    // We need to turn the vgPicker ON  
    //  
    vgProp(g_Picker, VGCOMMON_ENABLED,  VG_ON );
  
}



void zhuangpei::OnMove()
{
                while(true)
          {
                 while (::PeekMessage(&msg21, NULL, NULL, NULL, PM_NOREMOVE))
                 {
                   if (WM_LBUTTONUP == msg21.message)
                   {
                         CWnd *pWnd = WindowFromPoint(msg21.pt);
                         //判断是否点击停止按钮。
                         if (GetDlgItem(IDC_MOVE) == pWnd)
                         {
                          return;
                         }
                   }

                   else if (VK_ESCAPE == msg21.wParam)
                   {
                         return;
                   }
        }

                         // TODO: Add your message handler code here and/or call default
                                         /****************************************/
                /*  init, define, and config the system */
                /****************************************/
                vgInitSys();
                vgDefineSys("test2.adf");
                vgConfigSys();
                setSystemPointers();
                // ************************************
                // * Create and initialise our picker *
                // ************************************
                createPicker();
               
                for( int  i= 0; i < vgGetNumObj(); i++ )
                {
                        vgObject *obj     = vgGetObj(i);
                        unsigned int mask = vgGetObjClass( obj );
                        mask |= vgGetPickerIsector( g_Picker );
                        vgObjClass( obj, mask );
                }
               
                while (1)
                {
                        vgSyncFrame();
                        vgFrame();
                        userUpdates();
                }


       
        //处理其它的消息。
                 //机体
/*          vgObject* obj;
          vgPart* dof;
          vgPosition* pos;
          float x, y, z, h, p, r;
          obj=vgGetObj(1);
          dof=vgFindPart(obj, "luogan", NULL);
          pos=vgNewPos();
          vgGetPos(dof, pos);  
          vgGetPosVec(pos, &x, &y, &z, &h, &p, &r);   
            y-=0.008f;  
          vgPosVec(pos, x, y, z, h, p, r);
          vgPos(dof,pos);
          vgDelPos(pos);
          //外景
          obj=vgGetObj(0);
          dof=vgFindPart(obj, "z1", NULL);
          pos=vgNewPos();
          vgGetPos(dof, pos);  
          vgGetPosVec(pos, &x, &y, &z, &h, &p, &r);   
          y-=0.08f;  
          vgPosVec(pos, x, y, z, h, p, r);
          vgPos(dof,pos);
          vgDelPos(pos);
*/
        }               
}

希望高手帮忙啊  最好能给我一个vega基于MFC的picker关于虚拟装配的例子啊

最近VR访客

aspire 评论于2011-12-2 15:27:29
怎么没有大哥帮忙啊

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

GMT+8, 2021-1-17 02:43 PM

返回顶部