У меня есть три куба, вращающиеся в моей 3D-сцене. То, что я пытаюсь достичь, - это вычислить, какой из них (если есть) кубов, которые были нажаты.Какой modelView я использую в gluUnproject?
Я думаю, что я понимаю, как работает gluUnproject, я просто должен запускать gluUnproject дважды, один раз для ближней плоскости и один раз для дальнего плана и еще много чего. Единственная проблема, с которой я сталкиваюсь, - это понять, какой modelView использовать.
Прототип функции выглядит следующим образом (я разрабатываю для Android):
public static int gluUnProject (float winX, float winY, float winZ,
float[] model, int modelOffset,
float[] project, int projectOffset,
int[] view, int viewOffset,
float[] obj, int objOffset)
То, что я не понимаю, что матрица видовую я должен использовать для четвертого аргумента. Должен ли я рассчитать луч один раз для каждого куба, используя матрицу modelView каждого куба?
Я действительно хочу проверить геометрию в мировом пространстве, но мне трудно понять, что вы говорите. Каждый раз, когда я рисую фрейм, матрица представления и матрица проекционного прогноза вычисляются в моем классе Renderer, который затем подается в кубы следующим образом: cube1.draw (mViewProjectionMatrix, mViewMatrix). Затем каждый куб вычисляет MVP-матрицу (используя свою индивидуальную матрицу модели) и передает ее шейдерам в виде единой. Какую матрицу я должен использовать, когда я вычисляю луч из класса Renderer? –
@AbuHassan: передать матрицу зрения и проекции в соответствии с классом рендеринга. Однако, поскольку вы получаете предварительно умноженное проекционное представление (которое имеет мало пользы), вы сначала размножаете часть представления. Если проекция PV = P · V, где P = проекция, вы можете получить исходный P посредством r-умножения с обратным представлением: P = PV · inv (V); т. е. вы должны сначала инвертировать матрицу представлений. – datenwolf
@AbuHassan: У меня создается впечатление, что у вас есть только мрачное понимание того, как работает целая цепочка преобразований. Я настоятельно рекомендую вам отполировать свои знания по линейной алгебре, как работать с матрицами и как матрицы могут действовать как линейный оператор. С этими знаниями все становится намного легче. – datenwolf