//---------------------------------------------------------------------------- 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; }
//---------------------------------------------------------------------------- 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; }