[HOOPS]二维点向三维空间投影

当鼠标移动的时候,产生的是屏幕坐标的变化。

若是要使得三维空间选中的某个体/面/线也随着移动,就需要将二维点向三维空间投影。

投影时候需要被投向的面的信息:点+面法线

获取具体如下:

HPoint _Compute_Proj_Point(const SPAposition& plane_pt,
   const SPAunit_vector& plane_v,HEventInfo& event)
{
 HC_KEY key = event.GetView()->GetSceneKey();
 HPoint new_pos = event.GetMouseWorldPos();
 float x,y,z;
 float tx,ty,tz;
 HC_Open_Segment_By_Key(key);
 {
  HC_Show_Net_Camera_Position(&x,&y,&z);
  HC_Show_Net_Camera_Target(&tx,&ty,&tz);
 }
 HC_Close_Segment();

//获取camera的方向 ,即射线的方向

SPAposition line_point(new_pos.x,new_pos.y,new_pos.z);
 SPAvector   line_vector(tx-x,ty-y,tz-z);

 SPAposition intersect;
 double line_param;
 HPoint result(0,0,0);

//线面交点
 if (intersect_line_plane(line_point,line_vector,plane_pt,plane_v,
        line_param,intersect)==1)
 {
  result.x = (float)intersect.x();
  result.y = (float)intersect.y();
  result.z = (float)intersect.z();
 }

 return result;
}

 

------------------

用HC_Compute_Selection(...) 获取经过的对象,move到某个segment下,便高亮显示了。

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/qmroom/archive/2008/12/22/3580401.aspx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值