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

Сообщение от ANIK123 Посмотреть сообщение
UPD: как словить в шейдере цвет вертекса заданного через иксВертексКолор? Думал что с помощью COLOR_DIFFUSE но полностью белый квадратик показал мне фак...
struct VSInput
{
float4 position : POSITION;
float3 normal : NORMAL;
float4 color : COLOR;
float2 texCoords0 : TEXCOORD0;
};
Вот там где красненькое цвет вершины автоматически подставится с такой семантикой

struct VSOutput
{
float4 position : POSITION;
float3 normal : TEXCOORD1;
float2 texCoords : TEXCOORD0;
float4 color : TEXCOORD2;
};

Дальше вершинный шейдер, который должен развернуть квад лицом к камере.

Если
output.position = mul(input.position, matrixWorldViewProj);
то в выводе лежит позиция центра квада, притом что после этой команды все сместилось относительно камеры, то есть весь мир в её локальных координатах стал, то прибавив вектор смещения от центра этой вершины ты получишь где эта вершина должна быть. для верхнего левого прибавляешь(-1,1,0) для верхнего правого (1,1,0), к нижнему левому (-1,-1,0) к четвертому (1,-1,0). Отличить вершины легко по текстурным координатам и выбрать соответствующее смещение.

дальше передаешь цвет в вывод вершинного, который ввод пиксельного
output.color = input.color;

Потом идет пиксельный шейдер, который рисует на экран
float4 PSMain(VSOutput input) : COLOR0
{
return input.color;
}

И типа все должно сработать. Если память мне не изменяет, а она может
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо dsd за это полезное сообщение:
ANIK123 (09.05.2012), St_AnGer (09.05.2012)