War Thunder – PS4 – Headtracking SELBSTGEMACHT – first tests

Das Headtracking auf der PS4 im Spiel WarThunder ist schon ganz nett,
aber für mich persönlich nicht 100% zufriedenstellend.
Können wir uns das Headtracking selbst zusammen-hacken?

Eine USB-Mouse an die PS4 angeschliessen, funktioniert.
Damit kann man die Ansicht im Flugzeug sehr gut steuern und
mit einem Links-Klick die Sicht sofort geradeaus zentrieren.
Ok.

Mit der Windows Software Freetrack http://www.free-track.net/english/
kann man am Windows PC mit einer Camera/WebCam
bereits MotionCapturing (1-Point,3-Point,…) benutzen.
Ok.

Kann man der PS4 eine Mouse vortäuschen,
deren Bewegungen man programmieren kann?
Yes we can…
Mit dem Arduino Leonardo und dem ButtonMouseControl Rezept http://arduino.cc/en/Tutorial/ButtonMouseControl
kann man am PC den Arduino als USB Mouse anschliessen, und mit den an Arduino angeschlossenen Buttons die Richtungen hoch/runter, links/rechts, Linksklick
ausführen… it works.
Ok.

Funktioniert Arduino Leonardo ButtonMouseControl
auch an der PS4, im Spiel War Thunder?
JA, es funktioniert!
Ok.

Was wir jetzt noch brauchen,
sind Daten von einem MotionCapturing Tool
und die Übertragung vom PC an Arduino Leonardo.

Wenn sich herausstellt, dass es mit Freetrack nicht möglich ist,
die Bewegungsdaten auszulesen und in geeigneter Weise an Arduino zu übertragen,
dann muss OpenCV / SimpleCV (Python) herhalten, was den Vorteil hätte,
dass es sich auch auf Linux portieren ließe.
Dabei müsste man diverse Berechnungen selbst programmieren.

andere MC Projecte:
FaceTrackNoIR, opentrack,freepie,..

Wenn Tools wie FaceTrackNoIR,Freetrack eine MouseEmulation haben,
dann könnte man mit einem einfachen Python Code die Mouse Position auslesen,
in einer Endlosschleife die Mouse permanent verfolgen.

Python 2.7 + win32 Extension
https://www.python.org/getit/windows/
http://sourceforge.net/projects/pywin32/files/pywin32/Build%20219/

# python C:\python_scripts\win32_read_mouse\win32_read_mouse.py

import win32gui
import time
import sys
      
if 1==1:
	
	collected = 0
	attempts  = 50
	
	while collected < attempts :
	
	    try:
               x,y = win32gui.GetCursorPos() 
				
               collected += 1
		
               to_print = x,y  ," , attempt: ",collected
               to_print = str(to_print) + "\r"
				
               sys.stdout.write( to_print )
               sys.stdout.flush()   

               if collected == attempts:
                  collected = 0

               time.sleep(0.01) # set the inveral to read next

	    except:
               print "exception"                

Wie bekommt man nun diese Koordinaten auf unseren Arduino Leonardo?
Standard wäre die USB Serial-Schnittstelle (COM-Port).
Aber ein Arduino Leonardo ist mit seinem einzigen USB bereits an der PS4!
Somit ist der Weg PC->USB->Arduino nicht benutzbar.
Oder wir benutzen einen zweiten Arduino, [oder einfaches USB Device wie zBsp…],
um dann per RX/TX zu unserem PS4-Arduino zu kommunizieren.
PC->USB->Arduino_A->SerialRxTx->Arduino_B->USB->PS4
recht komplex.. es geht auch einfacher.

Besser und wahrscheinlich günstigste Lösung wäre:
http://arduino.cc/en/Main/USBSerial
http://www.dfrobot.com/index.php?route=product/product&product_id=581
http://www.komputer.de/zen/index.php?main_page=product_info&products_id=319
USBSerial kostet ca. 12,- Euro
PC->USB->USBSerial Adapter->SerialRxTx->ArduinoLeonardo->USB->PS4

Achtung, wichtig:
Nicht vergessen neben Rx, Tx immer auch GND zwischen
USB Serial Light Adapter und Arduino zu verbinden!
Dann klappts auch mit Serial1.

