Commit aa27b08e authored by Byurrrer's avatar Byurrrer

поправил баги в редакторах, доделал погоду, еще по мелочам

parent 1e310cdd
......@@ -43,5 +43,5 @@ half4 main(vs_out_pp IN):COLOR0
}
result /= half(NumSamples)*(LensFlareParam.z);
return half4(result,0.0);
return half4(result+0.1,0.0);
}
\ No newline at end of file
......@@ -10,7 +10,6 @@ sampler2D DepthSampler:register(s0);
sampler2D SunSampler:register(s2);
sampler2D BaseSampler:register(s3);
half4 Color;
half4 LightPos;
half2 SizeMap;
half2 SizeTexSun;
......@@ -34,15 +33,15 @@ half4 main(vs_out_pp IN) : COLOR0
half2 fSunTexUV = ((((ntc - SunPosProj)*SizeMap.x) + SizeTexSun*0.5f) / SizeTexSun);
half4 texColor = tex2D(SunSampler, fSunTexUV);
//clip(texColor.a - 0.001f);
//screen.a *= 1.f - depth;
texColor.rgb *= LightColor.rgb;
texColor.rgb = lerp(texColor.rgb,Color.rgb,Color.a);
texColor.rgb = lerp(texColor.rgb,screen.rgb,1.f-texColor.a);
colorsun.rgb = lerp(screen.rgb,texColor.rgb,1.f-screen.a);
texColor.rgb *= saturate(LightColor.rgb*2);
texColor.rgb = lerp(texColor.rgb,LightColor.rgb,0.5f/*saturate(LightColor.a*2)*/);
//texColor.rgb = lerp(texColor.rgb,screen.rgb,1.f-texColor.a);
//colorsun.rgb = lerp(screen.rgb,texColor.rgb,1.f-screen.a);
colorsun.a = screen.a;
//texColor.a = screen.a;
return colorsun;
return texColor;
}
\ No newline at end of file
......@@ -96,7 +96,6 @@
<ClInclude Include="..\..\..\source\render\editor\grid.h" />
<ClInclude Include="..\..\..\source\render\gdata.h" />
<ClInclude Include="..\..\..\source\render\model_sim.h" />
<ClInclude Include="..\..\..\source\render\render_def.h" />
<ClInclude Include="..\..\..\source\render\render_func.h" />
<ClInclude Include="..\..\..\source\render\sxrender.h" />
</ItemGroup>
......
......@@ -24,9 +24,6 @@
<ClInclude Include="..\..\..\source\render\model_sim.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\source\render\render_def.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\source\render\render_func.h">
<Filter>Header Files</Filter>
</ClInclude>
......
#include "camera_update.h"
//обработка вводы информации с клавиатуры
void CameraUpdate::UpdateInputKeyBoard(DWORD timeDelta)
{
//обработка ходьбы
if(SSInput_GetKeyState(SIK_W))
GData::ObjCamera->PosFrontBack(
GData::CamWalkParamEditor.x *
(SSInput_GetKeyState(SIK_LSHIFT) ? GData::CamWalkParamEditor.y : 1) *
float(timeDelta) * 0.001f
);
if(SSInput_GetKeyState(SIK_S))
GData::ObjCamera->PosFrontBack(
-GData::CamWalkParamEditor.x *
(SSInput_GetKeyState(SIK_LSHIFT) ? GData::CamWalkParamEditor.y : 1) * GData::CamWalkParamEditor.w *
float(timeDelta) * 0.001f
);
if(SSInput_GetKeyState(SIK_A))
GData::ObjCamera->PosLeftRight(
-GData::CamWalkParamEditor.x *
(SSInput_GetKeyState(SIK_LSHIFT) ? GData::CamWalkParamEditor.y : 1) * GData::CamWalkParamEditor.z *
float(timeDelta) * 0.001f
);
if(SSInput_GetKeyState(SIK_D))
GData::ObjCamera->PosLeftRight(
GData::CamWalkParamEditor.x *
(SSInput_GetKeyState(SIK_LSHIFT) ? GData::CamWalkParamEditor.y : 1) * GData::CamWalkParamEditor.z *
float(timeDelta) * 0.001f
);
}
//обработка движения мыши вправо и влево
void CameraUpdate::UpdateInputMouseRotate(DWORD timeDelta)
{
static const float * sense = GET_PCVAR_FLOAT("cl_mousesense");
int dx, dy;
SSInput_GetMouseDelta(&dx, &dy);
if(dx)
{
GData::ObjCamera->RotRightLeft(float(timeDelta) * *sense * float(dx));
//SetCursorPos(centr.x,cy);
}
if(dy)
{
GData::ObjCamera->RotUpDown(float(timeDelta) * *sense * float(dy));
//SetCursorPos(cx,centr.y);
}
}
//обработка движения мыши вверх вниз
void CameraUpdate::UpdateInputMouseUpDown(DWORD timeDelta)
{
static const float * sense = GET_PCVAR_FLOAT("cl_mousesense");
int dy;
SSInput_GetMouseDelta(NULL, &dy);
if(dy)
{
GData::ObjCamera->PosUpDown(5 * float(timeDelta) * *sense * float(-dy));
}
}
//центрирвоание курсора мыши
void CameraUpdate::CentererCursor()
{
RECT rc;
GetWindowRect(GetForegroundWindow(), &rc);
SetCursorPos((rc.right + rc.left) / 2, (rc.bottom + rc.top) / 2);
}
void CameraUpdate::UpdateEditorial(DWORD timeDelta)
{
//обработка перемещения/вращения
if(SSInput_GetKeyState(SIK_LCONTROL))
{
static bool IsFirstLBM = false;
static bool IsFirstRBM = false;
static bool IsSFirstLBM = false;
static bool IsSFirstRBM = false;
UpdateInputKeyBoard(timeDelta);
//еси нажата левая кнопка мыши то можно вращать
if(SSInput_GetKeyState(SIM_LBUTTON))
{
//если не первый раз нажата ЛКМ то совершаем действие
if(IsFirstLBM)
UpdateInputMouseRotate(timeDelta);
//иначе просто говорим что впервые и устанавливаем курсор в центр
else
IsFirstLBM = true;
CentererCursor();
}
//если нажата правая кнопка мыши то можно поднимать и опускать камеру
else if(SSInput_GetKeyState(SIM_RBUTTON))
{
if(IsFirstRBM)
UpdateInputMouseUpDown(timeDelta);
else
IsFirstRBM = true;
CentererCursor();
}
else
{
IsFirstLBM = false;
IsFirstRBM = false;
}
}
}
\ No newline at end of file
/******************************************************
Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
See the license in LICENSE
******************************************************/
/*!
\file
Заголвочный файл camera_update - пространства имен для управления навигацией
*/
/*! \defgroup managed_render_camera_update camera_update - пространство имен для управления навигацией
\ingroup managed_render
@{*/
#ifndef __CAMERA_UPDATE
#define __CAMERA_UPDATE
#include <windows.h>
#include <input/sxinput.h>
#include <managed_render/gdata.h>
//! пространство имен для управления навигацией
namespace CameraUpdate
{
//! обработка вводы информации с клавиатуры
void UpdateInputKeyBoard(DWORD timeDelta);
//! обработка движения мыши вправо и влево
void UpdateInputMouseRotate(DWORD timeDelta);
//! обработка движения мыши вверх вниз
void UpdateInputMouseUpDown(DWORD timeDelta);
//! центрирвоание курсора мыши
void CentererCursor();
//! обновление навигации режим "редактор"
void UpdateEditorial(DWORD timeDelta);
};
#endif
//!@} managed_render_camera_update
\ No newline at end of file
This diff is collapsed.
#ifndef axes_helper_h
#define axes_helper_h
inline bool line_intersect_triangle(const float3 &t1, const float3 &t2, const float3 &t3,
const float3 &l1, const float3 &l2, float3 &p)
{
float3 n = SMVector3Normalize(SMVector3Cross((t2 - t1), (t3 - t2)));
float d1 = SMVector3Dot((l1 - t1), n) / SMVector3Length(n), d2 = SMVector3Dot((l2 - t1), n) / SMVector3Length(n);
if ((d1 > 0 && d2 > 0) || (d1 < 0 && d2 < 0))
return(false);
p = l1 + (l2 - l1) * (-d1 / (d2 - d1));
if (SMVector3Dot(SMVector3Cross((t2 - t1), (p - t1)), n) <= 0.0f) return(false);
if (SMVector3Dot(SMVector3Cross((t3 - t2), (p - t2)), n) <= 0.0f) return(false);
if (SMVector3Dot(SMVector3Cross((t1 - t3), (p - t3)), n) <= 0.0f) return(false);
return(true);
}
#define AXES_HELPER_MOVE_LENGTH 1.f /*!< */
#define AXES_HELPER_MOVE_SPEED 5.f /*!< */
#define AXES_HELPER_ROTATE_LENGTH_WIDTH 1.f /*!< */
#define AXES_HELPER_ROTATE_HEIGHT 0.1f /*!< */
#define AXES_HELPER_SCALE_LENGTH 1.f /*!< */
#define AXES_HELPER_SCALE_ASIZE 0.05f /*!< */
#define AXES_HELPER_SCALE_A2SIZE 0.15f /*!< */
#define AXES_HELPER_SCALE_SPEED 1.f /*!< */
class AxesHelper
{
public:
AxesHelper();
~AxesHelper();
SX_ALIGNED_OP_MEM
enum HANDLER_TYPE
{
HT_NONE,
HT_MOVE,
HT_ROTATE,
HT_SCALE
};
void SetType(HANDLER_TYPE type);
HANDLER_TYPE GetType();
void Render();
void SetPosition(const float3 & pos);
void SetRotation(const float3 & rot);
void SetRotation(const SMQuaternion & rot);
void SetScale(const float3 & scale);
const float3 & GetPosition();
const float3 & GetRotation();
const float3 & GetScale();
const SMQuaternion & GetRotationQ();
void OnMouseMove(int x, int y);
bool m_bIsDragging;
bool m_bIsDraggingStart;
bool m_bIsDraggingStop;
private:
float3 Position;
float3 Rotation;
SMQuaternion QRotation;
float3 Scale, ScaleOld;
void DrawMove();
void DrawCylinder(float3_t lwh, DWORD color = 0xFFFFFFFF);
void DrawRotate();
void DrawScale();
void IntersectMove(const float3 & start, const float3 & dir);
void IntersectRotate(const float3 & start, const float3 & dir);
void IntersectScale(const float3 & start, const float3 & dir);
struct vert
{
float3_t pos;
DWORD color;
};
enum HANDLER_AXE
{
HA_NONE = 0x00,
HA_X = 0x01,
HA_Y = 0x02,
HA_XY = 0x03,
HA_Z = 0x04,
HA_XZ = 0x05,
HA_YZ = 0x06,
HA_XYZ = 0x07
};
HANDLER_AXE m_currentAxe;
HANDLER_TYPE m_htype;
float3 m_fStartDragPos;
SMMATRIX m_mHelperMat;
SMMATRIX m_mOldHelperMat;
SMMATRIX m_mHelperMatScale2;
float dist;
SMMATRIX m_mOldDragMat;
SMMATRIX m_mOldDragMatPos;
};
#endif
\ No newline at end of file
#include <managed_render/editor/grid.h>
AxesStatic::AxesStatic()
{
VertexBuffer = 0;
D3DVERTEXELEMENT9 DeclGrid[] =
{
{ 0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 },
{ 0, 12, D3DDECLTYPE_D3DCOLOR, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_COLOR, 0 },
D3DDECL_END()
};
GData::DXDevice->CreateVertexDeclaration(DeclGrid, &VertexDeclaration);
}
AxesStatic::~AxesStatic()
{
mem_release(VertexBuffer);
mem_release(VertexDeclaration);
}
void AxesStatic::Create(float len)
{
GData::DXDevice->CreateVertexBuffer(
3 * 2 * sizeof(Vertex),
D3DUSAGE_WRITEONLY,
0,
D3DPOOL_MANAGED,
&VertexBuffer,
0);
Vertex* vertices;
VertexBuffer->Lock(0, 0, (void**)&vertices, 0);
vertices[0].pos = float3_t(0, 0.001, 0);
vertices[0].color = D3DCOLOR_ARGB(255, 255, 0, 0);
vertices[1].pos = float3_t(len, 0.001, 0);
vertices[1].color = D3DCOLOR_ARGB(255, 255, 0, 0);
vertices[2].pos = float3_t(0, 0.001, 0);
vertices[2].color = D3DCOLOR_ARGB(255, 0, 255, 0);
vertices[3].pos = float3_t(0, len, 0);
vertices[3].color = D3DCOLOR_ARGB(255, 0, 255, 0);
vertices[4].pos = float3_t(0, 0.001, 0);
vertices[4].color = D3DCOLOR_ARGB(255, 0, 0, 255);
vertices[5].pos = float3_t(0, 0.001, len);
vertices[5].color = D3DCOLOR_ARGB(255, 0, 0, 255);
VertexBuffer->Unlock();
}
void AxesStatic::Render()
{
GData::DXDevice->SetTexture(0, 0);
//GData::DXDevice->SetRenderState(D3DRS_LIGHTING, FALSE);
SGCore_ShaderUnBind();
GData::DXDevice->SetVertexDeclaration(VertexDeclaration);
//GData::DXDevice->SetFVF(D3DFVF_XYZ | D3DFVF_DIFFUSE);
GData::DXDevice->SetStreamSource(0, VertexBuffer, 0, sizeof(Vertex));
GData::DXDevice->DrawPrimitive(D3DPT_LINELIST, 0, 3);
}
\ No newline at end of file
#ifndef __axes_static_h
#define __axes_static_h
class AxesStatic
{
struct Vertex
{
float3_t pos;
D3DCOLOR color;
};
public:
AxesStatic();
~AxesStatic();
void Create(float len);
void Render();
protected:
long PolyCount;
IDirect3DVertexBuffer9* VertexBuffer;
IDirect3DVertexDeclaration9* VertexDeclaration;
};
#endif
\ No newline at end of file
#include <managed_render/editor/grid.h>
Grid::Grid()
{
VertexBuffer = 0;
D3DVERTEXELEMENT9 DeclGrid[] =
{
{ 0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 },
{ 0, 12, D3DDECLTYPE_D3DCOLOR, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_COLOR, 0 },
D3DDECL_END()
};
GData::DXDevice->CreateVertexDeclaration(DeclGrid, &VertexDeclaration);
}
Grid::~Grid()
{
mem_release(VertexBuffer);
mem_release(VertexDeclaration);
}
void Grid::Create(int width, int depth, DWORD color)
{
GData::DXDevice->CreateVertexBuffer(
width * depth * 2 * sizeof(Vertex),
D3DUSAGE_WRITEONLY,
0,
D3DPOOL_MANAGED,
&VertexBuffer,
0);
Vertex* vertices;
VertexBuffer->Lock(0, 0, (void**)&vertices, 0);
long countvert = 0;
for (int x = -(width/2); x < (width/2) + 1; ++x)
{
vertices[countvert].pos = float3_t(x, 0, -(depth/2));
vertices[countvert].color = color;
++countvert;
vertices[countvert].pos = float3_t(x, 0, depth/2);
vertices[countvert].color = color;
++countvert;
}
for (int y = -(depth / 2); y < (depth/2) + 1; ++y)
{
vertices[countvert].pos = float3_t(-(width/2), 0, y);
vertices[countvert].color = color;
++countvert;
vertices[countvert].pos = float3_t(width/2, 0, y);
vertices[countvert].color = color;
++countvert;
}
VertexBuffer->Unlock();
PolyCount = countvert / 2;
}
void Grid::Render()
{
GData::DXDevice->SetTexture(0, 0);
//GData::DXDevice->SetRenderState(D3DRS_LIGHTING, FALSE);
SGCore_ShaderUnBind();
GData::DXDevice->SetVertexDeclaration(VertexDeclaration);
//GData::DXDevice->SetFVF(D3DFVF_XYZ | D3DFVF_DIFFUSE);
GData::DXDevice->SetStreamSource(0, VertexBuffer, 0, sizeof(Vertex));
GData::DXDevice->DrawPrimitive(D3DPT_LINELIST, 0, PolyCount);
}
\ No newline at end of file
#ifndef __grid_h
#define __grid_h
class Grid
{
struct Vertex
{
float3_t pos;
D3DCOLOR color;
};
public:
Grid();
~Grid();
void Create(int width, int depth, DWORD color);
void Render();
protected:
long PolyCount;
IDirect3DVertexBuffer9* VertexBuffer;
IDirect3DVertexDeclaration9* VertexDeclaration;
};
#endif
\ No newline at end of file
This diff is collapsed.
/******************************************************
Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
See the license in LICENSE
******************************************************/
/*!
\file
Заголовочный файл gdata - основные и необходимые данные для цикла рендера
*/
/*! \defgroup managed_render managed_render - управляемый рендер
@{*/
#ifndef __GDATA_H
#define __GDATA_H
class ModelSim;
#include <input/sxinput.h>
#include <managed_render/render_def.h>
#include <managed_render/model_sim.h>
#include <managed_render/editor/grid.h>
#include <managed_render/editor/axes_static.h>
#include <managed_render/editor/axes_helper.h>
#if defined(SX_GAME)
#include <SkyXEngine_Build/resource.h>
#endif
/*! \defgroup managed_render_gdata gdata - пространство имен для хранения основных и необходимых данных для цикла рендера
\ingroup managed_render
@{
*/
/*! \name Форматы файлов для диалога загрузки/сохранения
@{
*/
/*! текстуры*/
#define FILE_FILTER_TEXTURE "All files\0*.*\0png file(.png)\0*.png\0dds file(.dds)\0*.dds\0\0"
/*! конфиг файл уровня*/
#define FILE_FILTER_LEVEL "SkyX level file(.lvl)\0*.lvl\0All files\0*.*\0\0"
/*! dse модель*/
#define FILE_FILTER_MODEL "dse file(.dse)\0*.dse\0All files\0*.*\0\0"
/*! вершинный шейдер*/
#define FILE_FILTER_VS "vertex shader file(.vs)\0*.vs\0All files\0*.*\0\0"
/*! пиксельный шейдер*/
#define FILE_FILTER_PS "pixel shader file(.ps)\0*.ps\0All files\0*.*\0\0"
//!@}
/*! \name Типы возможных выделенных объектов
@{
*/
#define EDITORS_LEVEL_GROUPTYPE_GEOM 1 /*!< статическая геометрия */
#define EDITORS_LEVEL_GROUPTYPE_GREEN 2 /*!< растительность */
#define EDITORS_LEVEL_GROUPTYPE_GAME 3 /*!< игровые объекты */
#define EDITORS_LEVEL_GROUPTYPE_AIGRID 4 /*!< ai сетка */
//!@}
#define EDITORS_LEVEL_CAPTION "SXLevelEditor"
#define EDITORS_LEVEL_STATUSBAR_LEVEL_POLY "Level poly: "
#define EDITORS_LEVEL_STATUSBAR_GEOM_POLY "Geom poly: "
#define EDITORS_LEVEL_STATUSBAR_GREEN_POLY "Green poly: "
#define EDITORS_LEVEL_STATUSBAR_GAME_COUNT "Count game object: "
//##########################################################################
//! пространство имен для хранения данных цикла рендера
namespace GData
{
extern IDirect3DDevice9* DXDevice; //!< dx устройство
//! функция обработчик оконных сообщений (окна рендера)
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
//! инициализация окна рендера
void InitWin(
const char* name, //!< имя окна (только латиница)
const char* caption //!< название окна
);
extern HWND HandlePreview; //!< хэндл превью окна
extern HWND HandleParent3D; //!< хэндл окна родителя окна рендера, на случай редакторов
extern HWND Handle3D; //!< хэндл окна рендера
//extern float2_t WinSize; //!< размер окна рендера (области рендера)
extern bool IsWindowed; //!<использовать ли оконный режим рендера?
extern DS_RT FinalImage;//!< финальное изображение
extern ISXCamera* ObjCamera; //!< камера для которой будет рендер
extern ID IDSelectTex;
//extern int ReSize; //!< 0 - ничего не меняли, 1 - ресайз, 2 - переход между фуллскрин и окном
extern float2_t NearFar; //!< значение дальней и ближней плоскостей отсечения
extern float ProjFov; //!< fov камеры
extern ID DefaultGeomIDArr;
extern ID DefaultGreenIDArr;
extern ID DefaultAnimIDArr;
extern float3 ConstCurrCamPos; //!< позиция камеры
extern float3 ConstCurrCamDir; //!< направление взгляда камеры
//! Параметры перемещения камеры по умолчанию
extern float4_t CamWalkParamEditor;
//матрицы
void InitAllMatrix(); //!< инициализация матриц
extern float4x4 MCamView; //!< матрица вида камеры
extern float4x4 MCamProj; //!< матрица проекции камеры
extern float4x4 MLightProj; //!< матрица проекции аналогична¤ камере, только дальнत плоскость дальше
extern float4x4 MRefPlaneSkyProj; //!< матрица проекции дл¤ рендера skybox и sky clouds, дл¤ плоских отражений, аналогична MCamProj
extern float4x4 MRefCubeSkyProj; //!< матрица проекции дл¤ рендера skybox и sky clouds, дл¤ куибческих отражений
//**********************************************************************
//! пространство имен с идентификаторами шейдеров
namespace IDsShaders
{
//! загрузка всех необходимых шейдеров
void InitAllShaders();
//! вершинные шейдеры
namespace VS
{
extern ID ScreenOut;
extern ID ResPos;
};
//! пиксельные шейдеры
namespace PS
{
extern ID ScreenOut;
extern ID ComLightingNonShadow;
extern ID ComLightingShadow;
extern ID BlendAmbientSpecDiffColor;
extern ID ToneMapping;
extern ID StencilStr;
extern ID StencilColumn;
extern ID StencilStrColumn;