SlideShare uma empresa Scribd logo
1 de 24
Обзор программных средств Майкрософт для графики и визуализации:  коммерческой, игровой, научной Сошников Дмитрий Валерьевич, к.ф.-м.н., доц.dmitryso@microsoft.com	          http://twitter.com/shwars
О чём доклад? Средства для пользователей Microsoft Expression PhotoSynth / GeoSynth Deep Zoom Image Composite Editor Средства для разработчиков DirectX XNA Game Studio Silverlight / WPF Дополнительно Научные расчёты и визуализация на F# Проекты Microsoft Research
Microsoft Expression Studio
Место Expression в разработке
PhotoSynth – http://photosynth.net
GeoSynth - http://www.vexcel.com 4D-визуализация (3D + время)
SeaDragon – http://seadragon.com 83 megapixel!
Deep Zoom Composer
Microsoft ICE: Image Composite Editor
Эволюция DirectX XNA Game Studio – не только для игр!
Архитектура XNA XNA Game Studio XNA Framework
Архитектура 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
Пример  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();             }         }
Научная визуализация в Silverlighthttp://blogs.msdn.com/rucoding4fun/archive/2009/10/05/o-silverlight.aspx Идеальное решение для научной визуализации: ,[object Object]
Вычисления на сервере (HPC),[object Object]
F# как язык научных расчётов Сколько строк кода для построения фрактала?
Множество Мандельброта 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
Научная визуализация в 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))
VS Lab - http://vslab.codeplex.com/
Параллелизм и асинхр. 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 ])  
Проекты Microsoft Research Image & Video Editing @ MSR Cambridge AutoCollage HD View http://www.worldwidetelescope.org
Майкрософт в России MSR Организация/поддержка научных мероприятий Программы научной стажировки и академического обмена Совместные научные проекты Департамент стратегических технологий Организация технологических мероприятий, конференций Поддержка при использовании технологий в учебном процессе и студенческих проектах Студенческие конкурсы (Imagine Cup) Студенты-партнёры (MSP, Microsoft Student Partners) Бесплатное программное обеспечение (вкл.исходный код ядра Windows)
Выводы Обзор интересных графических технологий как для пользователей, так и для тех, кто пишет код Майкрософт предлагает как готовые технологии, так и интересные идеи в разработке .NET – удивительная платформа, которая позволяет объединять в едином проекте различные инструменты для графики и вычислений F#, .NET Parallel Extensions, Windows CCS, Windows Azure – для параллельных вычислений XNA, Silverlight, WPF – для визуализации WCF – для коммуникации в модели вычислений S+S
СошниковДмитрий Валерьевич E-mail: dmitryso@microsoft.com Blog: http://blogs.msdn.com/sos Twitter: http://twitter.com/shwars VKontakte: http://vkontakte.ru/id3796212 Координатор академических программ Департамента стратегических технологий Майкрософт Россия Доцент каф. Вычислительной математики и программирования МАИ Доцент каф. Управления разработкой программного Обеспечения ГУ ВШЭ

Mais conteúdo relacionado

Mais procurados

Лекция 8. Intel Threading Building Blocks
Лекция 8. Intel Threading Building BlocksЛекция 8. Intel Threading Building Blocks
Лекция 8. Intel Threading Building BlocksMikhail Kurnosov
 
Семинар 2. Многопоточное программирование на OpenMP (часть 2)
Семинар 2. Многопоточное программирование на OpenMP (часть 2)Семинар 2. Многопоточное программирование на OpenMP (часть 2)
Семинар 2. Многопоточное программирование на OpenMP (часть 2)Mikhail Kurnosov
 
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPMikhail Kurnosov
 
ПВТ - весна 2015 - Лекция 8. Многопоточное программирование без использования...
ПВТ - весна 2015 - Лекция 8. Многопоточное программирование без использования...ПВТ - весна 2015 - Лекция 8. Многопоточное программирование без использования...
ПВТ - весна 2015 - Лекция 8. Многопоточное программирование без использования...Alexey Paznikov
 
ПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программирования
ПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программированияПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программирования
ПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программированияAlexey Paznikov
 
Знакомство с Papervision3d
Знакомство с Papervision3dЗнакомство с Papervision3d
Знакомство с Papervision3dIgor Ruzanov
 
Семинар 3. Многопоточное программирование на OpenMP (часть 3)
Семинар 3. Многопоточное программирование на OpenMP (часть 3)Семинар 3. Многопоточное программирование на OpenMP (часть 3)
Семинар 3. Многопоточное программирование на OpenMP (часть 3)Mikhail Kurnosov
 
ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...
ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...
ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...Alexey Paznikov
 
Графика в Паскаль
Графика в ПаскальГрафика в Паскаль
Графика в Паскальstarsboy
 
Лекция 7. Стандарт OpenMP (подолжение)
Лекция 7. Стандарт OpenMP (подолжение)Лекция 7. Стандарт OpenMP (подолжение)
Лекция 7. Стандарт OpenMP (подолжение)Mikhail Kurnosov
 
бомба для графики в паскаль
бомба для графики в паскальбомба для графики в паскаль
бомба для графики в паскальИРИНА НЕЧАЕВА
 
Распространённые ошибки оценки производительности .NET-приложений
Распространённые ошибки оценки производительности .NET-приложенийРаспространённые ошибки оценки производительности .NET-приложений
Распространённые ошибки оценки производительности .NET-приложенийMikhail Shcherbakov
 
Векторизация кода (семинар 3)
Векторизация кода (семинар 3)Векторизация кода (семинар 3)
Векторизация кода (семинар 3)Mikhail Kurnosov
 
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPMikhail Kurnosov
 
графические возможности паскаль
графические возможности паскальграфические возможности паскаль
графические возможности паскальIrina Trofimovich
 
Intel IPP Samples for Windows - работа над ошибками
Intel IPP Samples for Windows - работа над ошибкамиIntel IPP Samples for Windows - работа над ошибками
Intel IPP Samples for Windows - работа над ошибкамиTatyanazaxarova
 
«Анимация в PascalABC»
«Анимация в PascalABC»«Анимация в PascalABC»
«Анимация в PascalABC»ValiaKuba
 
хитрости выведения типов
хитрости выведения типовхитрости выведения типов
хитрости выведения типовcorehard_by
 

Mais procurados (20)

Лекция 8. Intel Threading Building Blocks
Лекция 8. Intel Threading Building BlocksЛекция 8. Intel Threading Building Blocks
Лекция 8. Intel Threading Building Blocks
 
Семинар 2. Многопоточное программирование на OpenMP (часть 2)
Семинар 2. Многопоточное программирование на OpenMP (часть 2)Семинар 2. Многопоточное программирование на OpenMP (часть 2)
Семинар 2. Многопоточное программирование на OpenMP (часть 2)
 
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMP
 
ПВТ - весна 2015 - Лекция 8. Многопоточное программирование без использования...
ПВТ - весна 2015 - Лекция 8. Многопоточное программирование без использования...ПВТ - весна 2015 - Лекция 8. Многопоточное программирование без использования...
ПВТ - весна 2015 - Лекция 8. Многопоточное программирование без использования...
 
графика Pascal ABC
графика Pascal ABCграфика Pascal ABC
графика Pascal ABC
 
ПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программирования
ПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программированияПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программирования
ПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программирования
 
Знакомство с Papervision3d
Знакомство с Papervision3dЗнакомство с Papervision3d
Знакомство с Papervision3d
 
Семинар 3. Многопоточное программирование на OpenMP (часть 3)
Семинар 3. Многопоточное программирование на OpenMP (часть 3)Семинар 3. Многопоточное программирование на OpenMP (часть 3)
Семинар 3. Многопоточное программирование на OpenMP (часть 3)
 
ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...
ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...
ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...
 
Графика в Паскаль
Графика в ПаскальГрафика в Паскаль
Графика в Паскаль
 
Лекция 7. Стандарт OpenMP (подолжение)
Лекция 7. Стандарт OpenMP (подолжение)Лекция 7. Стандарт OpenMP (подолжение)
Лекция 7. Стандарт OpenMP (подолжение)
 
бомба для графики в паскаль
бомба для графики в паскальбомба для графики в паскаль
бомба для графики в паскаль
 
Распространённые ошибки оценки производительности .NET-приложений
Распространённые ошибки оценки производительности .NET-приложенийРаспространённые ошибки оценки производительности .NET-приложений
Распространённые ошибки оценки производительности .NET-приложений
 
Векторизация кода (семинар 3)
Векторизация кода (семинар 3)Векторизация кода (семинар 3)
Векторизация кода (семинар 3)
 
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMP
 
графические возможности паскаль
графические возможности паскальграфические возможности паскаль
графические возможности паскаль
 
Intel IPP Samples for Windows - работа над ошибками
Intel IPP Samples for Windows - работа над ошибкамиIntel IPP Samples for Windows - работа над ошибками
Intel IPP Samples for Windows - работа над ошибками
 
«Анимация в PascalABC»
«Анимация в PascalABC»«Анимация в PascalABC»
«Анимация в PascalABC»
 
хитрости выведения типов
хитрости выведения типовхитрости выведения типов
хитрости выведения типов
 
Progr labrab-4-2013-c++
Progr labrab-4-2013-c++Progr labrab-4-2013-c++
Progr labrab-4-2013-c++
 

Destaque

MoITvation - презентация-размышление о роли IT в современном мире с конкретны...
MoITvation - презентация-размышление о роли IT в современном мире с конкретны...MoITvation - презентация-размышление о роли IT в современном мире с конкретны...
MoITvation - презентация-размышление о роли IT в современном мире с конкретны...Dmitri Soshnikov
 
Military Encampments In The Ancient World For Slide Share
Military Encampments In The Ancient World For Slide ShareMilitary Encampments In The Ancient World For Slide Share
Military Encampments In The Ancient World For Slide Shareguestc716ac0
 
Castle Green Slideshow
Castle Green SlideshowCastle Green Slideshow
Castle Green Slideshowcastlegreen
 
The Uses Of Ecocem GGBS In Concrete 2009
The Uses Of Ecocem GGBS In Concrete 2009The Uses Of Ecocem GGBS In Concrete 2009
The Uses Of Ecocem GGBS In Concrete 2009DavidOFlynn
 
คู่มือ Ulead video studio 11
คู่มือ Ulead video studio 11คู่มือ Ulead video studio 11
คู่มือ Ulead video studio 11Siwakorn Siri
 
Introduction and Anemia 2007
Introduction and Anemia 2007Introduction and Anemia 2007
Introduction and Anemia 2007Gary Allegretta
 
Benefits of using GGBS cement in large concrete pours
Benefits of using GGBS cement in large concrete poursBenefits of using GGBS cement in large concrete pours
Benefits of using GGBS cement in large concrete poursDavidOFlynn
 
The Benefits Of Ggbs Cement In Concrete 2011 Engineers & Architects
The Benefits Of Ggbs Cement In Concrete 2011 Engineers & ArchitectsThe Benefits Of Ggbs Cement In Concrete 2011 Engineers & Architects
The Benefits Of Ggbs Cement In Concrete 2011 Engineers & ArchitectsDavidOFlynn
 
Функциональное программирование для разработки распределённых, облачных и веб...
Функциональное программирование для разработки распределённых, облачных и веб...Функциональное программирование для разработки распределённых, облачных и веб...
Функциональное программирование для разработки распределённых, облачных и веб...Dmitri Soshnikov
 
DevCon 2014: Вдохновляем детей с помощью технологий
DevCon 2014: Вдохновляем детей с помощью технологийDevCon 2014: Вдохновляем детей с помощью технологий
DevCon 2014: Вдохновляем детей с помощью технологийDmitri Soshnikov
 
Языки программирования
Языки программированияЯзыки программирования
Языки программированияDmitri Soshnikov
 
Язык программирования C#
Язык программирования C#Язык программирования C#
Язык программирования C#Dmitri Soshnikov
 
Curso "Transparencia" Paraiso, Tabasco 18 y 19 de julio
Curso "Transparencia" Paraiso, Tabasco 18 y 19 de julioCurso "Transparencia" Paraiso, Tabasco 18 y 19 de julio
Curso "Transparencia" Paraiso, Tabasco 18 y 19 de julioICADEP Icadep
 

