Commit a7a8ec8b authored by Byurrrer's avatar Byurrrer

убрал загрузку внешних моделей для редактора материалов, теперь все данные...

убрал загрузку внешних моделей для редактора материалов, теперь все данные моделей для него в cpp файле, рефакторил симуляцонную модель
parent d5da2742
......@@ -113,6 +113,7 @@
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\source\sxmaterialeditor\models.cpp" />
<ClCompile Include="..\..\..\source\sxmaterialeditor\paraml_kit.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
</ClCompile>
......@@ -142,6 +143,7 @@
<ClInclude Include="..\..\..\source\sxmaterialeditor\common_callback.h" />
<ClInclude Include="..\..\..\source\sxmaterialeditor\edits_callback.h" />
<ClInclude Include="..\..\..\source\sxmaterialeditor\material_editor.h" />
<ClInclude Include="..\..\..\source\sxmaterialeditor\models.h" />
<ClInclude Include="..\..\..\source\sxmaterialeditor\paraml_kit.h" />
<ClInclude Include="..\..\..\source\sxmaterialeditor\resource.h" />
<ClInclude Include="..\..\..\source\sxmaterialeditor\shaders_kit.h" />
......
......@@ -51,6 +51,9 @@
<ClCompile Include="..\..\..\source\common\string_utils.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\..\source\sxmaterialeditor\models.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="..\..\..\source\sxmaterialeditor\SXMaterialEditor.rc">
......@@ -103,6 +106,9 @@
<ClInclude Include="..\..\..\source\common\string_utils.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\source\sxmaterialeditor\models.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<Image Include="resource\save.bmp">
......
......@@ -46,6 +46,11 @@ struct vertex_static: public model_vertex
*/
struct vertex_static_ex: public model_vertex
{
vertex_static_ex(){}
vertex_static_ex(float3_t vPos, float2_t vTex, float3_t vNormal, float3_t vTangent, float3_t vBinormal)
{
Pos = vPos; Tex = vTex; Norm = vNormal; Tangent = vTangent; Binorm = vBinormal;
}
float3_t Pos; /*!< Позиция */
float2_t Tex; /*!< Текстурные координаты */
float3_t Norm; /*!< Нормаль */
......
/***********************************************************
Copyright Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
See the license in LICENSE
***********************************************************/
#include "models.h"
CModels::CModels()
......
/***********************************************************
Copyright Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
See the license in LICENSE
***********************************************************/
#ifndef __MODELS_H
#define __MODELS_H
......
This diff is collapsed.
......@@ -24,6 +24,8 @@ MTL_PRE_COND_ID(id, stdval)\
if (!(m_aUnitMtrls[id]->m_pReflect))\
{LibReport(REPORT_MSG_LEVEL_ERROR, "%s - material: material id = '%d', name = '%s' unsupported reflection", GEN_MSG_LOCATION, id, m_aUnitMtrls[id]->m_pMtrl->m_sName.c_str()); return stdval; }
//##########################################################################
class CMaterials
{
public:
......@@ -56,10 +58,10 @@ public:
void mtlReLoad(ID id, const char *szName = 0);
void mtlSave(ID id);
ID getStdMtl(MTLTYPE_MODEL type_model);
ID getStdMtl(MTLTYPE_MODEL typeModel);
ID exists(const char *szName);
MTLTYPE_MODEL getTypeModel(ID id);
void setTypeModel(ID id, MTLTYPE_MODEL type_model);
void setTypeModel(ID id, MTLTYPE_MODEL typeModel);
ID getID(const char *szName);
//######################################################################
......@@ -205,7 +207,7 @@ public:
bool m_useAlphaTest;
//! тип модели для рендера
MTLTYPE_MODEL type_model;
MTLTYPE_MODEL m_typeModel;
//! отправляемые данные в шейдеры
struct СDataShader
......@@ -213,10 +215,10 @@ public:
СDataShader();
~СDataShader();
SX_ALIGNED_OP_MEM
SX_ALIGNED_OP_MEM2();
//! отправлять ли мировую матрицу
bool m_isTransWorld;
//! отправлять ли мировую матрицу
bool m_isTransWorld;
//! отправлять ли видову матрицу
bool m_isTransView;
......@@ -301,7 +303,7 @@ public:
float m_fOldThickness;
//! тип отражений
MTLTYPE_REFLECT m_type_reflect;
MTLTYPE_REFLECT m_typeReflect;
//! прозрачный ли материал
bool m_isTransparent;
......@@ -314,7 +316,7 @@ public:
~CPhysics();
//! тип физического материала
MTLTYPE_PHYSIC type_physics;
MTLTYPE_PHYSIC m_typePhysics;
//! коэффициент пробиваемости [0, ], чем больше тем сложнее пробить
float m_fDurability;
......@@ -418,12 +420,12 @@ protected:
//! общее время кадров в млсек
UINT m_uiCountTimeDelta;
ID MtrlDefLight;
ID MtrlDefTree;
ID MtrlDefGrass;
ID MtrlDefStatic;
ID MtrlDefSkin;
ID BeginNonDef;
ID m_idMtrlDefLight;
ID m_idMtrlDefTree;
ID m_idMtrlDefGrass;
ID m_idMtrlDefStatic;
ID m_idMtrlDefSkin;
ID m_idBeginNonDef;
float4x4 m_mWorld, m_mViewProj, m_mWorldTrans, m_mViewTrans, m_mProjTrans;
};
......
......@@ -34,36 +34,36 @@ CReflection::~CReflection()
mem_release_del(m_pTexCubeRef);
}
void CReflection::setIDArr(ID id, ID idFace, ID idArr)
void CReflection::setIDvisCalcObj(ID id, ID idFace, ID idArr)
{
if (!(idFace >= 0 && idFace < 6))
return;
if (id >= m_aIDsArr.size())
if (id >= m_aIDsVisCalcObj.size())
{
ID* tmparr = new ID[6];
for (int i = 0; i < 6; ++i)
tmparr[i] = -1;
m_aIDsArr[id] = tmparr;
m_aIDsVisCalcObj[id] = tmparr;
}
m_aIDsArr[id][idFace] = idArr;
m_aIDsVisCalcObj[id][idFace] = idArr;
}
int CReflection::getCountIDArrs()
int CReflection::getCountIDsVisCalcObj()
{
return m_aIDsArr.size();
return m_aIDsVisCalcObj.size();
}
ID CReflection::getIDArr(ID id, ID idFace)
ID CReflection::getIDvisCalcObj(ID id, ID idFace)
{
if (!(idFace >= 0 && idFace < 6))
return -1;
if (id < 0 || !(idFace >= 0 && idFace < 6) || !(id < m_aIDsArr.size()))
if (id < 0 || !(idFace >= 0 && idFace < 6) || !(id < m_aIDsVisCalcObj.size()))
return -2;
return m_aIDsArr[id][idFace];
return m_aIDsVisCalcObj[id][idFace];
}
void CReflection::onLostDevice()
......@@ -79,11 +79,11 @@ void CReflection::onResetDevice()
{
D3DXCreateTexture(mtrl_data::pDXDevice, mtrl_data::vSizeTexReflection.x, mtrl_data::vSizeTexReflection.y, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &m_pTexWork);
if (type_reflection == MTLTYPE_REFLECT_PLANE)
if (typeReflection == MTLTYPE_REFLECT_PLANE)
{
D3DXCreateTexture(mtrl_data::pDXDevice, mtrl_data::vSizeTexReflection.x, mtrl_data::vSizeTexReflection.y, 0, D3DUSAGE_RENDERTARGET | D3DUSAGE_AUTOGENMIPMAP, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &m_pTexPlaneRef);
}
else if (type_reflection == MTLTYPE_REFLECT_CUBE_STATIC || type_reflection == MTLTYPE_REFLECT_CUBE_DYNAMIC)
else if (typeReflection == MTLTYPE_REFLECT_CUBE_STATIC || typeReflection == MTLTYPE_REFLECT_CUBE_DYNAMIC)
{
D3DXCreateCubeTexture(mtrl_data::pDXDevice, mtrl_data::vSizeTexReflection.x, 0, D3DUSAGE_RENDERTARGET | D3DUSAGE_AUTOGENMIPMAP, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &m_pTexCubeRef);
m_pTexCubeRef->SetAutoGenFilterType(D3DTEXF_LINEAR);
......@@ -94,11 +94,11 @@ void CReflection::onResetDevice()
void CReflection::init(MTLTYPE_REFLECT howref)
{
type_reflection = howref;
typeReflection = howref;
D3DXCreateTexture(mtrl_data::pDXDevice, mtrl_data::vSizeTexReflection.x, mtrl_data::vSizeTexReflection.y, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &m_pTexWork);
if (type_reflection == MTLTYPE_REFLECT_PLANE)
if (typeReflection == MTLTYPE_REFLECT_PLANE)
{
if (!m_aFrustums[0])
m_aFrustums[0] = SGCore_CrFrustum();
......@@ -106,7 +106,7 @@ void CReflection::init(MTLTYPE_REFLECT howref)
if (!m_pTexPlaneRef)
D3DXCreateTexture(mtrl_data::pDXDevice, mtrl_data::vSizeTexReflection.x, mtrl_data::vSizeTexReflection.y, 0, D3DUSAGE_RENDERTARGET | D3DUSAGE_AUTOGENMIPMAP, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &m_pTexPlaneRef);
}
else if (type_reflection == MTLTYPE_REFLECT_CUBE_STATIC || type_reflection == MTLTYPE_REFLECT_CUBE_DYNAMIC)
else if (typeReflection == MTLTYPE_REFLECT_CUBE_STATIC || typeReflection == MTLTYPE_REFLECT_CUBE_DYNAMIC)
{
for (int i = 0; i < 6; ++i)
{
......@@ -127,7 +127,7 @@ void CReflection::init(MTLTYPE_REFLECT howref)
MTLTYPE_REFLECT CReflection::getTypeReflect()
{
return type_reflection;
return typeReflection;
}
const IFrustum* CReflection::getFrustum(ID id)
......@@ -140,7 +140,7 @@ bool CReflection::updateCountUpdate(const float3_t* viewpos)
if (!viewpos)
return false;
if (type_reflection == MTLTYPE_REFLECT_CUBE_STATIC)
if (typeReflection == MTLTYPE_REFLECT_CUBE_STATIC)
{
if (m_iCountUpdate < MTL_REF_UPDATE_MAX_COUNT_FOR_STATIC)
{
......@@ -176,7 +176,7 @@ bool CReflection::updateCountUpdate(const float3_t* viewpos)
bool CReflection::allowedRender()
{
if (type_reflection == MTLTYPE_REFLECT_CUBE_STATIC)
if (typeReflection == MTLTYPE_REFLECT_CUBE_STATIC)
{
if (m_iCountUpdate <= MTL_REF_UPDATE_MAX_COUNT_FOR_STATIC)
{
......
......@@ -32,7 +32,7 @@ public:
void onLostDevice();
void onResetDevice();
SX_ALIGNED_OP_MEM
SX_ALIGNED_OP_MEM2();
//! инициализация отражений
void init(MTLTYPE_REFLECT type);
......@@ -85,13 +85,13 @@ public:
void setMinMax(const float3_t *pMin, const float3_t *pMax);
//! запись данных массива прсочетов
void setIDArr(ID id, ID idFace, ID idArr);
void setIDvisCalcObj(ID id, ID idFace, ID idVisCalcObj);
//! размер массива массивов идентификаторов просчета
int getCountIDArrs();
int getCountIDsVisCalcObj();
//! получить идентификатор массива просчета
ID getIDArr(ID id, ID idFace);
ID getIDvisCalcObj(ID id, ID idFace);
protected:
......@@ -108,13 +108,13 @@ protected:
IFrustum *m_aFrustums[6];
//! массивы идентификаторов для просчета видимости
Array<ID*> m_aIDsArr;
Array<ID*> m_aIDsVisCalcObj;
//! количество обновлений отражения
int m_iCountUpdate;
//! тип отражений
MTLTYPE_REFLECT type_reflection;
MTLTYPE_REFLECT typeReflection;
//! предыдущие матрицы
float4x4 m_mOldMatProj, m_mOldMatView, m_mOldMatViewProj;
......
This diff is collapsed.
......@@ -33,30 +33,50 @@ public:
CSimulationModel();
~CSimulationModel();
SX_ALIGNED_OP_MEM
SX_ALIGNED_OP_MEM2();
void add(const char *szPath);
//! добавить модель (статическую)
void add(ISXDataStaticModel *pModel);
//! рендер (на основании установленного типа модели)
void render(DWORD timeDelta);
MTLTYPE_MODEL m_type_model;
int m_iCurrRenderModel;
float3 m_vRotation;
//! возвращает id материала
ID getIdMtl();
//! записывает плоскость (на основании первого треугольника модели)
void getPlane(D3DXPLANE *pPlane);
//! записывает центр
void getCenter(float3_t *pCenter);
//**********************************************************************
//! тип модели
MTLTYPE_MODEL m_typeModel;
//! текущий номер модели для рендера
int m_iCurrRenderModel;
//! углы поворотов модели
float3 m_vRotation;
//**********************************************************************
protected:
//! рисовать модель как статичекую
void renderStatic(DWORD timeDelta);
//! рисовать модель как растительность
void renderGreen(DWORD timeDelta);
//! рисовать модель как анимационную
void renderSkin(DWORD timeDelta);
IDirect3DVertexDeclaration9 *m_pVertexDeclarationStatic;
IDirect3DVertexDeclaration9 *m_pVertexDeclarationGreen;
IDirect3DVertexDeclaration9 *m_pVertexDeclarationSkin;
//**********************************************************************
//! структура модели
struct CModel
{
CModel(){ m_pModel = 0; }
......@@ -65,16 +85,47 @@ protected:
m_pModel = pModel; m_vCenter = *pCenter; m_vMax = *pMax; m_vMin = *pMin; m_oPlane = *pPlane;
}
//! указатель на статическую модель
ISXDataStaticModel *m_pModel;
//! врешинный буфер для анимацонной модели
IDirect3DVertexBuffer9 *m_pAnim;
float3_t m_vMin, m_vMax, m_vCenter;
//! минимум и максимум модели
float3_t m_vMin, m_vMax;
//! центр модели
float3_t m_vCenter;
//! плоскость (на основании первого треугольника модели)
D3DXPLANE m_oPlane;
};
//**********************************************************************
//! вершинная декларация для статической модели
IDirect3DVertexDeclaration9 *m_pVertexDeclarationStatic;
//! вершинная декларация для растительности
IDirect3DVertexDeclaration9 *m_pVertexDeclarationGreen;
//! вершинная декларация для анимационное модели
IDirect3DVertexDeclaration9 *m_pVertexDeclarationSkin;
//! массив моделей
Array<CModel*> m_aModels;
//! вершинный буфер с трансформациями для растительности (всего одна вершина)
IDirect3DVertexBuffer9 *m_pTransVertBufGreen;
//! данные о орастительности
CGreenDataVertex m_oGreen;
//! id материала
ID m_idMtrl;
//! мировая матрица
float4x4 m_mWorld;
};
......
......@@ -166,9 +166,9 @@ SX_LIB_API bool SRender_EditorCameraGetMove()
//**************************************************************************
SX_LIB_API void SRender_SimModelAdd(const char *szName)
SX_LIB_API void SRender_SimModelAddModel(ISXDataStaticModel *pModel)
{
gdata::Editors::pSimModel->add(szName);
gdata::Editors::pSimModel->add(pModel);
}
SX_LIB_API ID SRender_SimModelGetIDMtl()
......@@ -178,12 +178,12 @@ SX_LIB_API ID SRender_SimModelGetIDMtl()
SX_LIB_API MTLTYPE_MODEL SRender_SimModelGetType()
{
return gdata::Editors::pSimModel->m_type_model;
return gdata::Editors::pSimModel->m_typeModel;
}
SX_LIB_API void SRender_SimModelSetType(MTLTYPE_MODEL type)
{
gdata::Editors::pSimModel->m_type_model = type;
gdata::Editors::pSimModel->m_typeModel = type;
}
SX_LIB_API void SRender_SimModelSetNumCurrModel(int iCurrNumModel)
......
......@@ -224,8 +224,8 @@ SX_LIB_API ICamera* SRender_GetCamera();
\warning Добавить в симуляционную модель рендера возможно только статическую модель, у которой может быть только одна подгруппа с одной текстурой
@{*/
//! добавить статическую модель в симуляционноую модель рендера, szName - путь до статической модели относительно папки местонахождения
SX_LIB_API void SRender_SimModelAdd(const char *szName);
//! добавить статическую модель в симуляционноую модель рендера, szPath - путь до статической модели относительно папки местонахождения
SX_LIB_API void SRender_SimModelAddModel(ISXDataStaticModel *pModel);
//! возвращает id материала
SX_LIB_API ID SRender_SimModelGetIDMtl();
......
This source diff could not be displayed because it is too large. You can view the blob instead.
/***********************************************************
Copyright Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
See the license in LICENSE
***********************************************************/
/*!
\file
*/
#ifndef __ME_MODELS_H
#define __ME_MODELS_H
#include <gcore/sxgcore.h>
//!
ISXDataStaticModel* CreateModelSphere();
//!
ISXDataStaticModel* CreateModelCube();
//!
ISXDataStaticModel* CreateModelPlane();
#endif
\ No newline at end of file
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