„Serial“ ist die Serielle Schnittstelle am Arduino Leonardo USB Stecker.
„Serial1“ ist die Serielle Schnittstelle am Arduino Leonardo Pins 0(Rx)/1(Tx).

folgendes Sketch, das ich auf den Arduino Leonardo aufspiele,
dient zum testen der Seriellen Schnittstellen.

int my_char = 0;
int my_charB = 0;



void setup() {                
  // initialize the digital pin as an output.
  // Pin 13 has an LED connected on most Arduino boards:
  pinMode(13, OUTPUT);  


  Serial.begin(9600); 
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }
  
  
  Serial1.begin(9600); 
  while (!Serial1) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }
  
  
}

void loop() {
 

  
    while (Serial.available() > 0) {
       /* CODE */
       my_char = Serial.read(); // the first byte of incoming serial data available (or -1 if no data is available) - int
       //my_char = "Serial 0: " + my_char;
       
       
       Serial.print( "Serial 0: " );
       
       // Writes binary data to the serial port. 
       // This data is sent as a byte or series of bytes; 
       // to send the characters representing the digits of a number use the print() function instead.
       Serial.write( my_char ); // ausgabe des eingegebenen Zeichens "r"
       
       
       // Prints data to the serial port as human-readable ASCII text 
       // followed by a carriage return character (ASCII 13, or '\r') 
       // and a newline character (ASCII 10, or '\n'). 
       // This command takes the same forms as Serial.print().
       Serial.println( my_char ); // ausgabe des Int-Values des Zeichens "114" + NewLine
       
       delay(5);
       blink_once();
     }
     
     
    
    while (Serial1.available() > 0) {
      
      my_charB = Serial1.read();
      
      Serial1.print( "Serial 1: " );
      Serial1.write( my_charB );
      Serial1.println(  my_charB );
      
      delay(5);
      blink_once();      
    }
     
}



void blink_once(){

  digitalWrite(13, HIGH);   // set the LED on
  delay(1000);              // wait for a second
  digitalWrite(13, LOW);    // set the LED off
  
}

Mit folgenden Zeilen bekommt man jederzeit
die aktuellen Details der COM Ports angezeigt..
Das ist sehr nützlich um zu erkennen,
an welchem COM Port gerade der Arduino Leonardo
oder/und der USB Serial Adapter(Arduino UNO) hängt.

python -m serial.tools.list_ports -v
PAUSE

erzeugt folgende Ausgabe:

COM14
desc: Arduino Uno (COM14)
hwid: USB VID:PID=2341:0001 SNR=55330343831351D03232
COM20
desc: Arduino Leonardo (COM20)
hwid: USB VID:PID=2341:8036
2 ports found

etzt probieren wir noch
das Zusammenspiel zwischen Python und Arduino.

Dazu installieren wir noch PySerial
http://pyserial.sourceforge.net/

nun können wir mit folgendem py-script
Daten über USB Serial Adapter(ArduinoUNO) zum Arduino Leonardo senden
und empfangen sogleich sein Antwort.

#  python C:\python_scripts\py_serial\py_serial.py


import serial
import time
import os

"""
C:\Users\MrRonsen>python -m serial.tools.list_ports -a
Usage: list_ports.py [options] []

list_ports.py: error: no such option: -a
"""
# C:\Python27\Lib\site-packages\serial\tools\list_ports.py  <<< look for options.. discoverd -v !
write_to_path = "C:\\python_scripts\\py_serial\\actual_com_ports.txt"
os.system("python -m serial.tools.list_ports -v > " + write_to_path)

fr = open( write_to_path , "rb")
frc = fr.read()
fr.close()

"""
COM14               
    desc: Arduino Uno (COM14)
    hwid: USB VID:PID=2341:0001 SNR=55330343831351D03232
COM9                
    desc: Arduino Leonardo (COM9)
    hwid: USB VID:PID=2341:8036
2 ports found
"""

frc = str(frc).split("\n")

com_dict = {}
COM_id = ""
for line in frc:
   #print line
   if line[0:3] == "COM":
		
		 COM_id = line.strip()
		 #print "COM_id: ",COM_id
		 com_dict[COM_id]  =  ""
		 
   if line.find("desc:") != -1:
		line2 = line
		line2 = line2.replace("desc: ","")
		line2 = line2.replace("("+COM_id+")","")
		line2 = line2.replace("\t","")
		line2 = line2.strip()
		#print "line2: >>",line2,"<<"
		com_dict[COM_id] = line2
	  
	  
