// Update is called once per frame void Update() { //position of Letters relatet to its parents LetterPosX = this.gameObject.transform.localPosition.x; LetterPosY = this.gameObject.transform.localPosition.y; LetterPosZ = this.gameObject.transform.localPosition.z; Transform cameraTransform = Camera.main.transform; ulong timeStamp = smiInstance.smi_GetTimeStamp(); Vector3 leftGazeDirection = smiInstance.smi_GetLeftGazeDirection(); Vector3 rightGazeDirection = smiInstance.smi_GetRightGazeDirection(); Vector2 binocularPor = smiInstance.smi_GetBinocularPor(); Vector3 cameraRaycast = smiInstance.smi_GetCameraRaycast(); Vector2 leftPor = smiInstance.smi_GetLeftPor(); Vector2 rightPor = smiInstance.smi_GetRightPor(); Vector3 leftBasePoint = smiInstance.smi_GetLeftGazeBase(); Vector3 rightBasePoint = smiInstance.smi_GetRightGazeBase(); //Define real position of Letters related to the FOV of the Eyetracker LetterxPosFOV = (1080 + this.transform.parent.transform.localPosition.x + LetterPosX); LetteryPosFOV = -(-600 + this.transform.parent.transform.localPosition.y + LetterPosY); if (SMI.SMIEyeTrackingUnity.smi_IsValid(cameraRaycast)) { //Distance between Letter and Camera LetterDistanceCamera = Vector3.Distance(this.transform.position, cameraTransform.position); //Define the direction from Kamera to Letter targetDir = this.transform.position - cameraTransform.position; targetRightBaseDir = this.transform.position - cameraTransform.TransformPoint(rightBasePoint); targetLeftBaseDir = this.transform.position - cameraTransform.TransformPoint(leftBasePoint); //Calculate the Angle between the direction of Camera and Letter and the direction of the Raycast of the eyes angleCameraLetter = Vector3.Angle(cameraTransform.TransformDirection(cameraRaycast), targetDir); angleleftGazeDirection = Vector3.Angle(cameraTransform.TransformDirection(leftGazeDirection), targetLeftBaseDir); angleRightGazeDirection = Vector3.Angle(cameraTransform.TransformDirection(rightGazeDirection), targetRightBaseDir); Vector2 angularTarget = new Vector2(Vector3.SignedAngle(Vector3.forward, new Vector3(this.transform.localPosition.x, 0, LetterDistanceCamera), Vector3.up), Vector3.SignedAngle(Vector3.forward, new Vector3(0, this.transform.localPosition.y, LetterDistanceCamera), Vector3.up)); Vector2 angularResult = new Vector2(Vector3.SignedAngle(Vector3.forward, new Vector3(cameraRaycast.x, 0, cameraRaycast.z), Vector3.up), Vector3.SignedAngle(Vector3.forward, new Vector3(0, cameraRaycast.y, cameraRaycast.z), Vector3.up)); float errX = angularResult.x - angularTarget.x; float errY = angularResult.y - angularTarget.y; float realAngle = Mathf.Sqrt(errX * errX + errY * errY); /* * * Einige Berechnungen wurden doppelt ausgeführt zur überprüfung des Wahrheitsgehaltes der Funktionen. * * */ time += Time.deltaTime; EyeXPos = binocularPor.x; EyeYPos = binocularPor.y; //Debug.Log ("LetterPos [x;y] " + LetterxPosFOV + "," + LetteryPosFOV + "EyeXPos " + EyeXPos + "," + EyeYPos); //Richtungsvektor des Eye berechnen EyeDirVecX = EyeXPos - EyeOldPosX; EyeDirVecY = EyeYPos - EyeOldPosY; //Richtungsvektor des Buchstaben LetterDirVecX = LetterxPosFOV - LetterOldPosX; LetterDirVecY = LetteryPosFOV - LetterOldPosY; //Richtungsvektoren in Vecotrschreibweise //Eye RichtungsVecEye = new Vector2(EyeDirVecX, EyeDirVecY); //Letter RichtungsVecLetter = new Vector2(LetterDirVecX, LetterDirVecY); //Distanz zwischen alter und neuer Position (Länge des Richtugnsvektors) EyeDistance = Vector2.Distance(new Vector2(EyeXPos, EyeYPos), new Vector2(EyeOldPosX, EyeOldPosY)); LetterDistance = Vector2.Distance(new Vector2(LetterxPosFOV, LetteryPosFOV), new Vector2(LetterOldPosX, LetterOldPosY)); //normierter Richtungsvektor Letter und Eye NorRichtungsVecLetter = (1 / LetterDistance) * RichtungsVecLetter; NorRichtungsVecEye = (1 / EyeDistance) * RichtungsVecEye; //Geschwindigkeitsberechnung der Buchstaben über Distanz und Zeit EyeSpeed = (EyeDistance * (time - oldtime)); LetterRealspeed = (LetterDistance * (time - oldtime)); //Geschwindigkeitsabgleich zwischen Auge und Buchstabe SpeedDivision = (LetterRealspeed / EyeSpeed); //Winkelberechnung des Winkels zwischen Richtungsvektor Buchstabe und Richtungsvektor Auge DirAngelLetterToGazeVec = Vector2.Angle(RichtungsVecLetter, RichtungsVecEye); NorDirAngelLetterToGazeVec = Vector2.Angle(NorRichtungsVecLetter, NorRichtungsVecEye); //Abstand zwischen Buchstabe und Augen Anhand der POR und FOV Position DistanceEyeAndLetterPOR = Vector2.Distance(new Vector2(EyeXPos, EyeYPos), new Vector2(LetterxPosFOV, LetteryPosFOV)); //Berechnung der Match-Werte calculateMatchValue(SpeedDivision, angleCameraLetter, DirAngelLetterToGazeVec); calculateMatchValueGewichtet(SpeedDivision, angleCameraLetter, DirAngelLetterToGazeVec); calculateMatchValueGewichtet2(SpeedDivision, angleCameraLetter, DirAngelLetterToGazeVec); //PORPosition EyeOldPosX = EyeXPos; EyeOldPosY = EyeYPos; //Letterposition LetterOldPosX = LetterxPosFOV; LetterOldPosY = LetteryPosFOV; timedifferenz = 0f; oldtime = time; } }