Да пожалста.
Сообщение от ANIK123
Все заработало как часики швейЦарские) Правда с пропорциями квада чтото не то - какой-то сплющенный он получился

|
Это потому что у тебя экран не квадратный, оно же после умножения на матрицу проекционную уже в экранные координаты переводит. А вообще сначала надо умножить на мировую и видовую, это приведет вершину в локальные координаты камеры, затем добавить сильно упростившиеся смещения и потом полученную координату умножить на проекционную матрицу, которая переведет уже вершину в координаты на плоскости экрана, на которой рисует пиксельный. То есть либо смещения делать по пропорциям экрана и иметь еще глюк что дальняя частица равна по размеру ближней или таки слегка усложнить вершинный. Это я протупил давно в шейдерах не ковырялся.
А насчет координат это потому что пиксельный вроде принимает на вход координаты точки в пространстве, её нормаль и её текстурные координаты и все

То есть если из вершинного надо много передать в пиксельный то в основном это через текстурные координаты делается, их много слоев можно, вроде. Мне хватало.
А на счет w-координаты есть инфа? Или как еще можно идентифицировать каждую частицу в шейдере?
....
ЗЫ: почему ты в выходной структуре вершинного шейдера семантику цвета определил как тексКоординаты?
|
Ну это третья текстурная координата, типа и текстура должна быть три-дэ. А идентифицировать в хорсе никак. То есть для вершинного шейдера все вершины одинаковые. Но
struct VSInput
{
float4 position : POSITION;
float4 blendWeights : BLENDWEIGHT;
float4 blendIndices : BLENDINDICES;
float3 normal : NORMAL;
float4 color : COLOR;
float2 texCoords0 : TEXCOORD0;
float2 texCoords1 : TEXCOORD1;
float3 binormal : BINORMAL;
float3 tangent : TANGENT;
}; Вот допустимые семантики для данных для вершины к которым ты имеешь доступ из хорса, куда ты можешь засунуть те данные, которые позволят их различить в вершинном.
Плюс еще в хорсе есть тайные семантики, которых нет в документации, но которые радикально могут облегчить жизнь
Плюс вот еще что полезно может быть:
В пиксельном у тебя есть координата точки на экране в виде x.y.z.w
x/w координаты по высоте экрана, y/w по ширине, а z/w в глубину
Координаты там от центра экрана меряются причем единицы соответствуют углам изображения. Какая-то магия матриц
Причем z изменяется от 0 до 1, где ноль будет соответствовать ближней плоскости отсечения вида камеры, а 1 дальней.
ЗЫ вот еще по частицам что в шагах есть может полезно будет
В качестве результата своей работы, вершинные шейдер помет возвращать сле-дующие данные:
POSITION0 – трансформированная позиция вершины.
COLOR[n] – значение цвета, стоит отметить, что записывать именно цвет сюда вовсе необязательно, например, в случае если необходимо передать в пиксельный шейдер позицию, ее спокойно можно поместить в любое поле с семантикой COLOR или TEXCOORD.
TEXCOORD[n] – текстурные координаты. Не обязательно float2 зна-чение, может быть любым в зависимости от ваших нужд (например, для передачи нормали можно использовать float3).
FOG – float значения тумана для данной вершины.
PSIZE – размер точки. Действует только на точечные спрайты (системы частиц).
Например, если нам необходимо рассчитать попиксельное освещение в шейдере, структура выходных данных может быть следующей: