我要发帖 回复

中级会员

35

主题

201

积分

0

专家分

:

私信
发表时间 : 2007-11-21 11:15:29 | 浏览 : 974    评论 : 0
void setSwitchMasks ( vgSymSwitch *sw, int adjacentChildren )
{
     int numChildren = vgGetSymNumChildren( sw );
     int numMasks    = numChildren;

     if ( numMasks < 1 ) numMasks = 1;

     for ( int i = 0; i < numMasks; i++ )
     {
         /*
         * Add the Index, and select it. Note: The internal mask
         * is already long enough to accomodate the children
         */
         vgAddSymSwitchMaskIndex( sw , i );
         vgSymSwitchMaskIndex( sw, i );

         /* Now set consequtive neighbor bits. */
         for ( int j = i; j < numChildren; j++ )
         {
             if ( j < (i + adjacentChildren) )
                 vgSymSwitchState( sw, j, StateON );   /* Toggle the correct bit */
          else
                 vgSymSwitchState( sw, j, StateOFF );
         }
     }

     /* Select mask 1 as the default initial mask to be displayed */
     vgSymSwitchMaskIndex( sw, 1 );
               
}

上面这段代码是vega 手册中设置掩码的一段代码,最后的结果手册中说应该是100000, 010000, 001000, 000100, 000010, and 000001.   
       但是我觉得有些不对,首先我不知道vgGetSymNumChildren( sw )函数的意思,但我猜应该是取得sw的子节点数吧,所以在这个例子中应该是6吧?  adjacentChildren从它给的结果来看我猜是1,因为它每次只显示一组子节点,不知道对不对?..    然后下面的代码比如i=3的时候,也就是第四组的掩码应该是100,因为j<3的时候里面的for循环没有考虑呀,答案里的000是怎么设置的?不过这样位数都不对,不知道是不是哪儿我没有考虑到?还请程序高手们指点一下哈^_^

最近VR访客

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

GMT+8, 2021-4-20 06:28 AM

返回顶部