예제 #1
0
//----------------------------------------------------------------------------
Node* Sample5::CreateCube(Bool useTexture, Bool useNormals,
	Bool useVertexColor, ColorRGBA vertexColor)
{
	RenderObject* pCube = StandardMesh::CreateCube24(useVertexColor ? 4 : 0,
		useTexture ? 1 : 0, useNormals);
	VertexBuffer* const pVBuffer = pCube->GetMesh()->GetVertexBuffer();

	for (UInt i = 0; i < pVBuffer->GetQuantity(); i++)
	{
		if (useVertexColor)
		{
			if (pVBuffer->Position3(i).Z() > 0)
			{
				pVBuffer->Color4(i) = vertexColor;
			}
			else
			{
				pVBuffer->Color4(i) = vertexColor * 0.5F;
			}
		}
	}

	pCube->GetMesh()->GenerateNormals();

	if (useTexture)
	{
		Material* pMaterial = WIRE_NEW Material;
		pMaterial->AddTexture(CreateTexture(), Material::BM_MODULATE);
		pCube->SetMaterial(pMaterial);
	}

	Node* pCubeNode = WIRE_NEW Node(pCube);
	return pCubeNode;
}
예제 #2
0
//----------------------------------------------------------------------------
RenderObject* Sample5::CreatePlane()
{
	const UInt tileXCount = 30;
	const UInt tileYCount = 20;
	const Float xSizeTotal = 12.0F;
	const Float ySizeTotal = 8.0F;
	RenderObject* pPlane = StandardMesh::CreatePlane(tileXCount, tileYCount,
		xSizeTotal, ySizeTotal, 0, 1, true);
	pPlane->GetMesh()->GenerateNormals();

	Texture2D* pTexture = CreateTexture();
	pTexture->SetWrapType(0, Texture2D::WT_REPEAT);
	pTexture->SetWrapType(1, Texture2D::WT_REPEAT);
	Material* pMaterial = WIRE_NEW Material;
	pMaterial->AddTexture(pTexture, Material::BM_MODULATE);
	pPlane->SetMaterial(pMaterial);

	// attach a material state and a light to the plane geometry directly
	StateMaterial* pStateMaterial = WIRE_NEW StateMaterial;
	pStateMaterial->Ambient = ColorRGBA(1, 1, 1, 1);
	pPlane->GetStates()[State::MATERIAL] = pStateMaterial;

	mspSpotLight = WIRE_NEW Light(Light::LT_SPOT);
	mspSpotLight->Position = Vector3F(0, 0, 10);
	mspSpotLight->Direction = Vector3F(0, 0, -1);
	mspSpotLight->Angle = 0.5F;
	mspSpotLight->Ambient = ColorRGB(0.2F, 0.2F, 0.2F);
	return pPlane;
}