arduino_leonardo_COMport = ""
arduino_uno_COMport = ""

for e in com_dict:
		print e, ": ", com_dict[e]
		
		if com_dict[e].lower().find("leonardo")!=-1:
			arduino_leonardo_COMport = e
		if com_dict[e].lower().find("uno")!=-1:
			arduino_uno_COMport = e

print "arduino_uno_COMport: ",arduino_uno_COMport
print "arduino_leonardo_COMport: ",arduino_leonardo_COMport




if 1==1:

	#COMport = 14
	#serial_port = COMport-1
	#serial_port = "COM14"
	#serial_port = "COM11"
	#serial_port = arduino_leonardo_COMport
	serial_port = arduino_uno_COMport

	baudrate = 9600

	connected = False

	
	"""
	ser = serial.Serial(port=serial_port,
baudrate=baudrate,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_TWO,
bytesize=serial.EIGHTBITS,
timeout=0,
xonxoff=0,
rtscts=0)
        """
        
        
	ser = serial.Serial( serial_port, baudrate)  # open first serial port
	#ser.DtrEnable = "true";
	
	print("initialising")
	time.sleep(2) # waiting the initialization...

	print ser.name          # check which port was really used

	i=0
	
	while i >" + str(xValue) + "<<" )
			
		time.sleep(2) # waits for 2 second

	 
	if 1==1111:
		print "reading: "
		while 1:
			xValue = ser.readline()
			print("something: " + str(xValue) )
	 
	print "END"



	ser.close()             # close port


Wo stehen wir jetzt?
Serial: Arduino Leonardo MouseEmulation an PS4 USB – WORKS
Serial1: senden/empfangen von Daten zw. Arduino Leonardo und PC mittels Arduino USB Serial Light Adapter mittels Python – WORKS
Python Script nutzen, um mit Arduino zu kommunizieren – WORKS
next steps:
– PS3 Eye Toy modifizieren
– HeadTracking Software Schnittstellen anzapfen, MouseEmulation->Mouse auslesen oder HeadTracking Schnittstellen per IP:PORT stream lesen
– alternativ Bildberechnungen bzgl. HeadTracking mit OpenCV/simpleCV selbst umsetzen

erste Tests mit FreeTrack:
ohne Zubehör wie den 3-Punkt Gestellen,
bleibt uns nur das FaceTracking, Gesichtserkennung.
Das funktioniert in ersten einfachen Tests ganz gut.
FreeTrack bietet verschiedene Schnittstellen/Protokolle an,
um die anfallenden Daten bereitzustellen.
Zudem kann man die Mouse steuern lassen, das klappt aber tatsächlich NICHT,
zumindest nicht bei mir, die Mouse sitzt in der Mitte des Bildschirms und flackert hin und wieder ganz links auf dem Bildschirm auf, keinerlei hoch/runter Mouse-Bewegung.

Mit der Software „eViacam“
http://eviacam.sourceforge.net/
kann man per FaceTracking die PC Mouse steuern.
Das funktioniert ganz gut, das FaceTracking und Mouse steuern funktioniert aber leider nicht 100prozentig.. es gibt einen Drift! Alle Kalibrierungsversuche verliefen negativ.

Offenbar müssen wir selbst ran, die Bildberechnungen selbst anstellen.

PS3 Eye – Camera,
funktioniert nicht sofort mit Win7/32bit.
Den Treiber dafür erhält man auf
www.codelaboratories.com/downloads/
für 2,99 $ (2,60 Euro)..

Mit einem PythonScript und den Frameworks/Libraries SimpleCV/OpenCV
kann man die Camera Settings nicht einfach lesen/schreiben,
wie es bei anderen Cams der Fall ist,
aber man kann mit SimpleCV die Camera starten,
wenn man nur Camera(Number) benutzt, OHNE Settings mitzugeben!

