Я пытаюсь получить положение вершины на экране в пикселях внутри вершинного шейдера, я видел здесь несколько других сообщений, но не могу найти ответ, который подходит для меня. вот что у меня есть в вершинном шейдере:
#version 400
layout (location = 0) in vec3 inPosition;
uniform mat4 MVP; // modelViewProjection
uniform vec2 window;
void main()
{
// vertex in screen space
vec2 fake_frag_coord = (MVP * vec4(inPosition,1.0)).xy;
float X = (fake_frag_coord.x*window.x/2.0) + window.x;
float Y = (fake_frag_coord.y*window.y/2.0) + window.y;
}
Он работает не очень хорошо, и я знаю, что это странно делать внутри вершинного шейдера, но я хочу умножить смещение моей вершины на 2-мерную текстуру, поэтому мне нужно найти пиксель, на котором вершина находится сверху, чтобы иметь возможность умножить его на пиксель текстуры.
Благодарность! Луис
texture
вместоtexelFetch
. Поскольку у вас естьX
иY
как float, в любом случаеtexelFetch
теряет свою цель. И +1 @keltar. Вы должны выполнить перспективное деление (деление на w я думаю). - person agrum   schedule 28.05.2014window.x/2
иwindow.y/2
, а неwindow.x
иwindow.y
. Не забывайте еще о перспективном делении. - person agrum   schedule 28.05.2014w
независимо от того, перспективная это проекция или нет. Ортографическая проекция создает постояннуюw
координату (в отличие от перспективы,w
координата которой изменяется с расстоянием по оси z), но нет гарантии, что значение постоянно 1.0 б>. Вот почему я предпочитаю избегать термина «перспективное разделение» и вместо этого предпочитаю «однородное разделение» (хотя многие люди не понимают, о чем вы говорите = p) - person Andon M. Coleman   schedule 05.06.2014m44
в матрице ортогональной проекции изменяется с 1.0 на какое-то другое значение. Использование 0,5 дляm44
уменьшит объем просмотра вдвое, поэтому объекты будут казаться увеличенными в размере вдвое. Использование 2.0 дляm44
увеличит объем просмотра в 2.0, поэтому объекты будут казаться уменьшенными. Использование значения, отличного от 1.0 дляm44
, можно использовать для применения равномерного масштабирования к сцене с минимальными усилиями. То же самое с масштабной матрицей потребует гораздо больше работы. - person Andon M. Coleman   schedule 05.06.2014