Я знаю, что об этом спрашивали миллион раз, но я просто не получаю некоторые детали.
В качестве примера, скажем, у меня создана цепочка обмена и одна стадия ID3D11Texture2D
.
Что я могу с этим сделать, это загрузить растровое изображение в эту 2D-текстуру и затем скопировать его в цель рендеринга (при условии, что размер и формат обоих ресурсов совпадают).
Теперь я хотел быхотел бы показать спрайт над этим. Одним из решений является использование вершинных и пиксельных шейдеров. Моя проблема понимания начинается здесь.
Вершинный шейдер:
Полагаю, мне нужно нарисовать 2 треугольника (2 треугольника составляют прямоугольник или квад). DirectX использует левостороннюю систему координат, но я думаю, что здесь это не имеет значения, потому что я имею дело с 2D-спрайтами, верно? По той же причине я предполагаю, что могу игнорировать преобразования world->view->projection
, верно? На самом деле, мне нужен только перевод здесь, чтобы разместить спрайт в нужном месте на экране, верно?
Должны ли координаты этих двух треугольников соответствовать размерам спрайта плюс перевод? В каком порядке я должен предоставить эти вершины? Должно ли начало системы координат находиться в центре спрайта или начало в верхнем левом углу спрайта?
Например, если у меня есть спрайт 80x70, какими будут значения вершин?
Реальные вершины: (X, Y, Z - без применения перевода)
1. -40, -35, 0
2. -40, 35, 0
3. 40, -35, 0
4. 40, 35, 0
5. -40, 35, 0
6. 40, -35, 0
Это правильно?
Шаг растеризации должен вызывать пиксельный шейдер один раз для каждого пикселя в спрайте. Вывод вершинного шейдера будет вводиться для пиксельного шейдера. Означает ли это, что пиксельный шейдер должен иметь доступ к спрайту, чтобы возвращать правильное значение пикселя при вызове?