Um die PS3 Eye – Camera
in FreeTrack benutzen zu können,
muss man einen Fix/Hack einspielen
www.maximumpc.com/article/how-tos/how_build_your_own_ir_head_tracker
www.maximumpc.com/article/how-tos/how_build_your_own_ir_head_tracker?page=0,1
www.forum.free-track.net/index.php?showtopic=2416
www.sendspace.com/file/2stcof
also Freetrack deinstallieren,
Freetrack neu installieren OHNE Freetrack zu starten,
dann die Hackfiles in Freetrack Ordner kopieren,
dann Freetrack starten.
Wenn man sofort auf den Button „Camera“ klickt friert Freetrack ein!!!
Daher zuvor den Button „Stream“ klicken, hier kann man Auflösung und FPS auswählen,
dann den Button „Camera“ klicken, voila… nun funktionierts.

Vom Kollegen habe ich seine 3 Punkt Infrared BaseCap zum Testen erhalten.
Ohne Modifikationen an der PS3 Cam war von den InfraRed LEDs nichts zusehen.
Daher habe ich als nächstes anhand von Anleitungen, die PS3 Cam auseinandergebaut, die IR-blocking Linse entfernt und von einer Diskette einen Schnipsel zurecht geschnitten und eingesetzt um das Tageslicht zu filtern.
Nach dieser Modifikation sind die IR-LEDs der BaseCap sehr deutlich zu sehen.
www.youtube.com/watch?v=7jJfuP7YgPA
www.youtube.com/watch?v=CbMqsrm2TTs

Nachdem ich lange nach Beschreibungen der FreeTrack Schnittstellen gesucht und nichts gefunden habe,
werde ich den weiteren Weg mit OpenCV/SimpleCV gehen.

Fazit:
das nächste Puzzleteil ist also
eine eigene Software/Python-Script zu schreiben,
das die Kopfposition/ausrichtung anhand der IR-LEDs
aus den Kamerabildern/stream auswertet (SimpleCV, grayscale, binarize, findBlobs,..)

#############################

PC / Laptop mit Windows sollte man bereits haben und verwenden können.

Kosten:
Arduino Leonardo – 25,- Euro
wer noch keine Camera hat müsste sich eine zulegen, vielleicht
liegt ja noch eine benutztbare im Keller..
PS3 Eye Cam – 40,- Euro (sehr hohe Framerate, IR Infrarot Filter muss hier noch entfernt werden)
Infrarot-LEDs + Widerstände + AA-Batteriehalter   – ca. 10,- Euro

PS:

„TrackIR kann man nicht mit der PS4 verwenden“
das ist ein Zitat/Antwort vom deutschen Distributor 2connect.
Es braucht immer die PC Software.
www.trackir.eu/shop/
Zudem sind die Daten verschlüsselt…
man kann die anfallenden Daten also nicht verwenden.
www.en.wikipedia.org/wiki/TrackIR

SimpleCV
www.simplecv.org/
www.simplecv.org/book Page:206
ein erstaunlich kleines Script zur Gesichtserkennung, aber ob wir die wirklich einsetzen werden….
Tip: für bessere Performance kann man die Kameraauflösung herabsetzen
cam = Camera(0, {„width“: 320, „height“: 240})

 

 

das folgende Script ist ein Arduino-Sketch,
http://arduino.cc/en/Tutorial/ButtonMouseControl

/*
mouse steuerung,
parallel i2c LCD shield showing "clicked"
and sending "clicked" over Serial to PC... reading with Serial Monitor
and sending PC keyboard pressed key over serial to Arduino, Arduino reads and 
displays int value of pressed key on LCD and back to PC for reading on Serial Monitor
*/

/*
  ButtonMouseControl
 
 Controls the mouse from five pushbuttons on an Arduino Leonardo or Micro.
 
 Hardware:
 * 5 pushbuttons attached to D2, D3, D4, D5, D6  
!!! CHANGED  D2 to D8 and D3 to D9 for using I2C-LCD on Leonardo !!!
 
 
 The mouse movement is always relative. This sketch reads 
 four pushbuttons, and uses them to set the movement of the mouse.
 
 WARNING:  When you use the Mouse.move() command, the Arduino takes
 over your mouse!  Make sure you have control before you use the mouse commands.
 
 created 15 Mar 2012
 modified 27 Mar 2012
 by Tom Igoe
 
 this code is in the public domain
 
 */

