コード例 #1
0
        public static HitRecord[] RayPick(Matrix4F viewxform, Matrix4F projxfrom, Ray3F rayW, bool skipSelected)
        {
            HitRecord *nativeHits = null;
            int        count;

            fixed(float *ptr1 = &viewxform.M11, ptr2 = &projxfrom.M11)
            {
                NativeRayPick(
                    ptr1,
                    ptr2,
                    &rayW,
                    skipSelected,
                    &nativeHits,
                    out count);
            }

            var objects = new List <HitRecord>();

            for (int k = 0; k < count; k++)
            {
                objects.Add(*nativeHits);
                nativeHits++;
            }
            return(objects.ToArray());
        }
コード例 #2
0
        public static HitRecord[] FrustumPick(ulong renderSurface, Matrix4F viewxform,
                                              Matrix4F projxfrom,
                                              RectangleF rect)
        {
            s_rect[0] = rect.X;
            s_rect[1] = rect.Y;
            s_rect[2] = rect.Width;
            s_rect[3] = rect.Height;

            HitRecord *nativeHits = null;
            int        count;

            fixed(float *ptr1 = &viewxform.M11, ptr2 = &projxfrom.M11)
            {
                NativeFrustumPick(
                    renderSurface,
                    ptr1,
                    ptr2,
                    s_rect,
                    &nativeHits,
                    out count);
            }

            var objects = new List <HitRecord>();

            for (int k = 0; k < count; k++)
            {
                HitRecord nativehit = *nativeHits;
                objects.Add(nativehit);
                nativeHits++;
            }
            return(objects.ToArray());
        }
コード例 #3
0
        public static bool RayPick(Matrix4F viewxform, Matrix4F projxfrom, Ray3F rayW, bool skipSelected, out HitRecord hit)
        {
            HitRecord *nativeHits = null;
            int        count;

            //bool skipSelected,
            fixed(float *ptr1 = &viewxform.M11, ptr2 = &projxfrom.M11)
            {
                NativeRayPick(
                    ptr1,
                    ptr2,
                    &rayW,
                    skipSelected,
                    &nativeHits,
                    out count);
            }

            if (count > 0)
            {
                hit = *nativeHits;
            }
            else
            {
                hit = new HitRecord();
            }

            return(count > 0);
        }