Я делаю кастинг луча в программе построения теней фрагмента. Я могу думать о паре способов потянуть полноэкранную четверку с этой целью. Или потяните четверку в пространстве клипа с набором матрицы проекции к единичной матрице или используйте программу построения теней геометрии для превращения точки в треугольную полосу. Бывшее использование непосредственный режим, удержанный от использования в OpenGL 3.2. Последний, которого я использую из новинки, но она все еще использует непосредственный режим для рисования точки.
Вы можете отправить два треугольника, создающих четырехугольник, с их атрибутами вершин, установленными на -1/1 соответственно.
Вам не нужно умножать их на любую матрицу в вершинном / фрагментном шейдере.
Вот несколько простых примеров кода:)
Вершинный шейдер:
const vec2 madd=vec2(0.5,0.5);
attribute vec2 vertexIn;
varying vec2 textureCoord;
void main() {
textureCoord = vertexIn.xy*madd+madd; // scale vertex attribute to [0-1] range
gl_Position = vec4(vertexIn.xy,0.0,1.0);
}
Фрагментный шейдер:
varying vec2 textureCoord;
void main() {
vec4 color1 = texture2D(t,textureCoord);
gl_FragColor = color1;
}