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

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

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

Xors3D Графический движок с поддержкой DirectX9

Ответ
 
Опции темы
Старый 03.02.2013, 12:16   #16
tirarex
Бывалый
 
Аватар для tirarex
 
Регистрация: 23.11.2011
Сообщений: 863
Написано 334 полезных сообщений
(для 866 пользователей)
Ответ: много шейдерного света

Сообщение от Phyton Посмотреть сообщение
Вот шейдер воды http://rghost.ru/43502204 под Xors3d, Юзай!
немогу понять : ковыряю Bump Lightmas6

решил добавить еще 1 светильник

сам светилькник

;====================================
; LightSphere
Local tLightSpr91=xCreateSphere(1)
xEntityFX tLightSpr91,1
xPositionEntity tLightSpr91,130,-35,40
xEntityColor tLightSpr91,255,255,255
xScaleEntity tLightSpr91,2,2,2
xEntityCastShadows tLightSpr91,light0,0
xEntityReceiveShadows tLightSpr91,light0,0
xEntityCastShadows tLightSpr91,light01,0
xEntityReceiveShadows tLightSpr91,light01,0
;====================================

устонавливаю на модельку

xSetEffectVector tModel, "LightClr91",1.5,1.5,1.5
xSetEffectFloat tModel, "LightInt91",1
xSetEffectFloat tModel, "RngLight91",650
xSetEffectFloat tModel, "DotLight91",2

в цикле

xSetEffectVector tModel, "PosLight91",xEntityX(tLightSpr91),xEntityY(tLight Spr91),xEntityZ(tLightSpr91)

только когда в шейдере светильник прописал он заработал
но так не удобно

есть ли другой способ создания света ибо у меня колличество светильников динамично
(Offline)
 
Ответить с цитированием
Старый 03.02.2013, 12:38   #17
FREE MAN
Разработчик
 
Регистрация: 20.02.2010
Сообщений: 397
Написано 173 полезных сообщений
(для 565 пользователей)
Ответ: много шейдерного света

Есть
(Offline)
 
Ответить с цитированием
Старый 03.02.2013, 12:46   #18
tirarex
Бывалый
 
Аватар для tirarex
 
Регистрация: 23.11.2011
Сообщений: 863
Написано 334 полезных сообщений
(для 866 пользователей)
Ответ: много шейдерного света

и какой же
(Offline)
 
Ответить с цитированием
Старый 03.02.2013, 13:44   #19
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: много шейдерного света

объяви в шейдере массив позиций лайтов.
сделай по ним цикл.
(Offline)
 
Ответить с цитированием
Старый 03.02.2013, 14:00   #20
tirarex
Бывалый
 
Аватар для tirarex
 
Регистрация: 23.11.2011
Сообщений: 863
Написано 334 полезных сообщений
(для 866 пользователей)
Ответ: много шейдерного света

Я только учусь шейдерам и пока плохо понимаю о чём ты говориш

можно пример этого массива и использывание его в цикле
(Offline)
 
Ответить с цитированием
Старый 03.02.2013, 14:32   #21
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: много шейдерного света

float3 lightPos[100];
-----
for(int i=0;i<100;i++)
{
обрабатываешь lightPos[i]
}
передавать массивы векторов отдельной командой в ксорсе можно вроде
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
tirarex (03.02.2013)
Старый 03.02.2013, 14:43   #22
tirarex
Бывалый
 
Аватар для tirarex
 
Регистрация: 23.11.2011
Сообщений: 863
Написано 334 полезных сообщений
(для 866 пользователей)
Ответ: много шейдерного света

тоесть так :
шейдер


float3 PosLight[100];
float RngLight[100];
float RDotLight[100];

const float3 LightClr[100]; // Light Color
const float LightInt[100]; // Light Intensity

цикл

