Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > 3D-программирование

3D-программирование Вопросы, касающиеся программирования 3D мира

Ответ
 
Опции темы
Старый 07.02.2009, 00:14   #16
Sfonsper
ПроЭктировщик
 
Регистрация: 01.02.2009
Адрес: Москва
Сообщений: 112
Написано 10 полезных сообщений
(для 33 пользователей)
Ответ: Как сделать инфракрасный фильтр?

в демках Ogre3d я нашел этот самый фильтр но он напмсан на с++ а мне надо для blitz3d
//////////////////////////////////////////////
// CASTER PASS //
// HEAT //
//////////////////////////////////////////////

// vs_1_1
void HeatCaster_vp(
// in
float4 vPos: POSITION,
float4 vNormal: NORMAL,

// out
out float4 oPos: POSITION,
out float2 oNDotV: TEXCOORD0,

// parameters
uniform float4x4 worldViewProj,
uniform float3 eyePosition // object space
)
{
float4 eyeDir = float4(eyePosition - vPos.xyz, 0);
eyeDir = normalize(eyeDir);
oPos = mul( worldViewProj, vPos );
oNDotV = clamp( dot( vNormal, eyeDir ), 0, 1 );
}

// ps_2_0
float4 HeatCaster_fp(
// input from vp
float2 iNDotV: TEXCOORD0
) : COLOR0
{
return iNDotV.x;
}


//////////////////////////////////////////////
// CASTER PASS //
// COLD //
//////////////////////////////////////////////

// vs_1_1
void ColdCaster_vp(
// in
float4 vPos: POSITION,
float4 vNormal: NORMAL,

// out
out float4 oPos: POSITION,
out float2 oNDotV: TEXCOORD0,

// parameters
uniform float4x4 worldViewProj,
uniform float3 eyePosition // object space
)
{
float4 eyeDir = float4(eyePosition - vPos.xyz, 0);
eyeDir = normalize(eyeDir);
oPos = mul( worldViewProj, vPos );
oNDotV = clamp( dot( vNormal, eyeDir ), 0, 1 );
}

// ps_2_0
float4 ColdCaster_fp(
// input from vp
float2 iNDotV: TEXCOORD0
) : COLOR0
{
return iNDotV.x / 2;
}


//////////////////////////////////////////////
// PASS 1 - Light to heat conversion //
//////////////////////////////////////////////

// vs_1_1
void LightToHeat_vp(
// in
float4 inPos: POSITION,

uniform float flipping,

// out
out float4 Pos: POSITION,
out float2 uv0: TEXCOORD0
)
{
Pos = float4(inPos.x, flipping * inPos.y, 0.0f, 1.0f);
inPos.xy = sign(inPos.xy);
uv0 = (float2(inPos.x, -inPos.y) + 1.0f)/2.0f;
}


// ps_2_0
void LightToHeat_fp(
// input from vp
float4 inDiffuse: COLOR0,
float2 inUV0: TEXCOORD0,

// out
out float4 outColor: COLOR0,

// params
uniform float4 random_fractions,
uniform float4 heatBiasScale,
uniform float4 depth_modulator,

uniform sampler2D Input, // output of HeatVisionCaster_fp (NdotV)
uniform sampler2D NoiseMap,
uniform sampler2D HeatLookup
)
{
float depth, heat, interference;

// Output constant color:
depth = tex2D( Input, inUV0 );
depth *= (depth * depth_modulator);

heat = (depth * heatBiasScale.y);

// if (depth > 0)
{
interference = -0.5 + tex2D( NoiseMap, inUV0 + float2( random_fractions.x, random_fractions.y ) );
interference *= interference;
interference *= 1 - heat;
heat += interference;//+ heatBiasScale.x;
}

/*
heatBias isn't used for now
if (heat > 0)
heat += heatBiasScale.x;
*/

// Clamp UVs
heat = max( 0.005, min( 0.995, heat ) );
outColor = tex2D( HeatLookup, float2( heat, 0.f ) );
}


//////////////////////////////////////////////
// PASS 2 - add simple blur (final pass) //
//////////////////////////////////////////////

