/usr/share/psychtoolbox-3/PsychOpenGL/eyePoseToCameraMatrix.m is in psychtoolbox-3-common 3.0.12.20160126.dfsg1-1ubuntu1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | function [cameraMatrix, eyePoseT] = eyePoseToCameraMatrix(eyePose, eyeLocalTranslate)
% eyePoseToCameraMatrix() - Convert eyePose directly to camera matrix.
%
% Usage:
%
% cameraMatrix = eyePoseToCameraMatrix(eyePose [, eyeLocalTranslate])
%
% Input arguments:
%
% 'eyePose' is a [tx, ty, tz, rx, ry, rz, rw] vector, with the first 3 components
% defining eye translation, and the last 4 components defining a rotation Quaternion
% that defines eye orientation.
%
% 'eyeLocalTranslate' is an optional 3 component translation vector that gets applied
% to 'eyePose' position, but within the eyes own rotated local coordinate system.
% This is useful if 'eyePose' is not actually describing an eye pose, but the tracked
% global head pose or global HMD pose. Applying suitable 'eyeLocalTranslate' translation
% vectors allows to derive the eyes position from the head/HMD position.
%
% Return arguments:
%
% 'cameraMatrix' is a 4x4 matrix that encodes eyePose as a combined rotation and
% translation matrix.
%
% 'eyePoseT' is the original input 'eyePose', but optionally transformed by
% 'eyeLocalTranslate'.
% History:
% 15-Sep-2015 mk Written.
% Extract tanslation and rotation quaternion components:
translation = eyePose(1:3);
orientationQ = eyePose(4:7);
if nargin >= 2 && ~isempty(eyeLocalTranslate)
% Apply translation in the local rotated coordinate frame, e.g., if eyePose
% is actually a head pose and we need to translate from head rotation center to
% rotated eyes:
translation = translation + (qGetR(orientationQ) * eyeLocalTranslate')';
end
% Convert into OpenGL 4x4 right-handed reference frame matrix:
R = diag([1,1,1,1]);
R(1:3, 1:3) = qGetR(orientationQ);
T = diag([1,1,1,1]);
T(1:3, 4) = translation;
cameraMatrix = T * R;
% Output the transformed eye pose as optional 2nd return argument for reference:
eyePoseT = [translation, orientationQ];
return;
|