for(int i=0;i<100;i++)
{



RngLight[i] = pow(saturate(1.0f-(distance(IN.pWorld,PosLight[i])/RngLight[i])),DotLight[i]);


cN = normalize(tex2D(TexNormal,IN.TexCoords)*2.0f-1.0f);

PosLight[i] = normalize(PosLight[i]-IN.pWorld);
nLight[i] = float3(dot(PosLight[i],IN.Tangent),
dot(PosLight[i],IN.Binormal),dot(PosLight[i],IN.Normal));

nLight[i] = pow(max(dot(cN,nLight[i]),0.0f),0.8f);

Color += cD.rgb*nLight[i]*LightClr[i]*LightInt[i]*RngLight[i];





}



только вот на счёт кода не понял
(Offline)
 
Ответить с цитированием
Старый 03.02.2013, 15:06   #23
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: много шейдерного света

типа того, только не надо сто раз то текстуру нормалей читать.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
tirarex (03.02.2013)
Старый 03.02.2013, 15:12   #24
tirarex
Бывалый
 
Аватар для tirarex
 
Регистрация: 23.11.2011
Сообщений: 863
Написано 334 полезных сообщений
(для 866 пользователей)
Ответ: много шейдерного света

Сообщение от Mr_F_ Посмотреть сообщение
типа того, только не надо сто раз то текстуру нормалей читать.

тогда как сделать
и еще

как создать светильник в коде чтоб он прописался в этот массив , как настроить светильник в массиве , и как обновить его

всё это в коде
(Offline)
 
Ответить с цитированием
Старый 03.02.2013, 15:15   #25
FREE MAN
Разработчик
 
Регистрация: 20.02.2010
Сообщений: 397
Написано 173 полезных сообщений
(для 565 пользователей)
Ответ: много шейдерного света

Сообщение от tirarex Посмотреть сообщение
тогда как сделать
и еще

как создать светильник в коде чтоб он прописался в этот массив , как настроить светильник в массиве , и как обновить его

всё это в коде
Я же тебе скидывал пример NM_spotlight погляди его.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
tirarex (03.02.2013)
Старый 03.02.2013, 15:16   #26
tirarex
Бывалый
 
Аватар для tirarex
 
Регистрация: 23.11.2011
Сообщений: 863
Написано 334 полезных сообщений
(для 866 пользователей)
Ответ: много шейдерного света

посмотрю

кстати вот попробывал переписать шейдер
посмотрите

//##########################################
// mSL
//
// Bump Light
// with 3 Light Source Types
//
// Open Source, for Free Using
// Author: MoKa (Maxim Miheyev)
// Mail: [email protected]
// Visit: RubuX.net
//##########################################


//################## Varriables ##################
const float4x4 MatWorldViewProj;
const float4x4 MatWorld;

texture diffuseTexture : TEXTURE_0;
texture normalTexture : TEXTURE_1;
texture normalTexture_2 : TEXTURE_2;
// Light
const float3 AmbientClr; // Ambient Color
const float3 LightClr; // Light Color
const half LightInt; // Light Intensity

// Positions
float3 PosLight; // Light Position
float RngLight; // Light Range
float DotLight; // Light Soft


float3 PosLight[100];
float RngLight[100];
float RDotLight[100];

const float3 LightClr[100]; // Light Color
const float LightInt[100]; // Light Intensity



//Spot Light
const float3 LightClrspot; // Light Color
const half LightIntspot; // Light Intensity
// Positions
float3 PosLightspot; // Light Position
float RngLightspot; // Light Range
float DotLightspot; // Light Soft
float3 Lightdir; // world space direction
float LightspotInnerCone; // spot light inner cone (theta) angle
float LightspotOuterCone; // spot light outer cone (phi) angle



const float3 LightClrDirection; // Light Color
const half LightIntDirection; // Light Intensity

// Positions
float3 PosLightDirection; // Light Position
float RngLightDirection; // Light Range
float DotLightDirection; // Light Soft
// Other
static float3 Color;
static float4 cD;
static float3 cN;

