MeshNode* SceneCreator::CreateCornellBox() { MeshPtr box = MeshCreator::CreateCube(10, 1, Vector<3,float>(1.0f, 1.0f, 1.0f), true); IDataBlockPtr color = Float4DataBlockPtr(new DataBlock<4, float>(box->GetGeometrySet()->GetSize())); for (unsigned int i = 0; i < color->GetSize(); ++i) color->SetElement(i, Vector<4, float>(1.0, 1.0, 1.0, 1.0)); box->GetGeometrySet()->AddAttributeList("color", color); IDataBlockPtr colors = box->GetGeometrySet()->GetColors(); Vector<4,float> red(1.0f, 0.0f, 0.0f, 1.0f); colors->SetElement(8, red); colors->SetElement(9, red); colors->SetElement(10, red); colors->SetElement(11, red); Vector<4,float> blue(0.0f, 0.0f, 0.8f, 1.0f); colors->SetElement(12, blue); colors->SetElement(13, blue); colors->SetElement(14, blue); colors->SetElement(15, blue); // Vector<4,float> transparent(0.0f, 0.0f, 0.8f, 0.0f); // colors->SetElement(16, transparent); // colors->SetElement(17, transparent); // colors->SetElement(18, transparent); // colors->SetElement(19, transparent); return new MeshNode(box); }
ISceneNode* SceneCreator::CreateSmallBox() { MeshPtr box = MeshCreator::CreateCube(3, 1, Vector<3,float>(1.0f, 1.0f, 1.0f)); IDataBlockPtr color = Float4DataBlockPtr(new DataBlock<4, float>(box->GetGeometrySet()->GetSize())); for (unsigned int i = 0; i < color->GetSize(); ++i) color->SetElement(i, Vector<4, float>(1.0, 1.0, 1.0, 1.0)); box->GetGeometrySet()->AddAttributeList("color", color); return new MeshNode(box); }
MeshPtr Rotate(MeshPtr mesh, Quaternion<float> rotate) { GeometrySetPtr newGeom = Rotate(mesh->GetGeometrySet(), rotate); return MeshPtr(new Mesh(mesh->GetIndices(), mesh->GetType(), newGeom, mesh->GetMaterial(), mesh->GetIndexOffset(), mesh->GetDrawingRange())); }
MeshPtr Translate(MeshPtr mesh, Vector<3, float> move) { GeometrySetPtr newGeom = Translate(mesh->GetGeometrySet(), move); return MeshPtr(new Mesh(mesh->GetIndices(), mesh->GetType(), newGeom, mesh->GetMaterial(), mesh->GetIndexOffset(), mesh->GetDrawingRange())); }