#include 
#include 
LiquidCrystal_I2C lcd(0x27,16,2);  // set the LCD address to 0x27 for a 16 chars and 2 line display



// set pin numbers for the five buttons:
const int upButton = 8;  // 2   
const int downButton = 9; // 3        
const int leftButton = 4;
const int rightButton = 5;
const int mouseButton = 6;

int range = 5;              // output range of X or Y movement; affects movement speed
int responseDelay = 10;     // response delay of the mouse, in ms

int incomingByte = 0;


void setup() {
  
  Serial.begin(9600);

  //display  
  lcd.init();                      // initialize the lcd 
  lcd.backlight();
  lcd.home();
  
  lcd.setCursor(0, 0);
  lcd.print("Hello world...");
  lcd.setCursor(0, 1);
  lcd.print("dfrobot.com");
  
  
  // initialize the buttons' inputs:
  pinMode(upButton,    INPUT);       
  pinMode(downButton,  INPUT);       
  pinMode(leftButton,  INPUT);       
  pinMode(rightButton, INPUT);       
  pinMode(mouseButton, INPUT);
  // initialize mouse control:
  Mouse.begin();
}

void loop() {
  // read the buttons:
  int upState    = digitalRead(upButton);
  int downState  = digitalRead(downButton);
  int rightState = digitalRead(rightButton);
  int leftState  = digitalRead(leftButton);
  int clickState = digitalRead(mouseButton);

  // calculate the movement distance based on the button states:
  int  xDistance = (leftState - rightState)*range;
  int  yDistance = (upState - downState)*range;

  // if X or Y is non-zero, move:
  if ((xDistance != 0) || (yDistance != 0)) {
    Mouse.move(xDistance, yDistance, 0);
  }

  // if the mouse button is pressed:
  if (clickState == HIGH) {
    // if the mouse is not pressed, press it:
    if (!Mouse.isPressed(MOUSE_LEFT)) {
      Mouse.press(MOUSE_LEFT); 
      
      Serial.println("mouse klick");
      
      writeLCD("mouse klick");
      delay(500);
      
    }
  } 
  // else the mouse button is not pressed:
  else {
    // if the mouse is pressed, release it:
    if (Mouse.isPressed(MOUSE_LEFT)) {
      Mouse.release(MOUSE_LEFT); 
    }
  }

  // a delay so the mouse doesn't move too fast:
  delay(responseDelay);
  
 
  
  // send data only when you receive data:
  if (Serial.available() > 0) {
     // read the incoming byte:
     incomingByte = Serial.read();

     // say what you got:
     Serial.print("I received: ");
     Serial.println(incomingByte, DEC);
     writeLCD(String(incomingByte));
     
  } // EOF serial available
        
}


void writeLCD(String input){
  
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print( input );    

}

War Thunder PS4 – Saitek X55

works great, with the PS4
better than the previous thrustmaster force feedback joystick.

but PS4 is not always recognizing the axis of the devices,
throttle has an own usb, joystick has an own usb.
so at the beginning of gaming you need to set the axis for throttle, gearing, rolling, …
but a good tip could be: plug out the devices before you start the PS4,
when you are in the game in the control options, then plug in the joystick at first… when this has the axis with the lower IDs, after that plug in the Throttle, when the throttle has the higher axis IDs.
I will find out.. or Gaijin GameDeveloper could fix this next time?
The Buttons seems to stay correct, axis are lost.
Normaly a device has an own USB ID? Which is a real identifier not only a number of the n-th plugged in usb device. Then the game should/could store the information, regardless at which usb port the devices are plugged in, but maybe this time its on Gaijins implementation.

how to change the spring of the joystick

good: many, many buttons…
crazy possibilities to programm all these buttons/axis

when you attach a command to a keyboard keystroke, then you can programm the joysticks buttons/axis to immitate the keyboard keys!
you can programm axis in a special style: divide up the full range of an axle in two, three, four or more separate parts.. which you can bind to a key…

but i have to „screw“ to stick and throttle to the desk,
especially the throttle, when its used in „strong“ manner, when you pull back to you, the throttle could pullout from desk.

War Thunder PS4 – seeing is winning

to get better in the game
its important to see the other teammates and your opponents.

Head Tracking feature would quite good, if it would work perfectly,
what is actualy not the case.

