![]() |
Как сделать инфракрасный фильтр?
Кто нибудь знает как это сделать ?
|
Ответ: Как сделать инфракрасный фильтр?
Я не занимаюсь игроделаньем, но что значит инфракрасный фильтр?
|
Ответ: Как сделать инфракрасный фильтр?
Ну это фильтр пропускающий электромагнитное излучение с длиной волны больше чему красного цвета... вопщем то в повседневной жизни это тепловое излучение.
|
Re: Как сделать инфракрасный фильтр?
|
Ответ: Как сделать инфракрасный фильтр?
SBJoker, это я знаю, но причём здесь "Программирование игр для компьютеров > Blitz3D > 3d программирование"?
|
Ответ: Как сделать инфракрасный фильтр?
Наверно товарищ хочет сделать в игре "тепловизор".
|
Ответ: Как сделать инфракрасный фильтр?
Тогда полагаю, что http://focused.ru/1151/ ему не поможет...
|
Ответ: Как сделать инфракрасный фильтр?
Хм, а я и не знал, что цифровики "понимают" инфракрасную часть спектра :) Голубоватое мерчание лампочки на пульте для меня стало неожиданностью :)
|
Ответ: Как сделать инфракрасный фильтр?
Но кто нибудь знает как сделать инфракрасный фильтр в Blitz3d ?
|
Re: Как сделать инфракрасный фильтр?
парентишь к камере полупрозрачный красный куб...
|
Ответ: Как сделать инфракрасный фильтр?
Зойчем куб? обычного плейна вполне хватит!
Но по-хорошему я бы с фаст имажом сделал так: отрендерил, скопировал в имеж, наложил его на екран с Колором светло-зелёным, сверху ещё такой же как Аддитив и сверху ещё телевизионные полоски со смешиванием мультипли ну можно ещё тени по краям тем же блендом. |
Ответ: Как сделать инфракрасный фильтр?
Цитата:
|
Ответ: Как сделать инфракрасный фильтр?
Вот так должно выглядеть инфракрасное изображение.
http://www.sibud.com.ua/uploads/asse...l_infrared.bmp или http://tutorials.psdschool.ru/wp-con...t-vision-4.gif Только как это написать в блитз3д. |
Ответ: Как сделать инфракрасный фильтр?
Ну по идее игра должна знать какие объекты тёплые а какие нет...да и ищё насколько тёплые и где..
Решается по хорошему доп. текстурами каждому объекту, фуллбрайтом, и игрой со светом. |
Ответ: Как сделать инфракрасный фильтр?
А подробнее о фуллбрайтом и доп текстурами.
|
Ответ: Как сделать инфракрасный фильтр?
в демках 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; } |
Ответ: Как сделать инфракрасный фильтр?
И еще материал
/////////////////////////////////// // 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 } } } } |
Ответ: Как сделать инфракрасный фильтр?
Заветное "vs_1_1" тебе ни о чём не говорит?
|
Ответ: Как сделать инфракрасный фильтр?
А что это "vs_1_1" ?
|
Ответ: Как сделать инфракрасный фильтр?
Я не понимаю с++
|
Ответ: Как сделать инфракрасный фильтр?
Sfonsper
это шейдер |
Ответ: Как сделать инфракрасный фильтр?
Ну по событию, например включили тепловизор, мв у всех объектов меняем текстуры нормальные на такие с разводами и градациях цвета от тёмно зелёного с желтому оранжевому и красному. в зависимости от того что нам надо показать более тёплым..текстурки наложить как сферикал мап... объектам полную яркость чтоб освешение недействовало.. вот и всё..
Можно щейдером каким нить... в любом случае это фэйк будет.. и в любом случае тёплые объекты игра должна знать чтоб их так красить..само посебе оно таким нестанет. |
Ответ: Как сделать инфракрасный фильтр?
Но как тогда шейдеры в блитзе применять (исходник пожалуйста)
|
Ответ: Как сделать инфракрасный фильтр?
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-формата подскажут. |
Ответ: Как сделать инфракрасный фильтр?
Цитата:
|
Ответ: Как сделать инфракрасный фильтр?
Вложений: 1
Вот эффекты камеры, в т.ч. и "инфракрасный фильтр" !!
PS1: в виндов моде некоторые эффекты неработают у меня !! |
Ответ: Как сделать инфракрасный фильтр?
Цитата:
Цитата:
И опять же там используются разные текстуры для ИК, от которых на ДХ7 никуда не уедешь. |
Ответ: Как сделать инфракрасный фильтр?
Кроме как шейдером уже сказали.
Шейдером я бы делал доп текстуры, содержащие данные о тепле (простая чёрно белая картинка), для более детального отображения, записал бы в крастный канал собственное тепло, а в зелёный отражаемость, которая будет влиять от источника свера и вектора отражения, а в синий степень приёма, которую как-то придётся из шейдера сохранять, идей у меня нету, но как вы знаете нагревание поверхностей не мгновенно - и этот фактор ОЧЕНЬ важен в динамичной сцене, под инфра крастном излучении. Далее реализовал бы раздражители на нагревание, к примеру движение объекта, сопровождается нагреванием, но реализовать этот "раздражитель" весьма геморно, и подрузумевает под собой использование дополнительного рендеринга, с записью вектора изменения позиции пикселя в мировых координатах относительно камерной матрицы. Второй раздражитель - простой свет, он учитывает как уже говорил отражаемость поверхности. Далее дльшего реализма, что немало украсит эффект - это динамичный Radiosity - но эта технология на столь сложна, что я вообще не рекомендую и задумываться насчёт этого. Хотя ведь тепло передаётся по воздуху, поэтому в этом случае модифицированный Radiosity - очень был бы крут. |
Ответ: Как сделать инфракрасный фильтр?
Спасибо.
Буду перестраивать под свою игру. Это будет не легко делать два разных lightmap. |
Часовой пояс GMT +4, время: 05:46. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot