Commit 6bdd23cb authored by Byurrrer's avatar Byurrrer

поправил освещение в шейдерах, поправил баги при копировании игровых объектов

parent c068534b
......@@ -47,7 +47,9 @@ static const half2 g_vTexUVcenter = half2(0.5, 0.5);
//! минимально допустимое значение отражательной способности материала для принятия ambient цвета
#define F0_MIN_4_DEST_AMBIENT 0.25
#define F0_MIN_4_DEST_AMBIENT 0.025
#define F0_MAX_4_DEST_AMBIENT 0.5
//! максимальнео количество слоев
#define LAYERS_COUNT_MAX 255.0
......
......@@ -33,14 +33,16 @@ half4 main(VSO_PP IN):COLOR0
half4 vParameters = tex2D(g_sParameters,IN.vTexUV);
half4 vAmbient = tex2D(g_sAmbient,IN.vTexUV);
//vAmbient.xyz *= 2;
half fAverage = (vAmbient.x + vAmbient.y + vAmbient.z)/3.0;
/* расчет фонового цвета
1) интерполяция от чернобелого до цветного, на основании затенения, то есть чем больше тень тем меньше там фонового цвета
*/
half3 vAmbientColor = lerp((vAmbient.x + vAmbient.y + vAmbient.z)/3.0, vAmbient.xyz, saturate(vAmbient.w+0.5));
half3 vAmbientColor = lerp(fAverage, vAmbient.xyz, saturate(vAmbient.w+0.5));
/* 2) интерполяция приема цвета материалом, чем больше отражательная способность (f0) тем меньше примет цвета материал*/
vAmbientColor = lerp(vAmbientColor.xyz, 1.0, clamp(vParameters.y, F0_MIN_4_DEST_AMBIENT, vParameters.y));
//vAmbientColor = lerp(vAmbientColor.xyz, fAverage, clamp(vParameters.y, F0_MIN_4_DEST_AMBIENT, F0_MAX_4_DEST_AMBIENT));
half fSpecular = tex2D(g_sSpecDiff,IN.vTexUV).r;
half fAdaptedLum = tex2D(g_sAdaptedLum, g_vTexUVcenter);
......
......@@ -131,7 +131,7 @@ PSO_Lbuffer main(VSO_ResPos IN)
fDiffuse = lerp(1.0, fDiffuse, g_vLightPowerDistShadow.z);
OUT.vAmdient.xyz = g_vLightColor.xyz * g_vLightColor.xyz * g_vLightPowerDistShadow.x * fAttenuation;
OUT.vAmdient.xyz = g_vLightColor.xyz * fAttenuation;
OUT.vAmdient.w = fDiffuse * fMdiffuse * vParam.w * g_vLightPowerDistShadow.x * 2.0 * fAttenuation;
OUT.vSpecular = fSpecular * fAbsDiffuse * fAttenuation * g_vLightPowerDistShadow.x;
......
......@@ -12,7 +12,7 @@ CLevel::CLevel()
m_sAmbientSounds = "";
m_sWeather = "";
m_szName[0] = 0;
m_sTitle = "";
m_sLocalName = "";
loadParticles();
m_pWeather = new CWeather();
......@@ -30,7 +30,7 @@ CLevel::~CLevel()
void CLevel::clear()
{
m_szName[0] = 0;
m_sTitle = "";
m_sLocalName = "";
m_sWeather = "";
m_sAmbientSounds = "";
......@@ -64,8 +64,8 @@ void CLevel::load(const char *szName, bool isGame)
ISXConfig *pConfig = Core_OpConfig(szFullPath);
if (pConfig->keyExists("level", "title"))
m_sTitle = pConfig->getKey("level", "title");
if (pConfig->keyExists("level", "local_name"))
m_sLocalName = pConfig->getKey("level", "local_name");
if (pConfig->keyExists("level", "geometry"))
{
......@@ -246,7 +246,7 @@ void CLevel::save(const char *szName)
file = fopen(szPathLevel, "w");
fprintf(file, "%s", "[level]\n");
fprintf(file, "title = %s\n", m_sTitle.c_str());
fprintf(file, "local_name = %s\n", m_sLocalName.c_str());
if (SGeom_GetCountModels() > 0)
{
......
......@@ -102,7 +102,7 @@ protected:
//! текущее имя уровня
char m_szName[OBJECT_NAME_MAX_LEN];
String m_sTitle;
String m_sLocalName;
String m_sAmbientSounds;
String m_sWeather;
......
......@@ -401,6 +401,14 @@ void level_editor::GameCopy()
return;
ID idCopy = SXGame_EntClone(level_editor::idCopy);
if (idCopy < 0)
{
level_editor::useCopyData = false;
level_editor::idCopy = -1;
return;
}
CBaseEntity *pEntity = SXGame_EntGet(idCopy);
pEntity->setPos(level_editor::vCopyPos);
......
......@@ -2247,7 +2247,7 @@ void level_editor::LevelEditorUpdate(DWORD timeDelta)
SGCore_GetDXDevice()->SetRenderState(D3DRS_ZWRITEENABLE, D3DZB_TRUE);
}
if (!level_editor::useCopyData && SSInput_GetKeyState(SIK_LCONTROL) && SSInput_GetKeyState(SIK_C))
if (!level_editor::useCopyData && SSInput_GetKeyState(SIK_LCONTROL) && SSInput_GetKeyState(SIK_C) && level_editor::pRenderWindow->getFocus())
{
int iSelected = level_editor::pListBoxList->getSel();
if (iSelected < 0)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment