Введение в естественно-интуитивное взаимодействие с компьютером

Поддержка игровых процессоров (движков) и базовых средств разработки

Показывать лекцию целиком

Введение

Презентацию к лекции можно скачать здесь.

Современный мир невозможно представить без игровой индустрии. После того как компьютеры стали доступны в каждом доме, дети с самого малого возраста приучаются к мышке и клавиатуре. 30% времени, проведенного за компьютером, современный человек проводит в играх.

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

Игровой процессор включает в себя инструменты, созданные для упрощения и ускорения процесса разработки игр, процессор определяет логику игры.

Базовые средства разработки или фреймворк в информационных системах структура программной системы; программное обеспечение, облегчающее разработку и объединение разных компонентов большого программного проекта. В отличие от библиотек, которые объединяют набор подпрограмм близкой функциональности, фреймворк содержит в себе большое количество разных по назначению библиотек.

Игровые процессоры и базовые средства разработки и Intel® Perceptual Computing SDK

Intel Perceptual Computing SDK поддерживает следующие игровые процессоры и базовые средства разработки:

  • Unity PRO 3.5.1f2 (или более поздний);
  • Processing 1.5.1 (или более поздний);
  • openFrameworks v0071 (или более поздний).
  • Процессор openFrameworks поддерживает SDK функции или утилиты в исходном формате, остальные в работе с SDK основываются на библиотеке libpxcupipeline, обеспечивающей приспособление класса UtilPipeline, который предоставляет простой доступ к следующим возможностям:

  • Захват цветного изображения
  • Определение положения лица, а также определение и отслеживание основных маркеров
  • Отслеживание рук и пальцев, распознавание поз и жестов
  • Работа любого приложения проходит через несколько этапов:

  • Инициализация
  • Приложение использует функцию Init для инициализации конвейера, который объединяет в себе обработку цветных изображений, определение и отслеживание положения лица и основных маркеров, а также отслеживание рук и пальцев, распознавание поз и жестов.

  • Обработка данных
  • На этом этапе поочередно вызываются две функции. Функция AcquireFrame ожидает завершения обработки текущего фрейма и блокирует результаты обработки, а функция ReleaseFrame снимает блок и подготавливает следующий фрейм для обработки.

    Между функциями AcquireFrame и ReleaseFrame приложение может вызвать серию запросов функций для получения результатов обработки.

  • Завершение работы
  • Приложение использует функцию Close для закрытия конвейера и освобождения всех ресурсов.

    Игровой процессор Unity* (настройка окружения, простейший пример)

    Unity (или Unity3D) – кроссплатформенный игровой процессор имеет встроенную интегрированную среду разработки, создан Unity Technologies. Свыше миллиона разработчиков используют Unity при создании видео игр для различных платформ.

    Рендеринг в Unity

    Графический процессор использует Direct3D (Windows, XBOX 360), OpenGL (Mac, Windows, Linux), OpenGL ES (Android, iOS) и собственные API (Wii).

    Поддерживаемые возможности:

  • рельефные преобразования;
  • зеркальные отражения;
  • преобразования смещения;
  • алгоритм SSAO, работающий в режиме реального времени и имитирующий рассеянное непрямое освещение и соответствующее затенение в трёхмерном виртуальном пространстве;
  • динамические тени, используются растровые изображения теней.
  • Unity поддерживает форматы файлов и 3D модели, созданные в 3Ds Max, Maya, Softimage, Blender, modo, ZBrush, Cinema 4D, Chetah 3D, Adobe Photoshop, Adobe Fireworks и Allegorithmic Substance. Созданные с помощью любого из перечисленных приложений 3D объекты могут быть добавлены в игровой проект и управляться из графического пользовательского интерфейса Unity.

    Перед началом использования среда Unity должна быть подготовлена следующим образом:

  • Необходимо в рабочем каталоге создать папки Assets/Plugins
  • Необходимо скопировать в созданную папку из папки framework\Unity\hellounity\Assets\Plugins файлы:
  • libpxcupipeline.dll
  • pxcm-structures.cs
  • pxcupipeline.cs
  • Код представленный ниже определяет простое Unity приложение, которое отображает изображение жеста на элемент mainTexture. Пример вызывает функцию Init в функции Start(), вызывает функцию Close в OnDisable(), обработка данных ведется в функции Update(). Пример использует функцию QueryLabelMapAsImage для получения изображения жеста.

    using UnityEngine;
    using System;
    using System.Runtime.InteropServices;
    public class TexturePlayback : MonoBehaviour {
       private Color[] px;
       private Texture2D tt;
       private PXCUPipeline pp;
       void Start () {
           pp=new PXCUPipeline();
           pp.Init(PXCUPipeline.Mode.GESTURE);
           int[] size=new int[2];
           pp.QueryLabelMapSize(size);
           tt=new Texture2D(size[0],size[1],TextureFormat.ARGB32,false);
           renderer.material.mainTexture=tt;
       } 
       void OnDisable() {
           pp.Close();
       }
       void Update () {
           if (!pp.AcquireFrame(false)) return;
           if (pp.QueryLabelMapAsImage(tt)) tt.Apply();
           pp.ReleaseFrame();
       }
    }
    

    Результат работы данного приложения выглядит следующим образом:

    (рис 12.1) Вид окна простого Unity приложения

    Базовые средства разработки (фреймворк) Processing* (настройка окружения, простейший пример)

    Processing объединяет в себе язык программирования с открытым исходным кодом и интегрированную среду разработки, полученные средства разработки преследуют цель обучения программированию в графической среде и служит основой для электронного альбома для рисунков. Основная цель среды Processing состоит в том, чтобы служить инструментом, позволяющим людям далеким от программирования начать программировать и незамедлительно видеть результаты своей работы. Язык построен на основе языка программирования Java, но использует упрощенный синтаксис и графическую модель программирования.

    Для использования Processing framework скопируйте директорию framework\Processing\libraries вместе со всеми поддиректориями в рабочую папку.

    Представленный ниже код демонстрирует простое Processing приложение, которое отображает захваченное изображение на канву. Пример вызывает функцию Init в функции setup(), обработка данных ведется в функции draw(). Пример использует функцию QueryLabelMapAsImage для получения изображения и рисования на холсте. Функция Close в этом примере не используется.

    import intel.pcsdk.*;
    private PImage display;
    private PXCUPipeline pp;
    void setup() {
       pp=new PXCUPipeline(this);
       pp.Init(PXCUPipeline.GESTURE);
       int[] size=new int[2];
       pp.QueryLabelMapSize(size);
       display=createImage(size[0],size[1],RGB);
    }
    void draw() { 
       if (!pp.AcquireFrame(false)) return;
       if (pp.QueryLabelMapAsImage(display)) image(display,0,0);
       pp.ReleaseFrame();
    }
    

    Результаты работы данного приложения можно увидеть на рис 12.2.

    (рис 12.2) Скриншот простого Processing* приложения

    openFramework* (настройка окружения, простейший пример)

    openFramework – набор инструментальных средств с открытым кодом, разработанный для "творческого кодирования", написан на С++ и может работать под Windows, MacOS X, Linux, iOS и Android.

    OpenFramework концентрируется на "творчестве" и использует изображения, в этом он похож на фреймворк Processing, оба эти проекта предоставляют простой интерфейс к мощным библиотекам. Главное отличие openFramework от Processing состоит в используемом языке, первый написан на С++ тогда как второй на Java. Многие пользователи отмечают сходство этих двух библиотек.

    При создании openFrameworks приложения необходимо импортировать список свойств props/VS2010-12.Integration.MD.props.

    или выполнить следующие установки:

    Include Path $(PCSDK_DIR)/include; $(PCSDK_DIR)/sample/common/include; $(PCSDK_DIR)/sample/common/res
    Additional library file src/libpxc/libpxc.cpp
    Additional utility files util_capture.cpp, util_capture_file.cpp, util_captureimpl.cpp, util_pipeline_face.cpp, util_pipeline_gesture.cpp, util_pipeline_raw.cpp, util_pipeline_voice.cpp

    Представленный ниже код демонстрирует пример простого openFrameworks приложения, которое отображает захваченное изображение на текстуру. Приложение использует класс UtilPipeline для создания конвейера отслеживания пальцев и получает изображение.

    #include "ofAppGlutWindow.h"
    #include "ofMain.h"
    #include "util_pipeline.h"
     
    class testApp:public ofBaseApp {
    public:
       void setup();
       void draw();
    protected:
       ofEasyCam                camera;
       ofTexture      texture;
       UtilPipeline   pp;
    };
     
    void testApp::setup() {
       ofSetVerticalSync(true);
       ofDisableNormalizedTexCoords();
       glEnable(GL_DEPTH_TEST);
       camera.setDistance(640);
     
       pp.EnableGesture();
       pp.Init();
       pxcU32 ww, hh;
       pp.QueryImageSize(PXCImage::IMAGE_TYPE_DEPTH,ww,hh);
     
       texture.allocate(ww,hh,GL_LUMINANCE);
       ofDisableDataPath();
    }
     
    void testApp::draw() {
       if (pp.AcquireFrame(false)) {
           PXCImage *im;
           if (pp.QueryGesture()-> QueryBlobImage(PXCGesture::Blob::LABEL_SCENE,0,im)>= PXC_STATUS_NO_ERROR) {
               PXCImage::ImageData data;
               if (im-> AcquireAccess(PXCImage::ACCESS_READ,data)>=PXC_STATUS_NO_ERROR) {
                   texture.loadData(data.planes[0],texture.getWidth(),texture.getHeight(),GL_LUMINANCE);
                   im->ReleaseAccess(data);
               }
           }
           pp.ReleaseFrame();
       }
       ofBackground(0,0,128);
       ofSetColor(255);
       camera.begin();                
       ofRotateX(ofRadToDeg(.5));
       ofRotateY(ofRadToDeg(-.5));
       texture.draw(0,0);
       camera.end();
    }
    int main() {
       ofAppGlutWindow window; // create a window
       ofSetupOpenGL(window, 1024, 768, OF_WINDOW);
       ofRunApp(new testApp()); // start the app
    }
    

    Результат работы приложения можно посмотреть на рис 12.3

    (рис 12.3) Скриншот простого openFrameworks приложения

    Контрольные вопросы:

  • Чем различаются понятия: игровой процессор (движок) и базовые средства разработки (фреймворк)?
  • В чем основные особенности и возможности игрового процессора Unity?
  • В чем особенности создания Unity приложений с использованием Intel Perceptual Computing SDK?
  • В чем основные особенности и возможности базовых средств разработки Processing framework?
  • В чем особенности создания Processing приложений с использованием Intel Perceptual Computing SDK?
  • В чем основные особенности и возможности базовых средств разработки openFramework?
  • В чем особенности создания openFramework приложений с использованием Intel Perceptual Computing SDK?
  • Вернуться к учебному плану