Для маскирующего объекта я пытаюсь масштабировать каждый треугольник индивидуально. Если я масштабирую объект целиком, точки, находящиеся дальше от центра, будут перемещены слишком далеко, и я просто хочу, чтобы у объекта было «больше тела». Поскольку я использую ее в качестве маски, не имеет значения, перекрываются ли треугольники.
Хотя, глядя на это, может кто-то глубоко повредить, на самом деле это то, чего я пытаюсь достичь:
Я думал, что это лучше всего сделать в шейдере, и я думал, что этого можно добиться в геометрическом шейдере, так как мне нужно знать центр треугольника. Я пришел с кодом ниже, но все продолжает действовать ... странно.
float3 center = (IN[0].vertex.xyz + IN[1].vertex.xyz + IN[2].vertex.xyz) / 3;
for (int i = 0; i < 3; i++)
{
float3 distance = IN[i].vertex.xyz - center.xyz;
float3 normal = normalize(distance);
distance = abs(distance);
float scale = 1;
float3 pos = IN[i].vertex.xyz + (distance * normal.xyz * (scale - 1));
o.pos.xyz = pos.xyz;
o.pos.w = IN[i].vertex.w;
tristream.Append(o);
}
Мой план состоял в том, чтобы вычислить центр треугольника и затем вычислить расстояние между центром и каждой точкой. Затем я бы взял нормаль этого расстояния, чтобы узнать, в каком направлении мне нужно переместить вершину и изменить положение, добавив шкалу расстояния * нормаль (направление) * к исходному положению вершины. Тем не менее, кажется, что треугольники меняются, когда вы поворачиваете камеру, поэтому я сомневаюсь, что это правильно. Кто-нибудь знает, что может быть не так?
(Только некоторые примечания: me sh в основном 2D, меняется только по осям X и Z (если это имеет значение). Я сделал abs (расстояние) так как я думал, что это отменит нормальное, если оба будут отрицательными. Я не уверен, если это необходимо. Я сделал масштаб -1, так как масштаб 1 привел бы к тому, что я sh остался бы тем же. Масштаб 2 должно привести к тому, что все треугольники будут в два раза больше. Я понятия не имею, что делать со значением w, но, по крайней мере, сохранение старого значения не так уж и много. Возможно, здесь кроется проблема? Я думал, что это значение должно всегда будет 1 для умножения матриц.)