Я хочу получить правильно визуализированный результат проекции из среды Stage3D, которая через свой API представляет что-то вроде интерфейса «серого ящика». Он серый, а не черный, потому что я вижу этот важный фрагмент исходного кода:
matrix3D.copyFrom (renderable.getRenderSceneTransform (camera));
matrix3D.append (viewProjection);
Техника проекционного рендеринга, которая идеально соответствует моим потребностям, взята из полезного руководства, которое работает непосредственно с AGAL, а не с какой-либо конкретной структурой. Сопоставимый фрагмент логики рендеринга выглядит так:
cube.mat.copyToMatrix3D (drawMatrix);
drawMatrix.prepend (worldToClip);
Итак, я полагаю, что правильное общее описание того, что здесь происходит, заключается в том, что обе части кода настраивают правильную комбинированную матрицу для отправки в вершинный шейдер, где эта матрица будет параметром операции m44 AGAL. Общее описание состоит в том, что комбинированная матрица перенесет нас из локального пространства объекта через пространство обзора камеры в экран или пространство отсечения.
Моя проблема может быть резюмирована как возникающая из-за моего незнания правильных матричных операций. Я считаю, что моя неудачная попытка объединить две среды возникла именно потому, что семантика добавления одной матрицы к другой не является и никогда не должна быть эквивалентна добавлению этой матрицы к другой. Моя просьба, таким образом, может быть резюмирована таким образом. Поскольку я не могу контролировать последовательность вызовов, которую будет выдавать фреймворк, например, я должен жить с операцией добавления, я могу только попытаться исправить ситуацию на той стороне, где я подготавливаю матрицу, которая должна быть добавлена. Этот код не является черным ящиком, но я слишком сложен, чтобы знать, как изменить его, чтобы он соответствовал требованиям к интерфейсу, предъявляемым фреймворком.
Есть ли какая-то последовательность инверсий, преобразований или других маневров, которые позволили бы мне изменить матрицу viewProjection, которая была разработана для добавления в начале, чтобы она получалась правильной, когда вместо этого она добавляется к координатам мирового пространства объекта?