SlideShare ist ein Scribd-Unternehmen logo
1 von 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 Координатор академических программ Департамента стратегических технологий Майкрософт Россия Доцент каф. Вычислительной математики и программирования МАИ Доцент каф. Управления разработкой программного Обеспечения ГУ ВШЭ

Weitere ähnliche Inhalte

Was ist angesagt?

Знакомство с Papervision3d
Знакомство с Papervision3dЗнакомство с Papervision3d
Знакомство с Papervision3d
Igor Ruzanov
 
Графика в Паскаль
Графика в ПаскальГрафика в Паскаль
Графика в Паскаль
starsboy
 
бомба для графики в паскаль
бомба для графики в паскальбомба для графики в паскаль
бомба для графики в паскаль
ИРИНА НЕЧАЕВА
 

Was ist angesagt? (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++
 

Andere mochten auch

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
guestc716ac0
 
คู่มือ Ulead video studio 11
คู่มือ Ulead video studio 11คู่มือ Ulead video studio 11
คู่มือ Ulead video studio 11
Siwakorn Siri
 
Функциональное программирование для разработки распределённых, облачных и веб...
Функциональное программирование для разработки распределённых, облачных и веб...Функциональное программирование для разработки распределённых, облачных и веб...
Функциональное программирование для разработки распределённых, облачных и веб...
Dmitri Soshnikov
 

Andere mochten auch (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
 

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

ADD 2011: Статический анализ Си++ кода
ADD 2011: Статический анализ Си++ кодаADD 2011: Статический анализ Си++ кода
ADD 2011: Статический анализ Си++ кода
Andrey Karpov
 
трасировка Mpi приложений
трасировка Mpi приложенийтрасировка Mpi приложений
трасировка Mpi приложений
Michael Karpov
 
20090720 hpc exercise1
20090720 hpc exercise120090720 hpc exercise1
20090720 hpc exercise1
Michael Karpov
 
лабораторная работа №3
лабораторная работа №3лабораторная работа №3
лабораторная работа №3
Zhanna Kazakova
 
статический анализ кода
статический анализ кодастатический анализ кода
статический анализ кода
Andrey Karpov
 
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
Computer Science Club
 
Adobe Flex константин ковалев
Adobe Flex   константин ковалевAdobe Flex   константин ковалев
Adobe Flex константин ковалев
Media Gorod
 

Ähnlich wie Обзор программных средств Майкрософт для графики и визуализации: коммерческой, игровой, научной (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 константин ковалев
 

Mehr von Dmitri Soshnikov

SECR2013: F# и обработка потоковых данных: от потока твиттер-сообщений до сен...
SECR2013: F# и обработка потоковых данных: от потока твиттер-сообщений до сен...SECR2013: F# и обработка потоковых данных: от потока твиттер-сообщений до сен...
SECR2013: F# и обработка потоковых данных: от потока твиттер-сообщений до сен...
Dmitri Soshnikov
 
Cloud Computing - новая парадигма облачных вычислений. Windows Azure.
Cloud Computing - новая парадигма облачных вычислений. Windows Azure.Cloud Computing - новая парадигма облачных вычислений. Windows Azure.
Cloud Computing - новая парадигма облачных вычислений. Windows Azure.
Dmitri Soshnikov
 

Mehr von 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 Координатор академических программ Департамента стратегических технологий Майкрософт Россия Доцент каф. Вычислительной математики и программирования МАИ Доцент каф. Управления разработкой программного Обеспечения ГУ ВШЭ