Показать сообщение отдельно
Старый 09.05.2012, 14:36   #4
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Шейдеры + частицы

Да пожалста.

Сообщение от 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 – размер точки. Действует только на точечные спрайты (системы частиц).
Например, если нам необходимо рассчитать попиксельное освещение в шейдере, структура выходных данных может быть следующей:
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо dsd за это полезное сообщение:
ANIK123 (09.05.2012), St_AnGer (09.05.2012)