// vs_1_1
void Blur_vp(
// in
float4 inPos: POSITION,

uniform float flipping,

// out
out float4 Pos: POSITION,
out float2 uv0: TEXCOORD0
)
{
Pos = float4(inPos.x, flipping * inPos.y, 0.0f, 1.0f);
inPos.xy = sign(inPos.xy);
uv0 = (float2(inPos.x, -inPos.y) + 1.0f)/2.0f;
}

// ps_2_0
void Blur_fp(
// input from vp
float4 inDiffuse: COLOR0,
float2 inUV0: TEXCOORD0,

// out
out float4 outColor: COLOR0,

// parameters
uniform sampler2D Input, // output of HeatVision_fp1 (HeatRenderTexture)
uniform float4 blurAmount
)
{
int i;
float4 tmpOutColor;
float diffuseGlowFactor;
const float2 offsets[4] =
{
/*
// hazy blur
-1.8, -1.8,
-1.8, 1.8,
1.8, -1.8,
1.8, 1.8
*/
/*
// less-hazy blur
-1.0, 2.0,
-1.0, -1.0,
1.0, -1.0,
1.0, 1.0
*/
/*
-0.326212, -0.405805,
-0.840144, -0.073580,
-0.695914, 0.457137,
-0.203345, 0.620716
*/

-0.3, 0.4,
-0.3, -0.4,
0.3, -0.4,
0.3, 0.4

};

tmpOutColor = tex2D( Input, inUV0 ); // UV coords are in image space

// calculate glow amount
diffuseGlowFactor = 0.0113f * (2.0 - max( tmpOutColor.r, tmpOutColor.g ));

// basic blur filter
for (i = 0; i < 4; i++) {
tmpOutColor += tex2D( Input, inUV0 + blurAmount.x * diffuseGlowFactor * offsets[i] );
}

tmpOutColor *= 0.25;

// TIPS (old-skool strikes again!)
// Pay attention here! If you use the "out float4 outColor" directly
// in your steps while creating the output color (like you remove
// the "tmpOutColor" var and just use the "outColor" directly)
// your pixel-color output IS CHANGING EACH TIME YOU DO AN ASSIGNMENT TOO!
// A temporary variable, instead, acts like a per-pixel double buffer, and
// best of all, lead to better performance.
outColor = tmpOutColor;
}
(Offline)
 
Ответить с цитированием
Старый 07.02.2009, 00:17   #17
Sfonsper
ПроЭктировщик
 
Регистрация: 01.02.2009
Адрес: Москва
Сообщений: 112
Написано 10 полезных сообщений
(для 33 пользователей)
Ответ: Как сделать инфракрасный фильтр?

И еще материал

///////////////////////////////////
// PASS 0
// HEAT CASTERS PASS
///////////////////////////////////

vertex_program Fury/HeatVision/HeatCaster_vp cg
{
source HeatVision.cg
entry_point HeatCaster_vp
profiles vs_1_1 arbvp1
}

fragment_program Fury/HeatVision/HeatCaster_fp cg
{
source HeatVision.cg
entry_point HeatCaster_fp
profiles ps_2_0 arbfp1
}

material Fury/HeatVision/HeatCaster
{
technique
{
pass
{
vertex_program_ref Fury/HeatVision/HeatCaster_vp
{
param_named_auto eyePosition camera_position_object_space
param_named_auto worldViewProj worldviewproj_matrix
}

fragment_program_ref Fury/HeatVision/HeatCaster_fp
{
}
}
}
}

///////////////////////////////////
// PASS 0
// HEAT CASTERS PASS
///////////////////////////////////

vertex_program Fury/HeatVision/ColdCaster_vp cg
{
source HeatVision.cg
entry_point ColdCaster_vp
profiles vs_1_1 arbvp1
}

fragment_program Fury/HeatVision/ColdCaster_fp cg
{
source HeatVision.cg
entry_point ColdCaster_fp
profiles ps_2_0 arbfp1
}

