Пример #1
0
        private unsafe void Render(Scene sc, Bitmap bitmap, Rectangle rect)
        {
            // clip rect to bitmap
            rect = new Rectangle(
                Math.Max(0, rect.Left),
                Math.Max(0, rect.Top),
                Math.Min(bitmap.Width - rect.Left, rect.Width),
                Math.Min(bitmap.Height - rect.Top, rect.Height));

            Lucid.Raytracing.Color[] colorBuffer = new Lucid.Raytracing.Color[rect.Width * rect.Height];
            sc.Render(rect, colorBuffer);

            BitmapData data = bitmap.LockBits(rect, ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb);

            for (int y = 0; y < data.Height; y++)
            {
                int* dataPos = (int*)((int)data.Scan0 + (y * data.Stride));

                for (int x = 0; x < data.Width; x++)
                {
                    *dataPos = colorBuffer[x + rect.Width * y].ToArgb();
                    dataPos++;
                    //bitmap.SetPixel(x, y, col.ToDrawingColor());
                }
            }

            bitmap.UnlockBits(data);
        }