![]() |
Ответ: много шейдерного света
Цитата:
решил добавить еще 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) только когда в шейдере светильник прописал он заработал но так не удобно есть ли другой способ создания света ибо у меня колличество светильников динамично |
Ответ: много шейдерного света
Есть
|
Ответ: много шейдерного света
и какой же
|
Ответ: много шейдерного света
объяви в шейдере массив позиций лайтов.
сделай по ним цикл. |
Ответ: много шейдерного света
Я только учусь шейдерам и пока плохо понимаю о чём ты говориш
можно пример этого массива и использывание его в цикле |
Ответ: много шейдерного света
float3 lightPos[100];
----- for(int i=0;i<100;i++) { обрабатываешь lightPos[i] } передавать массивы векторов отдельной командой в ксорсе можно вроде |
Ответ: много шейдерного света
тоесть так :
шейдер 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]; } только вот на счёт кода не понял |
Ответ: много шейдерного света
типа того, только не надо сто раз то текстуру нормалей читать.
|
Ответ: много шейдерного света
Цитата:
тогда как сделать и еще как создать светильник в коде чтоб он прописался в этот массив , как настроить светильник в массиве , и как обновить его всё это в коде |
Ответ: много шейдерного света
Цитата:
|
Ответ: много шейдерного света
посмотрю
кстати вот попробывал переписать шейдер посмотрите |
Ответ: много шейдерного света
Цитата:
|
Ответ: много шейдерного света
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]; } так ?? сори за нубство , просто никогда раньше с шейдерами не сталкивался и вот только начел учится |
Ответ: много шейдерного света
ну это же логика, она что в шейдерах, что в блице одинаковая.
|
Ответ: много шейдерного света
в блитзе по проще
|
Часовой пояс GMT +4, время: 15:28. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot