Я пытаюсь понять, как gl_Position
становится (x, y) позицией на экране и как я могу ее преобразовать (например, чтобы получить позицию щелчка мыши).Как gl_Position становится (x, y) в окне?
Например, предположим, что у меня есть следующий 3D вектор:
V = [ -70.0, 0.27, -30.0, 1.0 ]
My MVP (модель-представление-проекция), рассчитанная с учетом pespective, является
M = [[-1.34, 0.0 , 0.0 , 0.0 ],
[ 0.0, 1.26, 1.28, 0.40 ],
[ 0.0, -0.72, 0.71, 141.54 ],
[ 0.0, -0.71, 0.70, 142.13 ]]
Если я умножать и я получаю:
M * V = [ 94.11, -37.53, 120.079, 120.86 ]
После того как я установить это значение в gl_Position
, вектор я ы рисуется в следующей позиции в окне (мое окно 800х600):
P = [ 702, 374 ]
То, что я не могу понять: как же M * V
становится P
? Я понимаю, что это имеет какое-то отношение к w
в V
, но я не могу найти расчет, где я получаю тот же результат, что и P
.
Вопрос: Как преобразовать P
в V
, чтобы поймать трехмерное положение щелчка мыши, например.
Большое спасибо за статью. Выполняя «N = (x, y, z)/w' с результатом« M * V », я смог получить конечную позицию окна (учитывая окно просмотра« T = (x, y, w, h) ') с' win_x = (Tw/2.0) * Nx + (Tx + Tw/2.0) 'и' win_y = Th - ((Th/2.0) * Ny + (Ty + Th/2.0)) '. –