Обзор программных средств Майкрософт для графики и визуализации: коммерческой, игровой, научной

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    1 Favorite

    Обзор программных средств Майкрософт для графики и визуализации: коммерческой, игровой, научной - Presentation Transcript

    1. Обзор программных средств Майкрософт для графики и визуализации: коммерческой, игровой, научной
      Сошников Дмитрий Валерьевич, к.ф.-м.н., доц.dmitryso@microsoft.com http://twitter.com/shwars
    2. О чём доклад?
      Средства для пользователей
      Microsoft Expression
      PhotoSynth / GeoSynth
      Deep Zoom
      Image Composite Editor
      Средства для разработчиков
      DirectX
      XNA Game Studio
      Silverlight / WPF
      Дополнительно
      Научные расчёты и визуализация на F#
      Проекты Microsoft Research
    3. Microsoft Expression Studio
    4. Место Expression в разработке
    5. PhotoSynth – http://photosynth.net
    6. GeoSynth - http://www.vexcel.com
      4D-визуализация (3D + время)
    7. SeaDragon – http://seadragon.com
      83 megapixel!
    8. Deep Zoom Composer
    9. Microsoft ICE: Image Composite Editor
    10. Эволюция DirectX
      XNA Game Studio – не только для игр!
    11. Архитектура XNA
      XNA Game Studio
      XNA Framework
    12. Архитектура XNA
      Content
      Code
      Components
      XACT
      XINPUT
      XContent
      Direct3D
      Graphics
      Audio
      Input
      Math
      Storage
      Application Model
      Content Pipeline
      Starter Kits
      Legend
      Community
      XNA Provides
      You Provide
      Games
      Extended
      Framework
      Core
      Framework
      Platform
    13. Пример
      void DrawModel(Model M, Vector3 rotation, Vector3 scale, Vector3 position)
      {
      foreach(ModelMesh mesh in M.Meshes)
      {
      foreach (BasicEffect effect in mesh.Effects)
      {
      effect.EnableDefaultLighting();
      effect.PreferPerPixelLighting = true;
      effect.World =
      Matrix.CreateFromYawPitchRoll(rotation.Y,rotation.X,rotation.Z) *
      Matrix.CreateScale(scale) *
      Matrix.CreateTranslation(position);
      effect.Projection = cameraProjectionMatrix;
      effect.View = cameraViewMatrix;
      }
      mesh.Draw();
      }
      }
    14. Научная визуализация в Silverlighthttp://blogs.msdn.com/rucoding4fun/archive/2009/10/05/o-silverlight.aspx
      Идеальное решение для научной визуализации:
      • Клиент на Silverlight
      • Вычисления на сервере (HPC)
    15. Silverlight
      <Canvas x:Name="LayoutRoot" Background="White" MouseMove="LayoutRoot_MouseMove">
      <Ellipse x:Name="dot" Fill="#FFFFFF" Width="10" Height="10" />
      <Image x:Name="blur" Width="400" Height="300" Stretch="Fill">
      <Image.Effect>
      <BlurEffect Radius="5"/>
      </Image.Effect>
      </Image>
      </Canvas>
      void CompositionTarget_Rendering(object sender, EventArgs e)
      {
      wb.Invalidate();
      MatrixTransformmtm = new MatrixTransform();
      mtm.Matrix = new Matrix(1, 0, 0, 1, mouse.X, mouse.Y);
      wb.Render(blur, new MatrixTransform());
      wb.Render(dot, mtm);
      wb.Render(black, new MatrixTransform());
      }
    16. F# как язык научных расчётов
      Сколько строк кода для построения фрактала?
    17. Множество Мандельброта
      let rec rpt n f =
      if n=0 then fun x->x
      else f >> (rpt (n-1) f);;
      let mandelf (c:Complex) (z:Complex) = z*z+c;;
      let ismandel c = Complex.Abs(rpt 20 (mandelf c) (Complex.zero))<1.0;;
      letscale (x:float,y:float) (u,v) n = float(n-u)/float(v-u)*(y-x)+x;;
      let form =
      let image = new Bitmap(400, 400)
      let lscale = scale (-1.2,1.2) (0,image.Height-1)
      for i = 0 to (image.Height-1) do
      for j = 0 to (image.Width-1) do
      let t = complex (lscale i) (lscale j) in
      image.SetPixel(i,j,ifismandel t then Color.Black else Color.White)
      let temp = new Form()
      temp.Paint.Add(fun e -> e.Graphics.DrawImage(image, 0, 0))
      temp
    18. Научная визуализация в F#
      let form = new SmoothForm(Visible = true, TopMost = true)
      let renderer = new DirectXRenderer(form)
      renderer.DrawScene.Add(fun _ -> renderer.DrawCubeAxis())
      renderer.DrawScene.Add(fun _ -> renderer.SetupLights())
      let mutable view =
      { YawPitchRoll = Matrix.RotationYawPitchRoll(0.0f,0.0f,0.0f);
      Focus = scale 0.5f (X1 + Y1 + Z1);
      Zoom = 4.0 }
      renderer.DrawScene.Add(fun _ -> renderer.SetView(view))
      let mutable ff = (fun (t:float32) x y -> x * (1.0f - y))
      let mutable range = (0.0f,1.0f)
      let mutable mesh = BaseMesh.Grid(20,20)
      let scalef (min,max) (z:float32) = (z-min) / (max-min)
      let theFunction t x y = ff t x y |> scalef range
      renderer.DrawScene.Add(fun t ->
      renderer.DrawSurfacemesh (theFunction t))
    19. VS Lab - http://vslab.codeplex.com/
    20. Параллелизм и асинхр. I/O в F#
      using System;
      using System.IO;
      using System.Threading;
       
      public class BulkImageProcAsync
      {
          public const String ImageBaseName = "tmpImage-";
          public const intnumImages = 200;
          public const intnumPixels = 512 * 512;
       
          // ProcessImage has a simple O(N) loop, and you can vary the number
          // of times you repeat that loop to make the application more CPU-
          // bound or more IO-bound.
          public static intprocessImageRepeats = 20;
       
          // Threads must decrement NumImagesToFinish, and protect
          // their access to it through a mutex.
          public static intNumImagesToFinish = numImages;
          public static Object[] NumImagesMutex = new Object[0];
          // WaitObject is signalled when all image processing is done.
          public static Object[] WaitObject = new Object[0];
          public class ImageStateObject
          {
              public byte[] pixels;
              public intimageNum;
              public FileStreamfs;
          }
       
       
          public static void ReadInImageCallback(IAsyncResultasyncResult)
          {
              ImageStateObject state = (ImageStateObject)asyncResult.AsyncState;
              Stream stream = state.fs;
              intbytesRead = stream.EndRead(asyncResult);
              if (bytesRead != numPixels)
                  throw new Exception(String.Format
                      ("In ReadInImageCallback, got the wrong number of " +
                      "bytes from the image: {0}.", bytesRead));
              ProcessImage(state.pixels, state.imageNum);
              stream.Close();
       
              // Now write out the image. 
              // Using asynchronous I/O here appears not to be best practice.
              // It ends up swamping the threadpool, because the threadpool
              // threads are blocked on I/O requests that were just queued to
              // the threadpool.
              FileStreamfs = new FileStream(ImageBaseName + state.imageNum +
                  ".done", FileMode.Create, FileAccess.Write, FileShare.None,
                  4096, false);
              fs.Write(state.pixels, 0, numPixels);
              fs.Close();
       
              // This application model uses too much memory.
              // Releasing memory as soon as possible is a good idea,
              // especially global state.
              state.pixels = null;
              fs = null;
              // Record that an image is finished now.
              lock (NumImagesMutex)
              {
                  NumImagesToFinish--;
                  if (NumImagesToFinish == 0)
                  {
                      Monitor.Enter(WaitObject);
                      Monitor.Pulse(WaitObject);
                      Monitor.Exit(WaitObject);
                  }
              }
          }
       
             public static void ProcessImagesInBulk()
          {
              Console.WriteLine("Processing images...  ");
              long t0 = Environment.TickCount;
              NumImagesToFinish = numImages;
              AsyncCallbackreadImageCallback = new
                  AsyncCallback(ReadInImageCallback);
              for (inti = 0; i < numImages; i++)
              {
                  ImageStateObject state = new ImageStateObject();
                  state.pixels = new byte[numPixels];
                  state.imageNum = i;
                  // Very large items are read only once, so you can make the
                  // buffer on the FileStream very small to save memory.
                  FileStreamfs = new FileStream(ImageBaseName + i + ".tmp",
                      FileMode.Open, FileAccess.Read, FileShare.Read, 1, true);
                  state.fs = fs;
                  fs.BeginRead(state.pixels, 0, numPixels, readImageCallback,
                      state);
              }
       
              // Determine whether all images are done being processed. 
              // If not, block until all are finished.
              boolmustBlock = false;
              lock (NumImagesMutex)
              {
                  if (NumImagesToFinish > 0)
                      mustBlock = true;
              }
              if (mustBlock)
              {
                  Console.WriteLine("All worker threads are queued. " +
                      " Blocking until they complete. numLeft: {0}",
                      NumImagesToFinish);
                  Monitor.Enter(WaitObject);
                  Monitor.Wait(WaitObject);
                  Monitor.Exit(WaitObject);
              }
              long t1 = Environment.TickCount;
              Console.WriteLine("Total time processing images: {0}ms",
                  (t1 - t0));
          }
      }
      let ProcessImageAsync () =
      async { let inStream = File.OpenRead(sprintf "Image%d.tmp" i)
      let! pixels = inStream.ReadAsync(numPixels)
      let pixels' = TransformImage(pixels,i)
      let outStream = File.OpenWrite(sprintf "Image%d.done" i)
      do! outStream.WriteAsync(pixels')
      do Console.WriteLine "done!" }
       
      let ProcessImagesAsyncWorkflow() =
      Async.Run (Async.Parallel
      [ for i in 1 .. numImages -> ProcessImageAsynci ])
       
    21. Проекты Microsoft Research
      Image & Video Editing @ MSR Cambridge
      AutoCollage
      HD View
      http://www.worldwidetelescope.org
    22. Майкрософт в России
      MSR
      Организация/поддержка научных мероприятий
      Программы научной стажировки и академического обмена
      Совместные научные проекты
      Департамент стратегических технологий
      Организация технологических мероприятий, конференций
      Поддержка при использовании технологий в учебном процессе и студенческих проектах
      Студенческие конкурсы (Imagine Cup)
      Студенты-партнёры (MSP, Microsoft Student Partners)
      Бесплатное программное обеспечение (вкл.исходный код ядра Windows)
    23. Выводы
      Обзор интересных графических технологий как для пользователей, так и для тех, кто пишет код
      Майкрософт предлагает как готовые технологии, так и интересные идеи в разработке
      .NET – удивительная платформа, которая позволяет объединять в едином проекте различные инструменты для графики и вычислений
      F#, .NET Parallel Extensions, Windows CCS, Windows Azure – для параллельных вычислений
      XNA, Silverlight, WPF – для визуализации
      WCF – для коммуникации в модели вычислений S+S
    24. СошниковДмитрий Валерьевич
      E-mail: dmitryso@microsoft.com
      Blog: http://blogs.msdn.com/sos
      Twitter: http://twitter.com/shwars
      VKontakte: http://vkontakte.ru/id3796212
      Координатор академических программ
      Департамента стратегических технологий
      Майкрософт Россия
      Доцент каф. Вычислительной математики и
      программирования МАИ
      Доцент каф. Управления разработкой программного
      Обеспечения ГУ ВШЭ
    SlideShare Zeitgeist 2009

    + Dmitri SoshnikovDmitri Soshnikov Nominate

    custom

    158 views, 1 favs, 0 embeds more stats

    Презентация, с которой я выс more

    More info about this document

    © All Rights Reserved

    Go to text version

    • Total Views 158
      • 158 on SlideShare
      • 0 from embeds
    • Comments 0
    • Favorites 1
    • Downloads 0
    Most viewed embeds

    more

    All embeds

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories