2013-07-10 2 views
1

У меня проблема с вычислением экранных координат вершины. это не специально проблема webgl, более общая проблема с 3D-графикой.webgl - координаты модели с координатами экрана

последовательности матричных преобразований, Im, используя это:

result_vec4 = perspective_matrix * camera_matrix * model_matrix * vertex_coords_vec4

model_matrix является преобразованием вершины в локальной системе координат в глобальную систему сцены коорда. , так что я понимаю, что конечный результат_vec4 находится в пространстве клипов? который затем должен находиться в диапазоне [-1,1]. который не является тем, что Im получает ... result_vec4 просто заканчивается, содержащим некоторые стандартные значения для коордов, не соответствующие правильному расположению экрана вершины.

есть ли какие-либо идеи относительно того, что может быть проблемой здесь? Большое спасибо за любые мысли.

ответ

1

Для перехода в усеченном пространстве вам нужно проецировать result_vec4 на гиперплоскости w=1 с помощью:

result_vec4 /= result_vec4.w 

Применяя этот перспективный отдел result_vec4.xyz будет [-1,1].

+0

result_vec4.w имеет значение «! = 1»? Я также не понимаю, что вы имеете в виду, когда говорите: «... обеспечивая перспективную матрицу, которая достигает этого». Большое спасибо за ответ :) – deepblue

+0

@deepblue result_vec4.w имеет некоторое значение «! = 1»? это происходит после проекции (деления). Если это произойдет, особенно если компилятор предварительно вычислит 1/w, то используйте продукты. Значение должно быть близко к 1.f. Я удалю запутанное «предоставление перспективы_матрицы, которая достигает этого» –

+0

Вопрос «! = 1», который я задал, был запутанным. все в порядке, и работает так, как я ожидаю. Я просто подумал, что «w» будет иметь 1 значение, поэтому я был смущен, почему мы должны делиться с 1 ... но это не значение, поэтому оно работает. спасибо за ваш ответ, вы много помогли :). – deepblue