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

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

Taghoops                                          

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

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

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

获取具体如下:

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;
}

原文地址:https://www.cnblogs.com/aiwz/p/6333183.html