material Fury/HeatVision/ColdCaster
{
technique
{
pass
{
vertex_program_ref Fury/HeatVision/ColdCaster_vp
{
param_named_auto eyePosition camera_position_object_space
param_named_auto worldViewProj worldviewproj_matrix
}

fragment_program_ref Fury/HeatVision/ColdCaster_fp
{
}
}
}
}

///////////////////////////////////
// PASS 1
// LIGHT TO HEAT CONVERSION PASS
///////////////////////////////////

vertex_program Fury/HeatVision/LightToHeat_vp cg
{
source HeatVision.cg
entry_point LightToHeat_vp
profiles vs_1_1 arbvp1

default_params
{
param_named_auto flipping render_target_flipping
}
}

fragment_program Fury/HeatVision/LightToHeat_fp cg
{
source HeatVision.cg
entry_point LightToHeat_fp
profiles ps_2_0 arbfp1
}

material Fury/HeatVision/LightToHeat
{
technique
{
// pass 1
pass
{
cull_hardware none
cull_software none
depth_func always_pass

vertex_program_ref Fury/HeatVision/LightToHeat_vp
{
}

fragment_program_ref Fury/HeatVision/LightToHeat_fp
{
// these should be *really* random!
param_named random_fractions float4 0.3 0.7 0 0

param_named depth_modulator float4 0.6 0 0 0

// this one can be fixed
param_named heatBiasScale float4 0.0 1.0 0 0
}

// INPUT (from scene, where entities has "Fury/HeatVision/Caster" material for heat emanation)
texture_unit
{
tex_coord_set 0
filtering linear linear none
tex_address_mode clamp
}

// Noise map
texture_unit
{
texture HeatNoise.tga
tex_coord_set 0
}

// heat conversion texture
texture_unit
{
texture HeatLookup.tga
tex_coord_set 0
filtering point point none
}
}
}

}


///////////////////////////////////
// PASS 2
// BLUR PASS
///////////////////////////////////

vertex_program Fury/HeatVision/Blur_vp cg
{
source HeatVision.cg
entry_point Blur_vp
profiles vs_1_1 arbvp1

default_params
{
param_named_auto flipping render_target_flipping
}
}

fragment_program Fury/HeatVision/Blur_fp cg
{
source HeatVision.cg
entry_point Blur_fp
profiles ps_2_0 arbfp1
}

material Fury/HeatVision/Blur
{
technique
{
// pass 1
pass
{
cull_hardware none
cull_software none
depth_func always_pass

vertex_program_ref Fury/HeatVision/Blur_vp
{
}

fragment_program_ref Fury/HeatVision/Blur_fp
{
param_named blurAmount float4 0.5 0 0 0
}

// INPUT (from previous)
texture_unit
{
texture Input
tex_coord_set 0
filtering linear linear none
tex_address_mode clamp
}
}
}
}
(Offline)
 
Ответить с цитированием
Старый 07.02.2009, 00:20   #18
ABTOMAT
Ференька
 
Аватар для ABTOMAT
 
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений
(для 15,675 пользователей)
Ответ: Как сделать инфракрасный фильтр?

Заветное "vs_1_1" тебе ни о чём не говорит?
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**

* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена

(Offline)
 
Ответить с цитированием
Старый 07.02.2009, 00:25   #19
Sfonsper
ПроЭктировщик
 
Регистрация: 01.02.2009
Адрес: Москва
Сообщений: 112
Написано 10 полезных сообщений
(для 33 пользователей)
Ответ: Как сделать инфракрасный фильтр?

А что это "vs_1_1" ?
(Offline)
 
Ответить с цитированием
Старый 07.02.2009, 00:26   #20
Sfonsper
ПроЭктировщик
 
Регистрация: 01.02.2009
Адрес: Москва
Сообщений: 112
Написано 10 полезных сообщений
(для 33 пользователей)
Ответ: Как сделать инфракрасный фильтр?

Я не понимаю с++
(Offline)
 
Ответить с цитированием
Старый 07.02.2009, 00:45   #21
jimon
 
Сообщений: n/a
Ответ: Как сделать инфракрасный фильтр?

