📄 cvmaterl.cpp
字号:
{
mat.m_transparency = 0;
}
mat.m_diffuse.SetAlpha(1. - mat.m_transparency);
return mat;
};
#endif
////////////////////////////////////////////////////////
ChQvFaceSetMaterials::ChQvFaceSetMaterials( ChQvIFSInstance *pInst) : ChQvMaterialMap()
{
m_pMat = pInst->GetMaterial();
// Get the binding
QvMaterialBinding *pBinding = pInst->GetMaterialBinding();
m_binding = (QvMaterialBinding::Binding)(pBinding->value.value);
// Save the indices
m_pIndices = ((QvIndexedFaceSet*)(pInst->GetNode()))->materialIndex.values;
m_numIndices = ((QvIndexedFaceSet*)(pInst->GetNode()))->materialIndex.num;
m_pRC = pInst->GetRC();
}
#if defined(CH_USE_3DR)
void ChQvFaceSetMaterials::Set(Dword_t hRC, G3dHandle_t hGC, int faceNum, int vertex /*= 0*/, bool *pboolEmissive /*= 0*/)
#else
void ChQvFaceSetMaterials::Set(ChNrMesh mesh, ChNrFace face, int vertIndex, int faceNum, int vertex)
#endif
{
int i = 0;
switch(m_binding)
{
case QvMaterialBinding::PER_FACE:
{
i = faceNum;
break;
}
case QvMaterialBinding::PER_FACE_INDEXED:
{
if(faceNum < m_numIndices) i = m_pIndices[faceNum];
break;
}
case QvMaterialBinding::PER_VERTEX:
{
i = vertex;
break;
}
case QvMaterialBinding::PER_VERTEX_INDEXED:
{
if(vertex < m_numIndices)i = m_pIndices[vertex];
break;
}
case QvMaterialBinding::PER_PART_INDEXED:
{
i = m_pIndices[0];
break;
}
case QvMaterialBinding::PER_PART:
case QvMaterialBinding::DEFAULT:
case QvMaterialBinding::NONE:
case QvMaterialBinding::OVERALL:
{
i = 0;
break;
}
}
if (i<0) i = 0;
#if defined(CH_USE_3DR)
SetMat( hRC, hGC, i, pboolEmissive);
#else
SetMat( mesh, face, vertIndex, i);
#endif
return;
};
ChQvLineSetMaterials::ChQvLineSetMaterials( ChQvILSInstance *pInst) : ChQvMaterialMap()
{
m_pMat = pInst->GetMaterial();
// Get the binding
QvMaterialBinding *pBinding = pInst->GetMaterialBinding();
m_binding = (QvMaterialBinding::Binding)(pBinding->value.value);
if(m_binding == QvMaterialBinding::DEFAULT) m_binding = QvMaterialBinding::PER_VERTEX_INDEXED;
QvIndexedLineSet *lines = (QvIndexedLineSet*)(pInst->GetNode());
m_pIndices = lines->materialIndex.values;
m_numIndices = lines->materialIndex.num;
m_pRC = pInst->GetRC();
};
#if defined(CH_USE_3DR)
void ChQvLineSetMaterials::Set(Dword_t hRC, G3dHandle_t hGC, int faceNum, int vertex /*= 0*/, bool *pboolEmissive /*= 0*/)
#else
void ChQvLineSetMaterials::Set(ChNrMesh mesh, ChNrFace face, int vertIndex, int faceNum, int vertex)
#endif
{
int i = 0;
switch(m_binding)
{
case QvMaterialBinding::PER_FACE:
{
i = faceNum;
break;
}
case QvMaterialBinding::PER_FACE_INDEXED:
{
if(faceNum < m_numIndices) i = m_pIndices[faceNum];
break;
}
case QvMaterialBinding::PER_VERTEX:
{
i = vertex;
break;
}
case QvMaterialBinding::PER_VERTEX_INDEXED:
{
if(vertex < m_numIndices)i = m_pIndices[vertex];
break;
}
case QvMaterialBinding::PER_PART_INDEXED:
{
i = m_pIndices[0];
break;
}
case QvMaterialBinding::PER_PART:
case QvMaterialBinding::DEFAULT:
case QvMaterialBinding::NONE:
case QvMaterialBinding::OVERALL:
{
i = 0;
break;
}
}
if (i<0) i = 0;
#if defined(CH_USE_3DR)
SetMat( hRC, hGC, i, pboolEmissive);
#else
SetMat( mesh, face, vertIndex, i);
#endif
return;
};
//////////////////////////////////
// Not ported yet
ChQvPointSetMaterials::ChQvPointSetMaterials( ChQvPointSetInstance *pInst) : ChQvMaterialMap()
{
m_pMat = pInst->GetMaterial();
// Get the binding
QvMaterialBinding *pBinding = pInst->GetMaterialBinding();
m_binding = (QvMaterialBinding::Binding)(pBinding->value.value);
if(m_binding == QvMaterialBinding::DEFAULT) m_binding = QvMaterialBinding::OVERALL;
QvIndexedLineSet *lines = (QvIndexedLineSet*)(pInst->GetNode());
m_pIndices = lines->materialIndex.values;
m_numIndices = lines->materialIndex.num;
m_pRC = pInst->GetRC();
};
#if defined(CH_USE_3DR)
void ChQvPointSetMaterials::Set(Dword_t hRC, G3dHandle_t hGC, int faceNum, int vertex /*= 0*/, bool *pboolEmissive /*= 0*/)
{
SetMat( hRC, hGC, GetIndex(vertex), pboolEmissive);
return;
};
#else
void ChQvPointSetMaterials::Set(ChNrMesh mesh, ChNrFace face, int vertIndex, int faceNum, int vertex)
{
SetMat( mesh, face, vertIndex, GetIndex(vertex));
return;
};
ChMaterial ChQvPointSetMaterials::GetMaterial( int vertex)
{
return GetMat( GetIndex( vertex ) );
};
#endif
int ChQvPointSetMaterials::GetIndex( int vertex)
{
int i = 0;
switch(m_binding)
{
case QvMaterialBinding::PER_VERTEX:
{
i = vertex;
break;
}
case QvMaterialBinding::PER_VERTEX_INDEXED:
{
if(vertex < m_numIndices)i = m_pIndices[vertex];
break;
}
case QvMaterialBinding::PER_FACE_INDEXED:
case QvMaterialBinding::PER_PART_INDEXED:
{
i = m_pIndices[0];
break;
}
case QvMaterialBinding::PER_FACE:
case QvMaterialBinding::PER_PART:
case QvMaterialBinding::DEFAULT:
case QvMaterialBinding::NONE:
case QvMaterialBinding::OVERALL:
{
i = 0;
break;
}
}
if (i<0) i = 0;
return i;
};
#if defined(CH_USE_3DR)
#endif
//////////////////////////////////////
ChQvConeMaterials::ChQvConeMaterials( ChQvConeInstance* pInst) : ChQvMaterialMap()
{
m_pMat = pInst->GetMaterial();
// Get the binding
QvMaterialBinding *pBinding = pInst->GetMaterialBinding();
m_binding = (QvMaterialBinding::Binding)(pBinding->value.value);
m_pRC = pInst->GetRC();
};
#if defined(CH_USE_3DR)
void ChQvConeMaterials::Set(Dword_t hRC, G3dHandle_t hGC, int part, bool *pboolEmissive)
#else
void ChQvConeMaterials::Set(ChNrMesh mesh, ChNrFace face, Parts part)
#endif
{ // part 0 == sides, 1 == bottom
int i = 0;
switch(m_binding)
{
case QvMaterialBinding::PER_PART:
case QvMaterialBinding::PER_PART_INDEXED:
{
i = int(part);
if (i > 1) i = 1;
break;
}
case QvMaterialBinding::PER_VERTEX_INDEXED:
case QvMaterialBinding::PER_FACE_INDEXED:
case QvMaterialBinding::PER_VERTEX:
case QvMaterialBinding::PER_FACE:
case QvMaterialBinding::DEFAULT:
case QvMaterialBinding::NONE:
case QvMaterialBinding::OVERALL:
{
i = 0;
break;
}
}
#if defined(CH_USE_3DR)
SetMat( hRC, hGC, i, pboolEmissive);
#elif (defined(CH_USE_RLAB)) || defined(CH_USE_D3D)
SetMat( mesh, face, -1, i);
#endif
};
ChQvCubeMaterials::ChQvCubeMaterials( ChQvCubeInstance* pInst) : ChQvMaterialMap()
{
m_pMat = pInst->GetMaterial();
// Get the binding
QvMaterialBinding *pBinding = pInst->GetMaterialBinding();
m_binding = (QvMaterialBinding::Binding)(pBinding->value.value);
m_pRC = pInst->GetRC();
};
ChQvCylinderMaterials::ChQvCylinderMaterials( ChQvCylinderInstance* pInst) : ChQvMaterialMap()
{
m_pMat = pInst->GetMaterial();
// Get the binding
QvMaterialBinding *pBinding = pInst->GetMaterialBinding();
m_binding = (QvMaterialBinding::Binding)(pBinding->value.value);
m_pRC = pInst->GetRC();
};
#if defined(CH_USE_3DR)
void ChQvCylinderMaterials::Set(Dword_t hRC, G3dHandle_t hGC, int part, bool *pboolEmissive) // TODO change to Parts
#else
void ChQvCylinderMaterials::Set(ChNrMesh mesh, ChNrFace face, Parts part)
#endif
{ // part 0 == sides, 1 == top, 2== bottom
int i = 0;
switch(m_binding)
{
case QvMaterialBinding::PER_PART:
case QvMaterialBinding::PER_PART_INDEXED:
{
i = int(part);
break;
}
case QvMaterialBinding::PER_VERTEX_INDEXED:
case QvMaterialBinding::PER_FACE_INDEXED:
case QvMaterialBinding::PER_VERTEX:
case QvMaterialBinding::PER_FACE:
case QvMaterialBinding::DEFAULT:
case QvMaterialBinding::NONE:
case QvMaterialBinding::OVERALL:
{
i = 0;
break;
}
}
#if defined(CH_USE_3DR)
SetMat( hRC, hGC, i, pboolEmissive);
#elif (defined(CH_USE_RLAB)) || defined(CH_USE_D3D)
SetMat( mesh, face, -1, i);
#endif
};
ChQvSphereMaterials::ChQvSphereMaterials( ChQvSphereInstance* pInst) : ChQvMaterialMap()
{
m_pMat = pInst->GetMaterial();
// Get the binding
QvMaterialBinding *pBinding = pInst->GetMaterialBinding();
m_binding = (QvMaterialBinding::Binding)(pBinding->value.value);
if(m_binding == QvMaterialBinding::DEFAULT) m_binding = QvMaterialBinding::OVERALL;
m_pRC = pInst->GetRC();
};
#if defined(CH_USE_3DR)
void ChQvSphereMaterials::Set(Dword_t hRC, G3dHandle_t hGC, bool *pboolEmissive)
#else
void ChQvSphereMaterials::Set(ChNrMesh mesh, ChNrFace face)
#endif
{ // part 0 == only possible part
int i = 0;
switch(m_binding)
{
case QvMaterialBinding::PER_PART:
case QvMaterialBinding::PER_PART_INDEXED:
case QvMaterialBinding::PER_VERTEX_INDEXED:
case QvMaterialBinding::PER_FACE_INDEXED:
case QvMaterialBinding::PER_VERTEX:
case QvMaterialBinding::PER_FACE:
case QvMaterialBinding::DEFAULT:
case QvMaterialBinding::NONE:
case QvMaterialBinding::OVERALL:
{
i = 0;
break;
}
}
#if defined(CH_USE_3DR)
SetMat( hRC, hGC, i, pboolEmissive);
#elif (defined(CH_USE_RLAB)) || defined(CH_USE_D3D)
SetMat( mesh, face, -1, i);
#endif
}
ChQvAsciiTextMaterials::ChQvAsciiTextMaterials( ChQvAsciiTextInstance *pInst) : ChQvMaterialMap()
{
m_pMat = pInst->GetMaterial();
// Get the binding
QvMaterialBinding *pBinding = pInst->GetMaterialBinding();
m_binding = (QvMaterialBinding::Binding)(pBinding->value.value);
if(m_binding == QvMaterialBinding::DEFAULT) m_binding = QvMaterialBinding::OVERALL;
m_pRC = pInst->GetRC();
};
#if defined(CH_USE_3DR)
void ChQvAsciiTextMaterials::Set(Dword_t hRC, G3dHandle_t hGC, bool *pboolEmissive)
#elif (defined(CH_USE_RLAB)) || defined(CH_USE_D3D)
void ChQvAsciiTextMaterials::Set(ChNrMesh mesh, ChNrFace face)
#endif
{ // part 0 == only possible part
int i = 0;
switch(m_binding)
{
case QvMaterialBinding::PER_PART:
case QvMaterialBinding::PER_PART_INDEXED:
case QvMaterialBinding::PER_VERTEX_INDEXED:
case QvMaterialBinding::PER_FACE_INDEXED:
case QvMaterialBinding::PER_VERTEX:
case QvMaterialBinding::PER_FACE:
case QvMaterialBinding::DEFAULT:
case QvMaterialBinding::NONE:
case QvMaterialBinding::OVERALL:
{
i = 0;
break;
}
}
#if defined(CH_USE_3DR)
SetMat( hRC, hGC, i, pboolEmissive);
#elif (defined(CH_USE_RLAB)) || defined(CH_USE_D3D)
SetMat( mesh, face, -1, i);
#endif
};
#if defined(CH_USE_3DR)
#endif
// end of file
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -