private void Generate() { Julia julia = new Julia( global_real, global_imag, global_theta ); float scale = 2.5f; float vcut = 29.0f; float vscale = 1.0f / vcut; HardwarePixelBuffer buffer = mPTex.GetBuffer( 0, 0 ); IntPtr Data = buffer.Lock( BufferLocking.Normal ); unsafe { PixelBox pb = buffer.CurrentLock; int* pbptr = (int*)pb.Data.ToPointer(); for ( int z = pb.Front; z < pb.Back; z++ ) { for ( int y = pb.Top; y < pb.Bottom; y++ ) { for ( int x = pb.Left; x < pb.Right; x++ ) { if ( z == pb.Front || z == ( pb.Back - 1 ) || y == pb.Top || y == ( pb.Bottom - 1 ) || x == pb.Left || x == ( pb.Right - 1 ) ) { // On border, must be zero pbptr[ x ] = 0; } else { float val = julia.eval( ( (float)x / pb.Width - 0.5f ) * scale, ( (float)y / pb.Height - 0.5f ) * scale, ( (float)z / pb.Depth - 0.5f ) * scale ); if ( val > vcut ) val = vcut; ColorEx col = new ColorEx( ( 1.0f - ( val * vscale ) ) * 0.7f, (float)x / pb.Width, (float)y / pb.Height, (float)z / pb.Depth ); IntPtr vale = new IntPtr(pbptr + x ); PixelConverter.PackColor( col, PixelFormat.A8R8G8B8, vale ); } } pbptr += pb.RowPitch; } pbptr += pb.SliceSkip; } buffer.Unlock(); } }