Я рисую графический интерфейс в Direct3D 11, и в настоящее время я управляю им, рисуя множество 3D-квадратов рядом с экраном. Я решил использовать квадраты экрана, чтобы немного улучшить скорость.
Когда я рисую четырехугольник, я предоставляю ему входную позицию (input.pos), которая представляет собой набор координат, определяющих четырехугольник следующим образом:
0,0
0,1
1,0
1,1
Я также передаю позицию экземпляра, которая является позицией четырехугольника в пространстве экрана, например.
456,700
И, наконец, я передаю масштаб квадроцикла в пикселях. Таким образом, четырехугольник размером 50x30 пикселей будет иметь следующее значение масштаба:
50,40
Чтобы преобразовать эти координаты в пространство отсечения для моего пиксельного шейдера, я использую следующую математику (которую я намереваюсь в конечном итоге выполнить на ЦП, но пока это делается в вершинном шейдере):
output.pos = float4((input.pos*2* input.instanceScale) / winSize+input.instancePos*2/winSize -1,0.25,1);
В основном это работает, и все отображается рядом со всем остальным, но ось Y перевернута. Это связано с тем, что пространство клипа имеет значение от -1 до 1, но 1 — это верхняя часть экрана в пространстве клипа, что противоречит обычному способу работы. Таким образом, решение должно быть:
output.pos.x = 2*(input.pos.x * input.instanceScale.x + input.instancePos.x)/winSize.x -1;
output.pos.y = 1 - 2*(input.pos.y * input.instanceScale.y + input.instancePos.y)/winSize.y;
Однако, когда я запускаю это, мои квадроциклы просто исчезают. Я предполагаю, что они все еще рендерятся, но где-то за пределами экрана.
Кто-нибудь знает, что может пойти не так?
Кроме того, если я сохраняю новый расчет output.pos.x, но использую старый расчет для координаты y, он все равно работает. Так что проблема должна быть во второй строке этого нового кода.
Большое спасибо
РЕДАКТИРОВАТЬ1: теперь я последовал совету TomMcTwattyPants и зафиксировал окончательную позицию y между 1 и -1. Что происходит, так это то, что элементы графического интерфейса перемещаются вертикально к центру, а также сжимаются. Достигнув центра, они исчезают, а затем зацикливаются.
Перед циклом есть задержка, поэтому я считаю, что между 0 и -1 частью умножения квадроциклы невидимы. Я не уверен, почему, хотя, возможно, порядок вершин изменился, поэтому нормаль теперь указывает в сторону от экрана и отбрасывается? Я попробую отключить отбраковку обратной стороны, чтобы посмотреть, изменит ли это что-нибудь. В любом случае, это не нужно для прохождения GUI.
EDIT2: проблема заключалась в отбраковке задней поверхности. Отключение это все исправило