So which option are left?

i use a mouse (usb,optical,Razer), directly connected to an usb hub, which is connected to the PS4.

With the mouse i can look around quite fast and comfortable, left, right, top, bottom…
and very important, with the mouse left click, i can recenter instantly!

One thing is not so good,
for a mouse you need some place on the desk to move the mouse around.

So you can think about to test a real 3D Mouse like this:
http://www.3dconnexion.de/products/what-is-a-3d-mouse.html
http://www.3dconnexion.de/products/spacenavigator.html << http://www.rakuten.de/produkt/3dconnexion-spacenavigator-standard-edition-1045245985.html?portaldv=3&sclid=a_rakneu_pla_DE&cid=google_base_pla&utm_source=gpla_DE&utm_medium=pla&utm_campaign=googlebase-pla-2012-02_DE&gclid=COCkmtTx_8ICFSdn7Aod0h0AFw use hot key to: - look back - look to bottom ground - follow your actual tagged opponent

War Thunder – PS4 – Headtracking

http://de.wikipedia.org/wiki/War_Thunder

PS4 – Camera
https://www.playstation.com/de-de/explore/ps4/features/tech-specs/
http://www.ign.com/blogs/finalverdict/2013/11/02/xbox-one-vs-playstation-4-kinect-20-vs-playstation-4-camera (tech spec not 100% identical to latest specs given on sony website)

in the game WarThunder you can use the PS4 camera to look around,
while you are flying your plane.
https://www.youtube.com/results?search_query=ps4+headtracking+war+thunder

The option to activat this feature is quite hidden.
In your Controls Menu in the Game, you will find a hint in the downb left corner.
Push L1 Button for Advanced settings.
If you hit L1 you get the menu to activate different extras and to activate the Headtracking option and set the sensitivity.

It works, ok, but its not so accurate as it should be.
I can not figure out how to center the view again, its on you.
Looking to the left, to the right works good,
Looking to the top, to the bottom works good,
but when you center your head/view along the nose of your plane,
it takes extra time to do so.
Why?
The question is,
what is calculated by whom?
Do the GameDevelopers of Gaijin everything,
or are they catching precalculated data from camera/API itself.

I have done a test to get answer to my question,
Does the game using real face-recognition or
is it doing its job in a more easier way, getting tracking your head with simpler model of your head.
I took a security helmet, orange coloured (STIHL), with black net view/face shield protectiv and big yellow ear protectors.
I have done the camera setup in PS4 settings menu with that costum.
Then i started the game, and when the view/face shield protectiv is closed/down,
the game headtracking isnt working anymore, when i open the view/face shield protectiv the head tracking works again.
My conclusion: the headtracking is using real face recognition, and so the question is again, is Gaijin doing the face recognition, realy? or is Gaijin headtracking using PS4 camera programming interface/API.

The head tracking is cool option, but for real game plane fights.. sometimes it gives you a feeling what could be.. and then because of the lag to recenter its not satisfying.
It would be good to switching the facetracking on/off while playing, using a hotkey on your joystick/keyboard, as long as the head tracking isnt working 100% satisfying.

Maybe a additional accessory could fix the problems?
But the basic head tracking stuff is using face recognition…
Could something like these accessories give an advantage?
http://www.naturalpoint.com/trackir/
http://www.naturalpoint.com/trackir/02-products/product-Vector-PRO.html
http://www.naturalpoint.com/trackir/02-products/product-TrackClip-PRO.html

Additional note:
– it works better in good light condition
– it works better in a distance of more then 1 meter,
sitting at a desk is to near/close to the camera!
– works good with full sensitivity (head tracking option/setting)

Wishlist to Gaijin:
Please implement a Head Tracking NOT based on Face regocnition! instead
based on accessories like these from naturalpoint.com Vector/TrackClip.

Immersion, so what?

Immersion wird,
unter Technik Geeks and Nerds ist es längst,
der nächste große Hype.
http://de.wikipedia.org/wiki/Immersion_(virtuelle_Realit%C3%A4t)

Dabei geht es kurzum, um das Versinken in virtuelle Welten.
Wie gut kann das gelingen? Wo sind die Grenzen? Gibt es Gefahren?