Destaque (20)

MoITvation - презентация-размышление о роли IT в современном мире с конкретны...
MoITvation - презентация-размышление о роли IT в современном мире с конкретны...MoITvation - презентация-размышление о роли IT в современном мире с конкретны...
MoITvation - презентация-размышление о роли IT в современном мире с конкретны...
 
Military Encampments In The Ancient World For Slide Share
Military Encampments In The Ancient World For Slide ShareMilitary Encampments In The Ancient World For Slide Share
Military Encampments In The Ancient World For Slide Share
 
Palliative Sedation
Palliative  SedationPalliative  Sedation
Palliative Sedation
 
villains
villainsvillains
villains
 
Castle Green Slideshow
Castle Green SlideshowCastle Green Slideshow
Castle Green Slideshow
 
The Uses Of Ecocem GGBS In Concrete 2009
The Uses Of Ecocem GGBS In Concrete 2009The Uses Of Ecocem GGBS In Concrete 2009
The Uses Of Ecocem GGBS In Concrete 2009
 
Support I I I
Support  I I ISupport  I I I
Support I I I
 
Platesfang
PlatesfangPlatesfang
Platesfang
 
คู่มือ Ulead video studio 11
คู่มือ Ulead video studio 11คู่มือ Ulead video studio 11
คู่มือ Ulead video studio 11
 
Introduction and Anemia 2007
Introduction and Anemia 2007Introduction and Anemia 2007
Introduction and Anemia 2007
 
Google Docs
Google DocsGoogle Docs
Google Docs
 
Benefits of using GGBS cement in large concrete pours
Benefits of using GGBS cement in large concrete poursBenefits of using GGBS cement in large concrete pours
Benefits of using GGBS cement in large concrete pours
 
The Benefits Of Ggbs Cement In Concrete 2011 Engineers & Architects
The Benefits Of Ggbs Cement In Concrete 2011 Engineers & ArchitectsThe Benefits Of Ggbs Cement In Concrete 2011 Engineers & Architects
The Benefits Of Ggbs Cement In Concrete 2011 Engineers & Architects
 
Функциональное программирование для разработки распределённых, облачных и веб...
Функциональное программирование для разработки распределённых, облачных и веб...Функциональное программирование для разработки распределённых, облачных и веб...
Функциональное программирование для разработки распределённых, облачных и веб...
 
DevCon 2014: Вдохновляем детей с помощью технологий
DevCon 2014: Вдохновляем детей с помощью технологийDevCon 2014: Вдохновляем детей с помощью технологий
DevCon 2014: Вдохновляем детей с помощью технологий
 
Языки программирования
Языки программированияЯзыки программирования
Языки программирования
 
Язык программирования C#
Язык программирования C#Язык программирования C#
Язык программирования C#
 
Cordyup leaflet
Cordyup leafletCordyup leaflet
Cordyup leaflet
 
Curso "Transparencia" Paraiso, Tabasco 18 y 19 de julio
Curso "Transparencia" Paraiso, Tabasco 18 y 19 de julioCurso "Transparencia" Paraiso, Tabasco 18 y 19 de julio
Curso "Transparencia" Paraiso, Tabasco 18 y 19 de julio
 
Educação A Distancia
Educação A DistanciaEducação A Distancia
Educação A Distancia
 

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

Статический анализ Си++ кода
Статический анализ Си++ кодаСтатический анализ Си++ кода
Статический анализ Си++ кодаTatyanazaxarova
 
ADD 2011: Статический анализ Си++ кода
ADD 2011: Статический анализ Си++ кодаADD 2011: Статический анализ Си++ кода
ADD 2011: Статический анализ Си++ кодаAndrey Karpov
 
трасировка Mpi приложений
трасировка Mpi приложенийтрасировка Mpi приложений
трасировка Mpi приложенийMichael Karpov
 
Статический анализ: ошибки в медиаплеере и безглючная аська
Статический анализ: ошибки в медиаплеере и безглючная аська Статический анализ: ошибки в медиаплеере и безглючная аська
Статический анализ: ошибки в медиаплеере и безглючная аська Tatyanazaxarova
 
