Пример #1
0
        public TriangleCallback()
        {
            _processTriangle = new ProcessTriangleDelegate(ProcessTriangleUnmanaged);

            _native = btTriangleCallbackWrapper_new(
                Marshal.GetFunctionPointerForDelegate(_processTriangle));
        }
        public TriangleCallback()
        {
            _processTriangle = new ProcessTriangleDelegate(ProcessTriangleUnmanaged);

            _native = btTriangleCallbackWrapper_new(
                Marshal.GetFunctionPointerForDelegate(_processTriangle));
        }
        public TriangleCallback()
        {
            _processTriangle = new ProcessTriangleDelegate(ProcessTriangleUnmanaged);

            IntPtr native = btTriangleCallbackWrapper_new(
                Marshal.GetFunctionPointerForDelegate(_processTriangle));

            InitializeUserOwned(native);
        }
Пример #4
0
        /// <summary>
        /// Construct primitive definitions and pass to provided processors.
        /// </summary>
        private static void TraversePrimitives(PrimitiveTopology primitiveTopology, int countVertices,
                                               ProcessPointDelegate processPoint, ProcessLineDelegate processLine, ProcessTriangleDelegate processTriangle)
        {
            switch (primitiveTopology)
            {
            case PrimitiveTopology.PointList:
                for (var i = 0u; i < countVertices; i++)
                {
                    processPoint(i);
                }
                break;

            case PrimitiveTopology.LineList:
                for (var i = 0u; i < countVertices; i += 2)
                {
                    processLine(i, i + 1);
                }
                break;

            case PrimitiveTopology.LineStrip:
                for (var i = 0u; i < countVertices - 1; i++)
                {
                    processLine(i, i + 1);
                }
                break;

            case PrimitiveTopology.TriangleList:
                for (var i = 0u; i < countVertices; i += 3)
                {
                    processTriangle(i, i + 1, i + 2);
                }
                break;

            case PrimitiveTopology.TriangleStrip:
                var flip = false;
                for (var i = 0u; i < countVertices - 2; i++)
                {
                    if (flip)
                    {
                        processTriangle(i, i + 2, i + 1);
                    }
                    else
                    {
                        processTriangle(i, i + 1, i + 2);
                    }
                    flip = !flip;
                }
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(primitiveTopology), primitiveTopology, default);
            }
        }