• 怎样在程序中使用vgPicker移动物体


      1#include        
      2#include "vg.h"           
      3#include "pf.h"           
      4#include "assert.h"     
      5
      6
      7vgPicker    *picker    = NULL;
      8vgObserver  *mainObs   = NULL;
      9vgChannel   *mainChan  = NULL;
     10vgEnv       *mainEnv   = NULL;
     11vgWindow    *mainWin   = NULL;
     12vgGfx       *mainGfx   = NULL;
     13vgScene     *mainScn   = NULL;
     14
     15
     16void  setSystemPointers();
     17void  createPicker();
     18void  userUpdates();
     19void  checkPickEvent();
     20
     21void setSystemPointers(){
     22//  ####################################################
     23//  # 获取系统的主要指针,注意必须在vgConfigSys()之后调用      
     24//  #    
     25//  ####################################################
     26
     27    mainWin = vgGetWin( 0 );
     28    assert(mainWin);
     29
     30    mainObs = vgGetObserv( 0 );        
     31    assert(mainObs  );
     32
     33    mainChan = vgGetObservChan( mainObs, 0 );
     34    assert(mainChan);
     35
     36    mainGfx = vgGetObservGfx( mainObs );   
     37    assert(mainEnv);
     38
     39    mainEnv = vgGetEnv( 0 );   
     40    assert(mainEnv);
     41
     42    mainScn = vgGetScene(0);
     43    assert(mainScn);
     44
     45}
     
     46
     47
     48void createPicker(){
     49//  ######################################## 
     50//  # 创建一个vgPicker     
     51//  #
     52//  ######################################## 
     53
     54    picker = vgNewPicker();
     55    assert( picker );
     56    vgName( picker, "example_picker" );
     57
     58    // 
     59    // 指定vgPicker起作用的场景和通道
     60    // 
     61    vgPickerScene( picker,  mainScn );
     62    vgPickerChannel( picker,  mainChan  );
     63
     64    // 
     65    // 设置vgPicker属性,选择物体红色显示
     66    // 
     67    vgPickerHighLightColor( picker, 1.0f0.0f0.0f ); 
     68    vgProp( picker, VGPICK_TRANSFORM,     VGPICK_TRANSLATE   );
     69    vgProp( picker, VGPICK_TRANSCOORDS,    VGPICK_OBJECT_AXES );
     70    vgProp( picker, VGPICK_HL_LEVEL,       VGPICK_OBJECT      ); 
     71    vgProp( picker, VGPICK_HL_STYLE,       VGPICK_HL_LINE     );
     72    vgProp( picker, VGPICK_TERRAIN_CLAMP,  VG_OFF             );
     73    vgProp( picker, VGPICK_TRANSOVERRIDE,  VG_OFF             );
     74    vgProp( picker, VGPICK_DISPLAY_STDOUT, VG_OFF             ); 
     75    vgProp( picker, VGPICK_MULTIPLE_PICKS, VG_OFF             );
     76    vgProp( picker, VGPICK_AUTOTRANSFORM,  VG_OFF             );
     77    vgProp( picker, VGPICK_TRACKPLANE,     VGPICK_TRACK_XY    );
     78    vgProp( picker, VGPICK_AUTOTRACKPLANE, VG_OFF             );
     79    vgProp( picker, VGPICK_DRAG_FACTOR,    1.0f               );
     80    vgProp( picker, VGPICK_RENDER_ISECT,   VG_OFF             );
     81
     82    // 
     83    // 设置vgPicker的相交矢量 
     84    // 
     85    vgPickerClampIsector( picker, 0x10000000 ); 
     86    vgPickerIsector( picker, 0x10000000 );
     87
     88    // 启用vgPicker 
     89    vgProp( picker, VGCOMMON_ENABLED,  VG_ON );
     90
     91}
     
     92
     93void checkPickEvent()
     94// ################################################### 
     95// # 判断vgPicker当前的动作 
     96// # 
     97// # 
     98// ################################################### 
     99static vgMouse mouse; 
    100static  vgPosition *pos = NULL;
    101    if( pos == NULL ){
    102      pos = vgNewPos();
    103       assert( pos );
    104        }

    105    vgGetMouse( &mouse );
    106
    107    // 鼠标左键:拾取或取消拾取物体
    108   if( mouse.lb && !mouse.mb && !mouse.rb ) {
    109        vgGetPos( obs, pos );
    110        vgPerformPickProcessing( picker, pos) ;
    111        }

    112    
    113    // 拖拽鼠标右键:在指定的平面上移动选定的物体  
    114    if!mouse.lb && !mouse.mb && mouse.rb ) {
    115        vgGetPos( obs, pos );
    116          vgPickerDoMouseTransform( picker, pos);
    117        }

    118
    119}
     
    120
    121void userUpdates( ) {
    122//  ############################################ 
    123//  # 响应用户的键盘输入:
    124//  # 1——在XY平面上移动物体(默认情况)
    125//  # 2——在XZ平面上移动物体
    126//  # 3——在YZ平面上移动物体   
    127//  ############################################ 
    128int  key   = 0;
    129   
    130    while( (key = vgGetWinKey( mainWin )) != 0 ) {
    131        
    132        switch( key ) {
    133                                            
    134           case '1':
    135                vgProp( picker, VGPICK_TRACKPLANE, VGPICK_TRACK_XY );
    136                break;      
    137  
    138            case '2':
    139                vgProp( picker, VGPICK_TRACKPLANE, VGPICK_TRACK_XZ );
    140                break;      
    141  
    142            case '3':
    143                vgProp( picker, VGPICK_TRACKPLANE, VGPICK_TRACK_YZ );
    144                break;      
    145  
    146                       
    147            defaultbreak;                 
    148
    149            }
     
    150        }
      
    151
    152}
     
    153
    154int main(int argc, char* argv[]) {
    155
    156
    157    
    158    if( argc \n", argv[0] ); 
    159       exit ( -1 ); 
    160       }

    161     
    162    vgInitSys();
    163    vgDefineSys( argv[1] );
    164    vgConfigSys(); 
    165
    166    setSystemPointers();
    167    createPicker();
    168
    169    //
    170    //设置物体mask掩码与vgPicker相一致,使得所有的物体都可以被选中 
    171    // 
    172    forint  i= 0; i < vgGetNumObj(), i++ ){
    173
    174        vgObject *obj     = vgGetObj(i);
    175        unsigned int mask = vgGetObjClass( obj );
    176        mask |= vgGetPickerIsector( picker );
    177        vgObjClass( obj, mask );
    178        }

    179
    180    whiletrue ) {
    181
    182        vgSyncFrame();
    183        vgFrame();
    184        userUpdates();
    185        checkPickEvent();
    186        }

    187
    188
    189return 0;
    190}
  • 相关阅读:
    Ansible快速实战指南----多机自动化执行命令、部署神器
    linux 挂载共享盘
    蓄水池抽样算法
    PCA MATLAB代码
    网口转串口
    通过Python收集MySQL MHA 部署及运行状态信息的功能实现
    Linux常用命令总结(二)
    python 学习笔记 (四)
    MySQL 学习笔记(四)
    学习ProxySQL参考到几个网址
  • 原文地址:https://www.cnblogs.com/yunbo/p/240821.html
Copyright © 2020-2023  润新知