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

    技术2026-04-02  10

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

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

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

    获取具体如下:

    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下,便高亮显示了。

     

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

    最新回复(0)