Нет, нет. Объекты JavaScript не позволяют иметь свойства с одинаковыми именами.
Вы должны изменить имя свойства со стороны API.
Матрица преобразования мира к камере является инверсией матрицы камеры к миру. Матрица камеры к миру является комбинацией перевода в положение камеры и вращения к ориентации камеры. Таким образом, если M 3x3, соответствие матрицы вращения ориентации и t камеры является положением камеры, то 4x4 матрица камеры к миру:
M00 M01 M02 tx M10 M11 M12 ty M20 M21 M22 tz 0 0 0 1
Обратите внимание, что я предположил, что векторы являются векторами - столбцами, которые умножаются на праве выполнить преобразования. При использовании противоположной конвенции удостоверьтесь, что транспонировали матрицу.
Для нахождения M можно использовать одну из формул, перечисленных на Википедию, в зависимости от конкретной конвенции для списка, подачи и отклонения от курса. Следует иметь в виду, что те формулы используют конвенцию, что векторы являются векторами - строками, которые умножаются слева.
Вместо того, чтобы вычислить матрицу камеры к миру и инвертировать ее, более эффективное (и численно стабильный) альтернатива должна вычислить матрицу мира к камере непосредственно. Для этого просто инвертируйте положение камеры (путем отрицания всех 3 координат) и его ориентация (путем отрицания списка, подачи и углов отклонения от курса, и корректировки их, чтобы быть в их надлежащих диапазонах), и затем вычислите матрицу с помощью того же алгоритма.
Если у нас есть структура как это для описания 4x4 матрица:
class Matrix4x4
{
public:
union
{
struct
{
Type Xx, Xy, Xz, Xw;
Type Yx, Yy, Yz, Yw;
Type Zx, Zy, Zz, Zw;
Type Wx, Wy, Wz, Ww;
};
struct
{
Vector3<Type> Right;
Type XW;
Vector3<Type> Up;
Type YW;
Vector3<Type> Look;
Type ZW;
Vector3<Type> Pos;
Type WW;
};
Type asDoubleArray[4][4];
Type asArray[16];
};
};
Если все, что Вы имеете, является Euler углами, который является углами, представляющими отклонение от курса, подачу, и список и точку в 3-м пространстве для положения, можно вычислить Право, и векторы Взгляда. Обратите внимание, что Право, и Взгляд являются просто этими X, Y, Z Векторы, но так как это - камера, я нахожу легче назвать его так. Самый простой способ применить Ваш roations к матрице камеры состоит в том, чтобы создать серию матриц вращения и умножить нашу матрицу камеры на каждую матрицу вращения.
Хорошая ссылка для этого здесь: http://www.euclideanspace.com
После того как Вы применили все необходимые вращения, можно установить вектор На месте продажи на положение камеры в мировом пространстве.
Наконец перед применением преобразования камеры необходимо взять инверсию камеры ее матрицы. Это - то, что Вы собираетесь умножить свою modelview матрицу на то, прежде чем Вы начнете тянуть полигоны. Для матричного класса выше, инверсия вычисляется как это:
template <typename Type>
Matrix4x4<Type> Matrix4x4<Type>::OrthoNormalInverse(void)
{
Matrix4x4<Type> OrthInv;
OrthInv = Transpose();
OrthInv.Xw = 0;
OrthInv.Yw = 0;
OrthInv.Zw = 0;
OrthInv.Wx = -(Right*Pos);
OrthInv.Wy = -(Up*Pos);
OrthInv.Wz = -(Look*Pos);
return OrthInv;
}
Таким образом, наконец, со всей нашей матрицей constuction из пути, Вы сделали бы что-то вроде этого:
Matrix4x4<float> cameraMatrix, rollRotation, pitchRotation, yawRotation;
Vector4<float> cameraPosition;
cameraMatrix = cameraMatrix * rollRotation * pitchRotation * yawRotation;
Matrix4x4<float> invCameraMat;
invCameraMat = cameraMatrix.OrthoNormalInverse();
glMultMatrixf(invCameraMat.asArray);
Надеюсь, это поможет.
То, что Вы описываете, называют 'Перспективной проекцией' и существуют стопки ресурсов в сети, которые объясняют матричную математику и дают код, необходимый, чтобы сделать это. Вы могли запустить со страницы Википедии