Показать сообщение отдельно
Старый 06.11.2012, 00:46   #62
burovalex
Разработчик
 
Аватар для burovalex
 
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений
(для 60 пользователей)
Ответ: Советы по оптимизации

КРУУТААА!!!
Всё работает!!
СПАСИБО ВСЕМ ОГРОМНОЕ ЗА ПОМОЩЬ!!!!!

оказалось все просто
Vertex shader
float4x4 matViewProjection;

void vs_main(
   in float4 iPOS : POSITION,
   in float2 iTC : TEXCOORD,
   
   out float4 oPOS : POSITION,
   out float2 oTC : TEXCOORD0,
   out float2 oDIST : TEXCOORD1)  //для дистанции хватит и одного флоата, но не знаю каким типом заменить
   
{
   oPOS = mul(iPOS, matViewProjection );
   oTC = iTC;
   oDIST = oPOS.z;
}
Pixel shader
sampler TX1;
float4 ps_main(
   float2 TXC : TEXCOORD0,
   float2 DIST : TEXCOORD1
   ) : COLOR0
{   
   float4 TXOUT = tex2D(TX1, TXC);
   clip(DIST<300 ? -1:1);    //почему то дистанция 300 - а по рисунку не скажешь что так много 
   return TXOUT;
}

Теперь такой шейдер я хочу наложить на на 3 уровня мешей (low,normal,hi) и должно получится так, что один меш начнет срезаться, а другой на месте среза появляться.
Вот только есть одно но - меш который будет normal, должен исчезать на одной дистанции и появляться на другой.
Можно ли использовать оператор AND?
т.е.
clip(DIST<300 AND DIST>1000 ? -1:1);
И еще вот такой вопросик, надо ли в блитце дополнительно скрывать ентити, чтобы видяха не обрабатывала уже "вырезанный" меш?
Миниатюры
Нажмите на изображение для увеличения
Название: temp.jpg
Просмотров: 778
Размер:	101.7 Кб
ID:	17984  
__________________
(Offline)
 
Ответить с цитированием