Дмитрий Сошников Искусственный интеллект и нейросети для .NET-разработчиков
Дмитрий Сошников    Искусственный интеллект и нейросети для .NET-разработчиковДмитрий Сошников    Искусственный интеллект и нейросети для .NET-разработчиков
Дмитрий Сошников Искусственный интеллект и нейросети для .NET-разработчиковMskDotNet Community
 
Где кончается react native? / Павел Кондратенко (Rambler&Co)
Где кончается react native? / Павел Кондратенко (Rambler&Co)Где кончается react native? / Павел Кондратенко (Rambler&Co)
Где кончается react native? / Павел Кондратенко (Rambler&Co)Ontico
 
20090720 hpc exercise1
20090720 hpc exercise120090720 hpc exercise1
20090720 hpc exercise1Michael Karpov
 
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...Yandex
 
лабораторная работа №3
лабораторная работа №3лабораторная работа №3
лабораторная работа №3Zhanna Kazakova
 
статический анализ кода
статический анализ кодастатический анализ кода
статический анализ кодаAndrey Karpov
 
Статический анализ кода
Статический анализ кода Статический анализ кода
Статический анализ кода Pavel Tsukanov
 
DSLs in Lisp and Clojure
DSLs in Lisp and ClojureDSLs in Lisp and Clojure
DSLs in Lisp and ClojureVasil Remeniuk
 
20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonovComputer Science Club
 
Deep c slides_oct2011_rus
Deep c slides_oct2011_rusDeep c slides_oct2011_rus
Deep c slides_oct2011_rusGarrikus
 
Программирование под Maemo
Программирование под MaemoПрограммирование под Maemo
Программирование под Maemodmitryml
 
