Мне нужна помощь в преобразовании матрицы, чтобы найти углы моего viewPort в трехмерных координатах (World Space).
Я провел некоторый тест, но не могу найти решение.
Шаг 1: у меня есть проекция и матрица моделей (тоже размер ViewPort). Чтобы найти центр моего «экрана», я использовал это: OpenGL.UnProject(0.0, 0.0, 0.0)
<- эта функция сообщает мне, где находится центр моего экрана в трехмерном пространстве (правильно!). Другой подход заключается в умножении <code>Coordinate (0, 0, 0) * ProjectionMtx.Inverse.
Шаг 2: Теперь мне нужен, например, левый верхний угол моего окна просмотра, как я могу найти трехмерную точку в мировом пространстве? Вероятно, я должен работать с размером области просмотра, но как?
Это мой непроектированный метод:
double[] mview = new double[16];
GetDouble(GL_MODELVIEW_MATRIX, mview);
double[] prj = new double[16];
GetDouble(GL_PROJECTION_MATRIX, prj);
int[] vp = new int[4];
GetInteger(GL_VIEWPORT, vp);
double[] r = new double[3];
gluUnProject(winx, winy, winz, mview, prj, vp, ref r[0], ref r[1], ref r[2]);
Например: если у меня есть камера (-40,0,0) и мой проезд [0,0,1258,513] и я не проецирую мои точки в ближней плоскости, у меня есть этот результат:
left_bottom_near => X = -39.7499881839701, Y = -0.0219584744091603, Z = 0.946276352352364 right_bottom_near => X = -39,7499881839701, Y = -0,0219584744091603, Z = 0,946446903614738
left_top_near => Х = -39,7499881839701, Y = -0,0217879231516134, Z = 0,946276352352364
right_top_near => Х = -39,7499881839701, Y = -0,0217879231516134, Z = 0,946446903614738
Я могу понять значение Х моих точек, которое равно ~ значению моего мира в положении моей камеры, но как насчет Y & Z? Я не могу понять.