static float3 nLight;

static float3 nLightDirection;



//################## Textures ##################
//const texture tDiffuse; // Diffuse Texture
sampler TexDiffuse=sampler_state {
Texture = <diffuseTexture>;
ADDRESSU = WRAP;
ADDRESSV = WRAP;
ADDRESSW = WRAP;
MAGFILTER = LINEAR;
MINFILTER = LINEAR;
MIPFILTER = LINEAR;
};

//const texture tNormal; // NormalMap Texture
sampler TexNormal=sampler_state {
Texture = <normalTexture>;
ADDRESSU = WRAP;
ADDRESSV = WRAP;
ADDRESSW = WRAP;
MAGFILTER = LINEAR;
MINFILTER = LINEAR;
MIPFILTER = LINEAR;
};
//const texture tNormal2; // NormalMap Texture2
sampler TexNormal2=sampler_state {
Texture = <normalTexture_2>;
ADDRESSU = WRAP;
ADDRESSV = WRAP;
ADDRESSW = WRAP;
MAGFILTER = LINEAR;
MINFILTER = LINEAR;
MIPFILTER = LINEAR;
};

//################## Input VS ##################
struct sv_TBN_TC {
float4 Position : POSITION0;
float3 Normal : NORMAL;
float3 Tangent : TANGENT;
float3 Binormal : BINORMAL;
float2 TexCoords : TEXCOORD0;
};
//################## Output VS ##################
struct sp_PW_TBN_TC {
float4 Position : POSITION0;
float4 pWorld : TEXCOORD0;
float2 TexCoords : TEXCOORD1;
float3 Normal : TEXCOORD2;
float3 Tangent : TEXCOORD3;
float3 Binormal : TEXCOORD4;
};


//################## VS ##################
void vs_PW_TBN_TC( in sv_TBN_TC IN, out sp_PW_TBN_TC OUT ) {
OUT.Position = mul(IN.Position,MatWorldViewProj);
OUT.pWorld = mul(IN.Position,MatWorld);
OUT.Tangent = normalize(mul(IN.Tangent,MatWorld));
OUT.Binormal = normalize(mul(IN.Binormal,MatWorld));
OUT.Normal = normalize(mul(IN.Normal,MatWorld));
OUT.TexCoords = IN.TexCoords;
}

//################## PS ##################
float4 psDirectional( in sp_PW_TBN_TC IN ) : COLOR {
cD = tex2D(TexDiffuse,IN.TexCoords);
cN = normalize(tex2D(TexNormal,IN.TexCoords)*2.0f-1.0f);

PosLight = normalize(PosLight);
nLight = float3(dot(PosLight,IN.Tangent),
dot(PosLight,IN.Binormal),dot(PosLight,IN.Normal)) ;

nLight = pow(max(dot(cN,nLight),0.0f),0.8f);

Color = cD.rgb*AmbientClr+(cD*nLight*LightClr*LightInt);

return float4(Color,cD.a);
}
float4 psPoint( in sp_PW_TBN_TC IN ) : COLOR {
cD = tex2D(TexDiffuse,IN.TexCoords);
cN = normalize(tex2D(TexNormal,IN.TexCoords)*2.0f-1.0f);

PosLight = normalize(PosLight-IN.pWorld);
nLight = float3(dot(PosLight,IN.Tangent),
dot(PosLight,IN.Binormal),dot(PosLight,IN.Normal)) ;

nLight = pow(max(dot(cN,nLight),0.0f),0.8f);

Color = cD.rgb*AmbientClr+(cD*nLight*LightClr*LightInt);

return float4(Color,cD.a);
}
float4 psPointDistance( in sp_PW_TBN_TC IN ) : COLOR {
cD = tex2D(TexDiffuse,IN.TexCoords);
Color = cD.rgb*AmbientClr;










for(int i=0;i<100;i++)
{



RngLight[i] = pow(saturate(1.0f-(distance(IN.pWorld,PosLight[i])/RngLight[i])),DotLight[i]);


cN = normalize(tex2D(TexNormal,IN.TexCoords)*2.0f-1.0f);

PosLight[i] = normalize(PosLight[i]-IN.pWorld);
nLight[i] = float3(dot(PosLight[i],IN.Tangent),
dot(PosLight[i],IN.Binormal),dot(PosLight[i],IN.Normal));

nLight[i] = pow(max(dot(cN,nLight[i]),0.0f),0.8f);

Color += cD.rgb*nLight[i]*LightClr[i]*LightInt[i]*RngLight[i];





}
























//LIGHT_DIRECTION
PosLightDirection = normalize(PosLightDirection);
nLightDirection = float3(dot(PosLightDirection,IN.Tangent),
dot(PosLightDirection,IN.Binormal),dot(PosLightDir ection,IN.Normal));

nLightDirection = pow(max(dot(cN,nLightDirection),0.0f),0.8f);

Color += cD.rgb*cD*nLightDirection*LightClrDirection*LightI ntDirection;

return float4(Color,cD.a);
}

//################## Technique ##################
technique Directional {
pass p0 {
AlphaBlendEnable= false;
vertexshader = compile vs_3_0 vs_PW_TBN_TC();
pixelshader = compile ps_3_0 psDirectional();
}
}
technique Point {
pass p0 {
AlphaBlendEnable= false;
vertexshader = compile vs_3_0 vs_PW_TBN_TC();
pixelshader = compile ps_3_0 psPoint();
}
}
technique PointDistance {
pass p0 {
AlphaBlendEnable= false;
// AlphaTestEnable = 1;
//AlphaRef = 127;
//AlphaFunc = 5;
//AlphaBlendEnable = 0;
//CullMode = NONE;
vertexshader = compile vs_3_0 vs_PW_TBN_TC();
pixelshader = compile ps_3_0 psPointDistance();
}
}
(Offline)
 
Ответить с цитированием
Старый 03.02.2013, 15:57   #27
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: много шейдерного света

тогда как сделать
ну блин, ПЕРЕД циклом один раз её прочитай
(Offline)
 
Ответить с цитированием
Старый 03.02.2013, 16:00   #28
tirarex
Бывалый
 
Аватар для tirarex
 
Регистрация: 23.11.2011
Сообщений: 863
Написано 334 полезных сообщений
(для 866 пользователей)
Ответ: много шейдерного света

cN = normalize(tex2D(TexNormal,IN.TexCoords)*2.0f-1.0f);

for(int i=0;i<100;i++)
{
RngLight[i] = pow(saturate(1.0f-(distance(IN.pWorld,PosLight[i])/RngLight[i])),DotLight[i]);
PosLight[i] = normalize(PosLight[i]-IN.pWorld);
nLight[i] = float3(dot(PosLight[i],IN.Tangent),
dot(PosLight[i],IN.Binormal),dot(PosLight[i],IN.Normal));
nLight[i] = pow(max(dot(cN,nLight[i]),0.0f),0.8f);
Color += cD.rgb*nLight[i]*LightClr[i]*LightInt[i]*RngLight[i];
}

так ??

сори за нубство , просто никогда раньше с шейдерами не сталкивался и вот только начел учится
(Offline)
 
Ответить с цитированием
Старый 03.02.2013, 17:52   #29
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: много шейдерного света

ну это же логика, она что в шейдерах, что в блице одинаковая.
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Mr_F_ за это полезное сообщение:
ANIK123 (03.02.2013), Colossus (10.02.2013)
Старый 03.02.2013, 19:53   #30
tirarex
Бывалый
 
Аватар для tirarex
 
Регистрация: 23.11.2011
Сообщений: 863
Написано 334 полезных сообщений
(для 866 пользователей)
Ответ: много шейдерного света

в блитзе по проще
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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


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


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