Sfonsper
это шейдер
 
Ответить с цитированием
Старый 07.02.2009, 00:47   #22
SBJoker
Злобный Админ
 
Аватар для SBJoker
 
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений
(для 9,330 пользователей)
Ответ: Как сделать инфракрасный фильтр?

Ну по событию, например включили тепловизор, мв у всех объектов меняем текстуры нормальные на такие с разводами и градациях цвета от тёмно зелёного с желтому оранжевому и красному. в зависимости от того что нам надо показать более тёплым..текстурки наложить как сферикал мап... объектам полную яркость чтоб освешение недействовало.. вот и всё..

Можно щейдером каким нить... в любом случае это фэйк будет.. и в любом случае тёплые объекты игра должна знать чтоб их так красить..само посебе оно таким нестанет.
__________________
(Offline)
 
Ответить с цитированием
Старый 07.02.2009, 00:52   #23
Sfonsper
ПроЭктировщик
 
Регистрация: 01.02.2009
Адрес: Москва
Сообщений: 112
Написано 10 полезных сообщений
(для 33 пользователей)
Ответ: Как сделать инфракрасный фильтр?

Но как тогда шейдеры в блитзе применять (исходник пожалуйста)
(Offline)
 
Ответить с цитированием
Старый 07.02.2009, 00:55   #24
Taugeshtu
scientist.alien
 
Аватар для Taugeshtu
 
Регистрация: 12.02.2007
Сообщений: 2,098
Написано 1,030 полезных сообщений
(для 2,593 пользователей)
Ответ: Как сделать инфракрасный фильтр?

vs - vertex shader
тут используются шейдеры, на blitz3d шейдеры подключить нет возможности, т.к. блитц3д, в отличае от огра, работает не с самым свежим графическим API (это то, что делает программные вызовы движка к видеокарте понятными самой видеокарте), а именно - DirectX 7.

Шейдеры в зачаточном виде появились впервые в DirectX 8, в полную силу (точнее, какими мы их знаем и какими, очевидно, оперирует приведенный тобой пример) они заиграли в DirectX 9.

Наиболее часто в наши дни используются высокоуровневые шейдерные языки, такие как HLSL и GLSL. Их различия в том, что HLSL работает совместно с графическим API DirectX, а GLSL - вместе с OpenGl.

Теперь вернемся к твоей проблеме.
Варианты выхода следующие:
1. Использовать Xors3D, он работает уже на DirectX 9, и, соответственно, позволяет использовать шейдеры
2. Использовать Xors3D совместно с BlitzMax - этим ты увеличишь скорость обработки математических операций (которые, несомненно, встретятся у тебя в проекте) и получишь больше возможностей абстрагирования вместе с ООП. Такой переезд приведет архитектуру твоего проекта к более С++-подобному виду, и различные "переводы" всяческих "фишечек" для огра облегчится, если ты, конечно, не поленишься переписать архитектуру проекта.
3. Использовать другие текстуры.
Я бы посоветовал делать так: самые нижние 3 слоя отдать для "тепловидения", оставшиеся 5 - на диффуз и все остальное по твоему усмотрению.
Тепловизионные текстуры:
нижний слой - фон, типа статичная температура
средний - чуть "теплее", опять же, не по всему объекту, а крупными пятнами, при "разогреве" объекта (если ты собираешься его реализовывать) его яркость можно будет увеличивать (увеличивать прозрачность слоя)
самый верхний из тепловизионных - "горячее пятно". Тепловизионная картинка в центре объекта показывает бОльшую температуру. Беда в том, что если просто наложить на объект такое пятно, то при движении объекта или камеры мы не увидим того, что пятно остается в центре. Для этого и нужно делать это пятно отдельным слоем.
При движении игрока его нужно будет двигать, обеспечивая таким образом нужный эффект. Возможно, более рационально будет применять Environment mapping, тут тебе знатоки .b3d-формата подскажут.
__________________
Public service announcement: вы можете заблокировать отображение сообщений определённого пользователя, добавив его ник в список игнорируемых.
Tau lab.
We LOVE you. We MADE you.
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Taugeshtu за это полезное сообщение:
avel (08.02.2009), impersonalis (07.02.2009)
Старый 07.02.2009, 01:55   #25
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: Как сделать инфракрасный фильтр?

Сообщение от ABTOMAT Посмотреть сообщение
Хм, а я и не знал, что цифровики "понимают" инфракрасную часть спектра Голубоватое мерчание лампочки на пульте для меня стало неожиданностью
на bash-е было)
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 12.02.2009, 13:45   #26
IGR
Blitz's Shame !!
 
Регистрация: 31.03.2007
Сообщений: 3,639
Написано 832 полезных сообщений
(для 2,013 пользователей)
Ответ: Как сделать инфракрасный фильтр?

Вот эффекты камеры, в т.ч. и "инфракрасный фильтр" !!

PS1: в виндов моде некоторые эффекты неработают у меня !!
PS2: размер вложения 666.6 !!
Вложения
Тип файла: zip CAMERA__EFFECTS.zip (666.6 Кб, 406 просмотров)
(Offline)
 
Ответить с цитированием
Старый 12.02.2009, 13:59   #27
ABTOMAT
Ференька
 
Аватар для ABTOMAT
 
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений
(для 15,675 пользователей)
Ответ: Как сделать инфракрасный фильтр?

Сообщение от impersonalis Посмотреть сообщение
на bash-е было)
Баш не читаем-с

в виндов моде некоторые эффекты неработают у меня !!
"неработают" потому что используется коррекция гаммы, которая в оконном режиме не работает в принципе.

И опять же там используются разные текстуры для ИК, от которых на ДХ7 никуда не уедешь.
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**

* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена


Последний раз редактировалось ABTOMAT, 12.02.2009 в 14:08.
(Offline)
 
Ответить с цитированием
Старый 12.02.2009, 18:50   #28
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Как сделать инфракрасный фильтр?

Кроме как шейдером уже сказали.
Шейдером я бы делал доп текстуры, содержащие данные о тепле (простая чёрно белая картинка), для более детального отображения, записал бы в крастный канал собственное тепло, а в зелёный отражаемость, которая будет влиять от источника свера и вектора отражения, а в синий степень приёма, которую как-то придётся из шейдера сохранять, идей у меня нету, но как вы знаете нагревание поверхностей не мгновенно - и этот фактор ОЧЕНЬ важен в динамичной сцене, под инфра крастном излучении.
Далее реализовал бы раздражители на нагревание, к примеру движение объекта, сопровождается нагреванием, но реализовать этот "раздражитель" весьма геморно, и подрузумевает под собой использование дополнительного рендеринга, с записью вектора изменения позиции пикселя в мировых координатах относительно камерной матрицы.
Второй раздражитель - простой свет, он учитывает как уже говорил отражаемость поверхности.
Далее дльшего реализма, что немало украсит эффект - это динамичный Radiosity - но эта технология на столь сложна, что я вообще не рекомендую и задумываться насчёт этого. Хотя ведь тепло передаётся по воздуху, поэтому в этом случае модифицированный Radiosity - очень был бы крут.
(Offline)
 
Ответить с цитированием
Старый 12.02.2009, 19:03   #29
Sfonsper
ПроЭктировщик
 
Регистрация: 01.02.2009
Адрес: Москва
Сообщений: 112
Написано 10 полезных сообщений
(для 33 пользователей)
Ответ: Как сделать инфракрасный фильтр?

Спасибо.
Буду перестраивать под свою игру.
Это будет не легко делать два разных lightmap.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
DirectX фильтр Текстурны Horror C++ 7 20.09.2009 21:11
Как сделать Kren Основной форум 22 08.04.2009 09:02
Как сделать? vadim2 2D-программирование 11 10.01.2008 16:56
Как сделать? mobilla Основной форум 4 05.10.2007 19:15
Есть ли такой фильтр в 3DS Max? Round 3D Моделирование 5 26.01.2007 00:05


Часовой пояс GMT +4, время: 11:55.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com