Beispiel #1
0
// Rendering
void Player::Render()
{
	Colour OulineColour(1.0f, 1.0f, 0.0f, 1.0f);
	m_pRenderer->PushMatrix();
		m_pRenderer->MultiplyWorldMatrix(m_worldMatrix);
		m_pVoxelCharacter->RenderWeapons(false, false, false, OulineColour);
		m_pVoxelCharacter->Render(false, false, false, OulineColour, false);
	m_pRenderer->PopMatrix();
}
Beispiel #2
0
void Player::RenderFirstPerson()
{
	m_pVoxelCharacter->SetMeshAlpha(1.0f);

	Colour OulineColour(1.0f, 1.0f, 0.0f, 1.0f);
	m_pRenderer->PushMatrix();
		m_pRenderer->MultiplyWorldMatrix(m_worldMatrix);
		m_pVoxelCharacter->RenderWeapons(false, false, false, OulineColour);
	m_pRenderer->PopMatrix();
}
Beispiel #3
0
void SceneryManager::RenderSceneryObject(SceneryObject* pSceneryObject, bool outline, bool reflection, bool silhouette, bool boundingBox, bool shadow)
{
	m_pRenderer->PushMatrix();
		// First translate to world file origin
		m_pRenderer->TranslateWorldMatrix(pSceneryObject->m_worldFileOffset.x, pSceneryObject->m_worldFileOffset.y, pSceneryObject->m_worldFileOffset.z);
		
		bool switchedFaceCulling = false;
		switch(pSceneryObject->m_parentImportDirection)
		{
			case QubicleImportDirection_Normal: {  } break;
			case QubicleImportDirection_MirrorX: { m_pRenderer->ScaleWorldMatrix(-1.0f, 1.0f, 1.0f); switchedFaceCulling = !switchedFaceCulling; } break;
			case QubicleImportDirection_MirrorY: { m_pRenderer->ScaleWorldMatrix(1.0f, -1.0f, 1.0f); switchedFaceCulling = !switchedFaceCulling; } break;
			case QubicleImportDirection_MirrorZ: { m_pRenderer->ScaleWorldMatrix(1.0f, 1.0f, -1.0f); switchedFaceCulling = !switchedFaceCulling; } break;
			case QubicleImportDirection_RotateY90: { m_pRenderer->RotateWorldMatrix(0.0f, -90.0f, 0.0f); } break;
			case QubicleImportDirection_RotateY180: { m_pRenderer->RotateWorldMatrix(0.0f, -180.0f, 0.0f); } break;
			case QubicleImportDirection_RotateY270: { m_pRenderer->RotateWorldMatrix(0.0f, -270.0f, 0.0f); } break;
			case QubicleImportDirection_RotateX90: { m_pRenderer->RotateWorldMatrix(-90.0f, 0.0f, 0.0f); } break;
			case QubicleImportDirection_RotateX180: { m_pRenderer->RotateWorldMatrix(-180.0f, 0.0f, 0.0f); } break;
			case QubicleImportDirection_RotateX270: { m_pRenderer->RotateWorldMatrix(-270.0f, 0.0f, 0.0f); } break;
			case QubicleImportDirection_RotateZ90: { m_pRenderer->RotateWorldMatrix(0.0f, 0.0f, -90.0f); } break;
			case QubicleImportDirection_RotateZ180: { m_pRenderer->RotateWorldMatrix(0.0f, 0.0f, -180.0f); } break;
			case QubicleImportDirection_RotateZ270: { m_pRenderer->RotateWorldMatrix(0.0f, 0.0f, -270.0f); } break;
		}

		// Now local object offset
		m_pRenderer->TranslateWorldMatrix(pSceneryObject->m_positionOffset.x, pSceneryObject->m_positionOffset.y, pSceneryObject->m_positionOffset.z);

		// Translate for block size offset
		m_pRenderer->TranslateWorldMatrix(0.0f, -Chunk::BLOCK_RENDER_SIZE, 0.0f);

		float l_length = pSceneryObject->m_length*0.5f;
		float l_height = pSceneryObject->m_height*0.5f;
		float l_width = pSceneryObject->m_width*0.5f;

		// Rotate the scenery object
		m_pRenderer->RotateWorldMatrix(0.0f, pSceneryObject->m_rotation, 0.0f);

		// Scale the scenery object
		m_pRenderer->ScaleWorldMatrix(pSceneryObject->m_scale, pSceneryObject->m_scale, pSceneryObject->m_scale);

		// Translate to the center
		m_pRenderer->TranslateWorldMatrix(0.0f, l_height, 0.0f);

		switch(pSceneryObject->m_importDirection)
		{
			case QubicleImportDirection_Normal: {  } break;
			case QubicleImportDirection_MirrorX: { m_pRenderer->ScaleWorldMatrix(-1.0f, 1.0f, 1.0f); switchedFaceCulling = !switchedFaceCulling; } break;
			case QubicleImportDirection_MirrorY: { m_pRenderer->ScaleWorldMatrix(1.0f, -1.0f, 1.0f); switchedFaceCulling = !switchedFaceCulling; } break;
			case QubicleImportDirection_MirrorZ: { m_pRenderer->ScaleWorldMatrix(1.0f, 1.0f, -1.0f); switchedFaceCulling = !switchedFaceCulling; } break;
			case QubicleImportDirection_RotateY90: { m_pRenderer->RotateWorldMatrix(0.0f, -90.0f, 0.0f); } break;
			case QubicleImportDirection_RotateY180: { m_pRenderer->RotateWorldMatrix(0.0f, -180.0f, 0.0f); } break;
			case QubicleImportDirection_RotateY270: { m_pRenderer->RotateWorldMatrix(0.0f, -270.0f, 0.0f); } break;
			case QubicleImportDirection_RotateX90: { m_pRenderer->RotateWorldMatrix(-90.0f, 0.0f, 0.0f); } break;
			case QubicleImportDirection_RotateX180: { m_pRenderer->RotateWorldMatrix(-180.0f, 0.0f, 0.0f); } break;
			case QubicleImportDirection_RotateX270: { m_pRenderer->RotateWorldMatrix(-270.0f, 0.0f, 0.0f); } break;
			case QubicleImportDirection_RotateZ90: { m_pRenderer->RotateWorldMatrix(0.0f, 0.0f, -90.0f); } break;
			case QubicleImportDirection_RotateZ180: { m_pRenderer->RotateWorldMatrix(0.0f, 0.0f, -180.0f); } break;
			case QubicleImportDirection_RotateZ270: { m_pRenderer->RotateWorldMatrix(0.0f, 0.0f, -270.0f); } break;
		}

		Colour OulineColour(1.0f, 1.0f, 0.0f, 1.0f);
		if(pSceneryObject->m_hoverRender && pSceneryObject->m_outlineRender == false)
			OulineColour = Colour(1.0f, 0.0f, 1.0f, 1.0f);

		if(shadow)
		{
			m_pRenderer->SetCullMode(switchedFaceCulling ? CM_BACK : CM_FRONT);
		}
		else
		{
			m_pRenderer->SetCullMode(switchedFaceCulling ? CM_FRONT : CM_BACK);
		}

		m_pRenderer->ImmediateColourAlpha(1.0f, 1.0f, 1.0f, 1.0f);
		pSceneryObject->m_pQubicleBinaryFile->Render(outline, reflection, silhouette, OulineColour);

		if(boundingBox)
		{
			m_pRenderer->SetRenderMode(RM_WIREFRAME);
			m_pRenderer->SetCullMode(CM_NOCULL);
			m_pRenderer->SetLineWidth(1.0f);

			m_pRenderer->EnableImmediateMode(IM_QUADS);
				m_pRenderer->ImmediateColourAlpha(1.0f, 1.0f, 0.0f, 1.0f);
				m_pRenderer->ImmediateNormal(0.0f, 0.0f, -1.0f);
				m_pRenderer->ImmediateVertex(l_length, -l_height, -l_width);
				m_pRenderer->ImmediateVertex(-l_length, -l_height, -l_width);
				m_pRenderer->ImmediateVertex(-l_length, l_height, -l_width);
				m_pRenderer->ImmediateVertex(l_length, l_height, -l_width);

				m_pRenderer->ImmediateNormal(0.0f, 0.0f, 1.0f);
				m_pRenderer->ImmediateVertex(-l_length, -l_height, l_width);
				m_pRenderer->ImmediateVertex(l_length, -l_height, l_width);
				m_pRenderer->ImmediateVertex(l_length, l_height, l_width);
				m_pRenderer->ImmediateVertex(-l_length, l_height, l_width);

				m_pRenderer->ImmediateNormal(1.0f, 0.0f, 0.0f);
				m_pRenderer->ImmediateVertex(l_length, -l_height, l_width);
				m_pRenderer->ImmediateVertex(l_length, -l_height, -l_width);
				m_pRenderer->ImmediateVertex(l_length, l_height, -l_width);
				m_pRenderer->ImmediateVertex(l_length, l_height, l_width);

				m_pRenderer->ImmediateNormal(-1.0f, 0.0f, 0.0f);
				m_pRenderer->ImmediateVertex(-l_length, -l_height, -l_width);
				m_pRenderer->ImmediateVertex(-l_length, -l_height, l_width);
				m_pRenderer->ImmediateVertex(-l_length, l_height, l_width);
				m_pRenderer->ImmediateVertex(-l_length, l_height, -l_width);

				m_pRenderer->ImmediateNormal(0.0f, -1.0f, 0.0f);
				m_pRenderer->ImmediateVertex(-l_length, -l_height, -l_width);
				m_pRenderer->ImmediateVertex(l_length, -l_height, -l_width);
				m_pRenderer->ImmediateVertex(l_length, -l_height, l_width);
				m_pRenderer->ImmediateVertex(-l_length, -l_height, l_width);

				m_pRenderer->ImmediateNormal(0.0f, 1.0f, 0.0f);
				m_pRenderer->ImmediateVertex(l_length, l_height, -l_width);
				m_pRenderer->ImmediateVertex(-l_length, l_height, -l_width);
				m_pRenderer->ImmediateVertex(-l_length, l_height, l_width);
				m_pRenderer->ImmediateVertex(l_length, l_height, l_width);
			m_pRenderer->DisableImmediateMode();

			m_pRenderer->SetCullMode(CM_BACK);
		}
	m_pRenderer->PopMatrix();
}