void GridDescriptor::CreateComponent(Node *node, Engine *engine) { SharedPtr<Mesh> mesh = new Mesh(engine); mesh->AddGeometry(GeometryGenerator::GenerateGrid(engine, size, countX, countZ), BoundingBox(-vec3(size.x, 1, size.y) * 0.5f, vec3(size.x, 1, size.y) * 0.5f), engine->GetResourceCache()->GetResource<Material>(materialFileName)); auto staticModel = node->CreateComponent<StaticModel>(mesh); staticModel->SetCastShadow(castShadow); component = staticModel; }
void GridDescriptor::Recreate(FireCube::Engine *engine) { if (component) { auto staticModel = static_cast<StaticModel *>(component); SharedPtr<Mesh> mesh = new Mesh(engine); mesh->AddGeometry(GeometryGenerator::GenerateGrid(engine, size, countX, countZ), BoundingBox(-vec3(size.x, 1, size.y) * 0.5f, vec3(size.x, 1, size.y) * 0.5f), engine->GetResourceCache()->GetResource<Material>(materialFileName)); staticModel->CreateFromMesh(mesh); } }
void MaterialEditorWindow::UpdatePreview(FireCube::Material *material) { auxRenderWindow.Reset(); auto root = auxRenderWindow.GetRoot(); auto lightNode1 = root->CreateChild(); auto light = lightNode1->CreateComponent<Light>(); light->SetLightType(LightType::DIRECTIONAL); light->SetColor(vec3(1.0f)); lightNode1->Rotate(vec3((float)-PI * 0.25f, (float)-PI * 0.25f, 0.0f)); auto lightNode2 = root->CreateChild(); light = lightNode2->CreateComponent<Light>(); light->SetLightType(LightType::DIRECTIONAL); light->SetColor(vec3(1.0f)); lightNode2->Rotate(vec3((float)PI * 0.25f, (float)PI * 0.25f, 0.0f)); auto meshNode = root->CreateChild(); auto geometry = GeometryGenerator::GenerateSphere(engine, 0.5f, 16, 16); SharedPtr<Mesh> sphereMesh = new Mesh(engine); sphereMesh->AddGeometry(geometry, BoundingBox(vec3(-0.5f), vec3(0.5f)), material); meshNode->CreateComponent<StaticModel>(sphereMesh); }