Mit „Datenbrillen“ in künstliche 3D Welten versinken, das gibt es schon lang.
Im Industriesektor, sicherlich im Militätsektor.
Neuerdings ist der Stand der Technik in einen finanziellem Rahmen erschwinglich geworden,
dass es Potential hat, sich in unserer Erlebenswelt zu verankern.

Ende 2014 gab es noch kein Produkt am Markt, das offiziell erhältlich ist.
Einzig Developer Kits des Oculus Rift SDK1/2 sind erhältlich(gewesen).
https://www.oculus.com/ SDK2, 350 US-Dollar, for Developers only

Über CroudFounding kam der Stein des Oculus Rift (aufgekauft von Facebook) ins Rollen,
Sony hatte bereits seit Jahren an 3D Brillen getüffelt und scheint mit dem Project Morpheus für die PS4 eine 3D Brille in 2015/2016 auf den Markt zu bringen.. oder bleibt es nur ein Project?

2015-01:
Laut Oculus Website, unterstützt Oculus die Firma SAMSUNG bei der Entwicklung des SAMSUNG Gear VR, basierend auf Galaxy Note 4.

Tip: immer wieder mal unter
https://www.oculus.com/news/
vorbeischaun und lesen was es neues gibt.

SONY PS4 Morpheus:
http://www.officialplaystationmagazine.co.uk/2014/03/25/everything-you-need-to-know-about-project-morpheus-ps4-vr-explained/
http://www.officialplaystationmagazine.co.uk/tag/ps4-oculus-rift-vr-headset/

SONY HMZ T1/T2/T3

Carl Zeiss – Cinemizer OLED
http://www.zeiss.de/cinemizer-oled/de_de/home.html
http://www.zeiss.de/cinemizer-oled/de_de/anwendungsbereiche/gaming.html

Worauf es ankommt?
– 100% Abdeckung des natürlichen Sichtfeldes
– 100% akurate Umsetzung der eigenen Kopfbewegungen, Schliesen(Blur)-frei, Verzögerungs(Latenz-)frei,
ansonst droht mitunter Übelkeit
– 3D Darstellung
– anpassbar an verschiedene Kopfformen, Sehstärken

Was kann 3D VR leisten?
– reale 3D Bilder/Animationen/Filme mit optischer Tiefe
– für Flugsimulationen, Weltraumsimulationen und Autorennen gute Visualisierung, da man bei diesen Simulationen sowieso auf seinem Hintern sitzt und sich von dort aus umsieht

Was kann 3D VR nicht leisten?
– Du wirst keine Menschen mehr sehen, neben dir, weil jeder diese Brille aufträgt.
Wenn Du schon immer allein gespielt hast, oder „nur“ mit Deinen Online Freunden/innen, dann ist das für Dich kein neuer/echter Nachteil
– Du wirst Deine Eingabegeräte nicht mehr sehen, Joypad/stick..
– Du wirst Deinen eigenen Körper nicht mehr sehen, solange Du die Brille aufträgst
– Wenn es zum „Kino“/Filmstandard wird, wird das Kinogeschäft wiederholt einbrechen?
– neuartige „Kino“/Filme werden erlebbar, in denen Du selbst jederzeigt deinen Blick um 360Grad bewegen kannst, aber Du kannst Dich nicht fortbewegen, der Film gibt sprichwörtlich den „Weg“ der Handlung vor.
Die Datenmengen dafür passen auf keinen heutigen Datenträger, das geht nur per Streaming aus der Cloud, die Cloud-Killer-Anwendung schlechthin
– dass Du deine Freunde beim Filmabend, die auf der Couch neben dir sitzen, auch im Film wiedersiehst
[nächstes Jahrtausend: 3D real body scanned Avatare! or fun Avatare mit Photo-based 3D Gesicht, keine Emotionen in den Gesichtern, außer Du hast den Emotional-Tracker/Synthesizer?]

http://www.golem.de/specials/oculus-rift/

Hand-Tracking, and whats with the rest of my body?
http://www.cyberglovesystems.com/index.php
http://www.theverge.com/2014/12/11/7379043/oculus-vr-snaps-up-hand-tracking-and-3d-modeling-companies
http://www.techtimes.com/articles/22038/20141213/oculus-vr-buys-hand-tracking-tech-expert-nimble-vr-why-were-so-excited.htm