Google Cardboard (Winter Nights'15)
Google Cardboard (Winter Nights'15)Google Cardboard (Winter Nights'15)
Google Cardboard (Winter Nights'15)Natalia Efimtseva
 
Adobe Flex константин ковалев
Adobe Flex   константин ковалевAdobe Flex   константин ковалев
Adobe Flex константин ковалевMedia Gorod
 

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

Статический анализ Си++ кода
Статический анализ Си++ кодаСтатический анализ Си++ кода
Статический анализ Си++ кода
 
ADD 2011: Статический анализ Си++ кода
ADD 2011: Статический анализ Си++ кодаADD 2011: Статический анализ Си++ кода
ADD 2011: Статический анализ Си++ кода
 
трасировка Mpi приложений
трасировка Mpi приложенийтрасировка Mpi приложений
трасировка Mpi приложений
 
Статический анализ: ошибки в медиаплеере и безглючная аська
Статический анализ: ошибки в медиаплеере и безглючная аська Статический анализ: ошибки в медиаплеере и безглючная аська
Статический анализ: ошибки в медиаплеере и безглючная аська
 
Дмитрий Сошников Искусственный интеллект и нейросети для .NET-разработчиков
Дмитрий Сошников    Искусственный интеллект и нейросети для .NET-разработчиковДмитрий Сошников    Искусственный интеллект и нейросети для .NET-разработчиков
Дмитрий Сошников Искусственный интеллект и нейросети для .NET-разработчиков
 
лекция 1
лекция 1лекция 1
лекция 1
 
Где кончается react native? / Павел Кондратенко (Rambler&Co)
Где кончается react native? / Павел Кондратенко (Rambler&Co)Где кончается react native? / Павел Кондратенко (Rambler&Co)
Где кончается react native? / Павел Кондратенко (Rambler&Co)
 
лекция 3
лекция 3лекция 3
лекция 3
 
20090720 hpc exercise1
20090720 hpc exercise120090720 hpc exercise1
20090720 hpc exercise1
 
лекция 2
лекция 2лекция 2
лекция 2
 
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
 
лабораторная работа №3
лабораторная работа №3лабораторная работа №3
лабораторная работа №3
 
статический анализ кода
статический анализ кодастатический анализ кода
статический анализ кода
 
Статический анализ кода
Статический анализ кода Статический анализ кода
Статический анализ кода
 
DSLs in Lisp and Clojure
DSLs in Lisp and ClojureDSLs in Lisp and Clojure
DSLs in Lisp and Clojure
 
20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov
 
Deep c slides_oct2011_rus
Deep c slides_oct2011_rusDeep c slides_oct2011_rus
Deep c slides_oct2011_rus
 
Программирование под Maemo
Программирование под MaemoПрограммирование под Maemo
Программирование под Maemo
 
Google Cardboard (Winter Nights'15)
Google Cardboard (Winter Nights'15)Google Cardboard (Winter Nights'15)
Google Cardboard (Winter Nights'15)
 
Adobe Flex константин ковалев
Adobe Flex   константин ковалевAdobe Flex   константин ковалев
Adobe Flex константин ковалев
 

Mais de Dmitri Soshnikov

Машинное обучение для школьников
Машинное обучение для школьниковМашинное обучение для школьников
Машинное обучение для школьниковDmitri Soshnikov
 
Увлекательный мир программирования.
Увлекательный мир программирования.Увлекательный мир программирования.
Увлекательный мир программирования.Dmitri Soshnikov
 
Принципы создания приложений виртуальной и расширенной реальности с примерами...
Принципы создания приложений виртуальной и расширенной реальности с примерами...Принципы создания приложений виртуальной и расширенной реальности с примерами...
Принципы создания приложений виртуальной и расширенной реальности с примерами...Dmitri Soshnikov
 
SECR2013: F# и обработка потоковых данных: от потока твиттер-сообщений до сен...
SECR2013: F# и обработка потоковых данных: от потока твиттер-сообщений до сен...SECR2013: F# и обработка потоковых данных: от потока твиттер-сообщений до сен...
SECR2013: F# и обработка потоковых данных: от потока твиттер-сообщений до сен...Dmitri Soshnikov
 
SECR2013: Как научить ваших детей программировать
SECR2013: Как научить ваших детей программироватьSECR2013: Как научить ваших детей программировать
SECR2013: Как научить ваших детей программироватьDmitri Soshnikov
 
Cloud Computing - новая парадигма облачных вычислений. Windows Azure.
Cloud Computing - новая парадигма облачных вычислений. Windows Azure.Cloud Computing - новая парадигма облачных вычислений. Windows Azure.
Cloud Computing - новая парадигма облачных вычислений. Windows Azure.Dmitri Soshnikov
 

Mais de Dmitri Soshnikov (6)

Машинное обучение для школьников
Машинное обучение для школьниковМашинное обучение для школьников
Машинное обучение для школьников
 
Увлекательный мир программирования.
Увлекательный мир программирования.Увлекательный мир программирования.
Увлекательный мир программирования.
 
Принципы создания приложений виртуальной и расширенной реальности с примерами...
Принципы создания приложений виртуальной и расширенной реальности с примерами...Принципы создания приложений виртуальной и расширенной реальности с примерами...
Принципы создания приложений виртуальной и расширенной реальности с примерами...
 
SECR2013: F# и обработка потоковых данных: от потока твиттер-сообщений до сен...
SECR2013: F# и обработка потоковых данных: от потока твиттер-сообщений до сен...SECR2013: F# и обработка потоковых данных: от потока твиттер-сообщений до сен...
SECR2013: F# и обработка потоковых данных: от потока твиттер-сообщений до сен...
 
SECR2013: Как научить ваших детей программировать
SECR2013: Как научить ваших детей программироватьSECR2013: Как научить ваших детей программировать
SECR2013: Как научить ваших детей программировать
 
Cloud Computing - новая парадигма облачных вычислений. Windows Azure.
Cloud Computing - новая парадигма облачных вычислений. Windows Azure.Cloud Computing - новая парадигма облачных вычислений. Windows Azure.
Cloud Computing - новая парадигма облачных вычислений. Windows Azure.
 

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

  • 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
  • 4. Место Expression в разработке
  • 6. GeoSynth - http://www.vexcel.com 4D-визуализация (3D + время)
  • 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.
  • 15.
  • 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 Координатор академических программ Департамента стратегических технологий Майкрософт Россия Доцент каф. Вычислительной математики и программирования МАИ Доцент каф. Управления разработкой программного Обеспечения ГУ ВШЭ