{"id":858,"date":"2015-07-13T16:18:38","date_gmt":"2015-07-13T15:18:38","guid":{"rendered":"http:\/\/vrlab.reutlingen-university.de\/web\/?p=858"},"modified":"2016-12-14T16:27:55","modified_gmt":"2016-12-14T15:27:55","slug":"vrpn-plugin-fuer-die-unreal-engine","status":"publish","type":"post","link":"https:\/\/vrlab.reutlingen-university.de\/web\/de\/858\/vrpn-plugin-fuer-die-unreal-engine.html","title":{"rendered":"VRPN-Plugin f\u00fcr die Unreal Engine"},"content":{"rendered":"<p><a href=\"http:\/\/www.cs.unc.edu\/Research\/vrpn\/\" target=\"_blank\">VRPN<\/a> ist ein ger\u00e4teunabh\u00e4ngiges, netzwerktransparentes System f\u00fcr die Kommunikation mit und zwischen Ger\u00e4ten und Anwendungen der virtuellen Realit\u00e4t. Es erlaubt \u00fcber Interfaces auf mehrere Ger\u00e4te gleichzeitig zuzugreifen, verwaltet dabei die Verbindung und f\u00fchrt eine zeitliche Synchronisation aus. Obwohl viele Ger\u00e4te mit VRPN kompatibel sind, existiert bislang keine Integration mit der <a href=\"https:\/\/www.unrealengine.com\/what-is-unreal-engine-4\" target=\"_blank\">Unreal Engine<\/a>. Aus diesem Grund wurde im Sommersemester 2015 an der Hochschule Reutlingen ein Plugin f\u00fcr die Unreal Engine entwickelt, das VRPN-Trackerdaten (<em>vrpn_Tracker<\/em>) per C++ oder per <a href=\"https:\/\/docs.unrealengine.com\/latest\/INT\/Engine\/Blueprints\/index.html\" target=\"_blank\">Blueprint<\/a> in der Engine zur Verf\u00fcgung stellt. Im vorliegenden Anwendungsfall wird dieses Plugin genutzt, um Daten eines <a href=\"http:\/\/www.worldviz.com\/\" target=\"_blank\">WorldViz<\/a>-Trackingsystems bereitzustellen.<\/p>\n<h2>Voraussetzung<\/h2>\n<ul>\n<li>64-bit System<\/li>\n<li>Unreal Engine Version 4.10<\/li>\n<li>Visual Studio 2015 (f\u00fcr VS2013 siehe Readme)<\/li>\n<\/ul>\n<p><strong>Hinweis: Dieses Projekt wird derzeit nicht weiter entwickelt. Support-Anfragen k\u00f6nnen nicht beantwortet werden.<\/strong><\/p>\n<h2>Plugin-Installation<\/h2>\n<p>Plugins werden grunds\u00e4tzlich f\u00fcr jedes Unreal Projekt durch das Kopieren des Plugin-Ordners (<em>VrpnPlugin<\/em>, der Ordner der diese Datei enth\u00e4lt) in den <em>Plugins<\/em>-Unterorder im Projektverzeichnis installiert. Sollte dieser Ordner nicht vorhanden sein, muss er erstellt werden. Das Laden eines Plugins in der Unreal Engine setzt aktuell C++-Quellcode voraus. Besteht das Projekt lediglich aus Blueprints und Unreal Content, muss eine leere C++-Klasse zum Projekt hinzugef\u00fcgt werden. Dies ist in der Engine \u00fcber den Men\u00fceintrag <em>File | Add Code to Project&#8230;<\/em> m\u00f6glich. Nach eine Nuestart der Engine kann \u00fcber das Plugin-Men\u00fc gepr\u00fcft werden, ob dieses gefunden und aktiviert ist. Um die Daten in einem Blueprint empfangen zu k\u00f6nnen, wird zun\u00e4chst das Blueprint des Charakters ge\u00f6ffnet. Auf der linken Seite des Fensters findet sich die Komponentenliste. Durch <em>Add Component<\/em>\u00a0kann nun die <em>VrpnComponent<\/em>\u00a0hinzugef\u00fcgt werden. Ist diese hinzugef\u00fcgt, muss f\u00fcr das Empfangen von Events au\u00dferdem das Interface zum Blueprint hinzugef\u00fcgt werden. Daf\u00fcr werden die <em>Blueprint Props<\/em>\u00a0aufgerufen und das <em>Vrpn Inteface<\/em>\u00a0\u00fcber die Schaltfl\u00e4che <em>Add<\/em>\u00a0im Abschnitt <em>Interfaces<\/em>\u00a0hinzugef\u00fcgt. Im Anschluss daran k\u00f6nnen Events wie jeder andere Blueprint-Knoten hinzugef\u00fcgt und eingesetzt werden. Der VRPN Server von dem die Daten empfangen werden sollen kann in den Eigenschaften der <em>VrpnComponent<\/em> eingetragen werden. Selbes gilt f\u00fcr den Trackernamen.<\/p>\n<h2>Nutzen der Daten<\/h2>\n<p>Die Daten k\u00f6nnen am einfachsten \u00fcber das Blueprint-Event <em>On Tracker Data<\/em>\u00a0empfangen werden. Dieses Event wird f\u00fcr jeden Tracker einzeln aufgerufen, wobei durch den ersten Ausgang dessen ID angegegben wird. Die weiteren Ausg\u00e4nge f\u00fcr die Position und die Orientierung sind je nach Verf\u00fcgbarkeit gef\u00fcllt und in den Standarddatentypen <em>FVector<\/em> und <em>FRotator<\/em> angegeben. Die Abbildung zeigt dies beispielhaft.<\/p>\n<figure id=\"attachment_859\" aria-describedby=\"caption-attachment-859\" style=\"width: 550px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/vrlab.reutlingen-university.de\/web\/wp-content\/uploads\/2015\/07\/vrpnEvent-example-blueprint.png\"><img fetchpriority=\"high\" decoding=\"async\" class=\"wp-image-859 size-large\" src=\"http:\/\/vrlab.reutlingen-university.de\/web\/wp-content\/uploads\/2015\/07\/vrpnEvent-example-blueprint-1024x458.png\" alt=\"Abbildung des Vrpn-Blueprint-Events (rot) und Skalierung &amp; Speicherung der Positionsdaten in Variablen anhand der ID\" width=\"550\" height=\"246\" srcset=\"https:\/\/vrlab.reutlingen-university.de\/web\/wp-content\/uploads\/2015\/07\/vrpnEvent-example-blueprint-1024x458.png 1024w, https:\/\/vrlab.reutlingen-university.de\/web\/wp-content\/uploads\/2015\/07\/vrpnEvent-example-blueprint-300x134.png 300w\" sizes=\"(max-width: 550px) 100vw, 550px\" \/><\/a><figcaption id=\"caption-attachment-859\" class=\"wp-caption-text\">Abbildung des Vrpn-Blueprint-Events und die Speicherung der Daten in Variablen.<\/figcaption><\/figure>\n<h2>License<\/h2>\n<p>Alle Teile der Software, die nicht durch die Third-Party Lizenzen abgedeckt sind (siehe LICENSE-3RD-PARTY-Datei im Plugin-Archiv), sind wie folgt lizensiert: <code><\/p>\n<p>The MIT License (MIT) <\/p>\n<p> Copyright (c) 2015 VRLab Reutlingen <\/p>\n<p> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and\/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: <\/p>\n<p> The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. <\/p>\n<p> THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.<\/code><\/p>\n<h2>Download<\/h2>\n<p>&gt;&gt;\u00a0<a href=\"http:\/\/vrlab.reutlingen-university.de\/web\/wp-content\/uploads\/2015\/07\/VrpnPlugin1.zip\">VrpnPlugin<\/a> (Version 0.2.0 f\u00fcr Unreal Engine 4.10)<\/p>\n<p>&gt;&gt;\u00a0<a href=\"http:\/\/vrlab.reutlingen-university.de\/web\/wp-content\/uploads\/2015\/07\/VrpnPlugin.zip\">VrpnPlugin<\/a> (Version 0.1.0 f\u00fcr Unreal Engine 4.7)<\/p>","protected":false},"excerpt":{"rendered":"<p>VRPN ist ein ger\u00e4teunabh\u00e4ngiges, netzwerktransparentes System f\u00fcr die Kommunikation mit und zwischen Ger\u00e4ten und Anwendungen der virtuellen Realit\u00e4t. Es erlaubt [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ngg_post_thumbnail":0,"footnotes":""},"categories":[31,6],"tags":[21,22,23],"class_list":["post-858","post","type-post","status-publish","format-standard","hentry","category-archivierte-projekte","category-vrlab-projekte","tag-unreal-engine","tag-vrpn","tag-worldviz"],"_links":{"self":[{"href":"https:\/\/vrlab.reutlingen-university.de\/web\/de\/wp-json\/wp\/v2\/posts\/858","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vrlab.reutlingen-university.de\/web\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vrlab.reutlingen-university.de\/web\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vrlab.reutlingen-university.de\/web\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vrlab.reutlingen-university.de\/web\/de\/wp-json\/wp\/v2\/comments?post=858"}],"version-history":[{"count":22,"href":"https:\/\/vrlab.reutlingen-university.de\/web\/de\/wp-json\/wp\/v2\/posts\/858\/revisions"}],"predecessor-version":[{"id":1119,"href":"https:\/\/vrlab.reutlingen-university.de\/web\/de\/wp-json\/wp\/v2\/posts\/858\/revisions\/1119"}],"wp:attachment":[{"href":"https:\/\/vrlab.reutlingen-university.de\/web\/de\/wp-json\/wp\/v2\/media?parent=858"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vrlab.reutlingen-university.de\/web\/de\/wp-json\/wp\/v2\/categories?post=858"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vrlab.reutlingen-university.de\/web\/de\/wp-json\/wp\/v2\/tags?post=858"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}