示例#1
0
        bool is_back_facing(int tid)
        {
            Vector3d n = PreviewMesh.GetTriNormal(tid);
            Vector3d c = PreviewMesh.GetTriCentroid(tid);

            return((c - cameraFrameL.Origin).Dot(n) > -0.1);
        }
示例#2
0
        public bool FindHitTriangle(Ray3f sceneRay, bool snap_to_center, ref Frame3f hitFrameS, ref int hitTID)
        {
            Ray3f objRay = SceneTransforms.SceneToObject(Target, sceneRay);

            hitTID = PreviewSpatial.FindNearestHitTriangle(objRay);
            if (hitTID == DMesh3.InvalidID)
            {
                return(false);
            }
            if (allow_backface_hits == false && is_back_facing(hitTID))
            {
                return(false);
            }

            var intr = MeshQueries.TriangleIntersection(PreviewMesh, hitTID, objRay);

            if (snap_to_center)
            {
                Frame3f hitFrameL = new Frame3f(PreviewMesh.GetTriCentroid(hitTID), PreviewMesh.GetTriNormal(hitTID));
                hitFrameS = SceneTransforms.ObjectToScene(previewSO, hitFrameL);
            }
            else
            {
                Vector3f hitPoint  = objRay.PointAt((float)intr.RayParameter);
                Frame3f  hitFrameL = new Frame3f(hitPoint, PreviewMesh.GetTriNormal(hitTID));
                hitFrameS = SceneTransforms.ObjectToScene(previewSO, hitFrameL);
            }

            return(true);
        }