⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cvmaterl.cpp

📁 Windows上的MUD客户端程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	{
		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 + -