public void AddSimpleScene() { // Shapes here have local 0,0,0 at center of mass Geometry cubeGeometry = new RenderStack.Geometry.Shapes.Cube(1.0f, 1.0f, 1.0f); GeometryMesh cubeMesh = new GeometryMesh(cubeGeometry, NormalStyle.PolygonNormals); GeometryMesh sphereMesh = new GeometryMesh( new RenderStack.Geometry.Shapes.Sphere(0.75, 20, 12), NormalStyle.CornerNormals ); Geometry cylinderGeometry = new RenderStack.Geometry.Shapes.Cylinder(-0.5f, 0.5f, 0.5f, 24); cylinderGeometry.Transform( Matrix4.CreateRotation( Conversions.DegreesToRadians(90.0f), Vector3.UnitZ ) ); GeometryMesh cylinderMesh = new GeometryMesh(cylinderGeometry, NormalStyle.CornerNormals); Geometry coneGeometry = new RenderStack.Geometry.Shapes.Cone(-1.0f / 3.0f, 2.0f / 3.0f, 0.75f, 0.0f, true, false, 24, 10); coneGeometry.Transform( Matrix4.CreateRotation( Conversions.DegreesToRadians(90.0f), Vector3.UnitZ ) ); GeometryMesh coneMesh = new GeometryMesh(coneGeometry, NormalStyle.CornerNormals); /* Models */ float gap = 2.5f; Material pearl = materialManager["pearl"]; Material gold = materialManager["gold"]; Material red = materialManager["red"]; Material green = materialManager["green"]; Material cyan = materialManager["cyan"]; Material blue = materialManager["blue"]; Material magenta = materialManager["magenta"]; Material pink = materialManager["pink"]; AddModel(new Model("cube", cubeMesh, pearl, -3.5f * gap, 0.5f, 0.0f)); AddModel(new Model("box", cubeMesh, gold, -2.5f * gap, 0.5f, 0.0f)); AddModel(new Model("sphere", sphereMesh, red, -1.5f * gap, 0.75f, 0.0f)); AddModel(new Model("sphere", sphereMesh, green, -0.5f * gap, 0.75f, 0.0f)); AddModel(new Model("cylinder", cylinderMesh, cyan, 0.5f * gap, 0.5f, 0.0f)); AddModel(new Model("cylinder", cylinderMesh, blue, 1.5f * gap, 0.5f, 0.0f)); AddModel(new Model("cone", coneMesh, magenta, 2.5f * gap, 1.0f / 3.0f, 0.0f)); AddModel(new Model("cone", coneMesh, pink, 3.5f * gap, 1.0f / 3.0f, 0.0f)); }
public void MakeBoxScene() { Reset(); float scale = 1.0f; //sceneManager.AddFloor(22.0f * scale, 0, -1.0f); AddFloor(30.0f * scale, 5, -0.5f); #if true float gap = 10.0f; Material magenta = materialManager["magenta"]; for (float x = 0.5f; x <= 2.0f; x += 0.5f) { for (float z = 0.5f; z <= 2.0f; z += 0.5f) { Geometry g = new RenderStack.Geometry.Shapes.Cube( new Vector3(x, 1.0f, z), new IVector3(2, 2, 2) ); //g.Geodesate(); GeometryMesh mesh = new GeometryMesh( g, NormalStyle.CornerNormals ); Shape shape = new BoxShape(x, 1.0f, z); //Shape shape = new RenderStack.Physics.SphereShape(1.0f); AddModel( new Model( "Cube(" + x + ", 1.0, " + z + ")", mesh, magenta, -10.0f + (float)(x * gap), 0.5f, -10.0f + (float)(z * gap) ), shape ); } } #endif AddCameras(); AddCameraUserControls(); }
public void MakeSimpleScene() { System.Console.WriteLine("MakeSimpleScene"); int subdiv = 1; Reset(); float scale = 1.0f; //sceneManager.AddFloor(22.0f * scale, 0, -1.0f); AddFloor(22.0f * scale, 5, -0.5f); /* Renderable meshes */ Geometry cubeGeometry = new RenderStack.Geometry.Shapes.Cube(1.0f, 1.0f, 1.0f); //Geometry cubeGeometry = new RenderStack.Geometry.Shapes.Cube(Vector3.One, new IVector3(20, 20, 20), 1.0f); cubeGeometry = Mush(0.04f, cubeGeometry); /*cubeGeometry.BuildEdges(); * cubeGeometry = new SubdivideGeometryOperation(cubeGeometry).Destination; * cubeGeometry = new SubdivideGeometryOperation(cubeGeometry).Destination; * cubeGeometry = new SubdivideGeometryOperation(cubeGeometry).Destination; * cubeGeometry = new CatmullClarkGeometryOperation(cubeGeometry).Destination; * cubeGeometry.ComputePolygonCentroids(); * cubeGeometry.ComputePolygonNormals(); * cubeGeometry.ComputeCornerNormals(0.0f); * cubeGeometry.BuildEdges();*/ GeometryMesh cubeMesh = new GeometryMesh(cubeGeometry, NormalStyle.PolygonNormals); #if OPENRL Geometry geodesatedBoxGeometry = new RenderStack.Geometry.Shapes.Cube( new Vector3(1.0f, 1.0f, 1.0f), new IVector3(2, 2, 2) ); #else Geometry geodesatedBoxGeometry = new RenderStack.Geometry.Shapes.Cube( new Vector3(1.0f, 1.0f, 1.0f), new IVector3(6, 6, 6) ); #endif geodesatedBoxGeometry.Geodesate(0.75f); // This is the best geo shape but somewhat slow to create #if false Geometry subdividedIcosahedron = new RenderStack.Geometry.Shapes.Icosahedron(1.00); //subdividedIcosahedron = Sqrt3(subdividedIcosahedron); //subdividedIcosahedron = Mush(0.01f, subdividedIcosahedron); GeometryMesh sphereMesh2 = new GeometryMesh( subdividedIcosahedron, NormalStyle.PolygonNormals ); #endif #if false GeometryMesh discMesh = new GeometryMesh( new RenderStack.Geometry.Shapes.Disc(1.0, 0.8, 32, 2), NormalStyle.PolygonNormals ); GeometryMesh triangleMesh = new GeometryMesh( new RenderStack.Geometry.Shapes.Triangle(0.8f / 0.57735027f), NormalStyle.PolygonNormals ); #endif GeometryMesh sphereMesh = new GeometryMesh( //new RenderStack.Geometry.Shapes.Sphere(0.75, 24, 14), geodesatedBoxGeometry, NormalStyle.CornerNormals ); #if false #endif //Geometry cylinderGeometry = new RenderStack.Geometry.Shapes.Cylinder(-0.5f, 0.5f, 0.5f, 24); #if OPENRL Geometry cylinderGeometry = new RenderStack.Geometry.Shapes.Cone(-0.5f, 0.5f, 0.5f, 0.5f, true, true, 5, 1); #else Geometry cylinderGeometry = new RenderStack.Geometry.Shapes.Cone(-0.5f, 0.5f, 0.5f, 0.5f, true, true, 24, 1); #endif cylinderGeometry.Transform( Matrix4.CreateRotation( RenderStack.Math.Conversions.DegreesToRadians(90.0f), Vector3.UnitZ ) ); //cylinderGeometry = Mush(0.08f, cylinderGeometry); GeometryMesh cylinderMesh = new GeometryMesh(cylinderGeometry, NormalStyle.CornerNormals); #if OPENRL Geometry coneGeometry = new RenderStack.Geometry.Shapes.Cone(-1.0f / 3.0f, 2.0f / 3.0f, 0.75f, 0.0f, true, false, 5, 5); #else Geometry coneGeometry = new RenderStack.Geometry.Shapes.Cone(-1.0f / 3.0f, 2.0f / 3.0f, 0.75f, 0.0f, true, false, 24 * subdiv, 10 * subdiv); #endif coneGeometry.Transform( Matrix4.CreateRotation( RenderStack.Math.Conversions.DegreesToRadians(90.0f), Vector3.UnitZ ) ); //coneGeometry = Mush(0.08f, coneGeometry); GeometryMesh coneMesh = new GeometryMesh(coneGeometry, NormalStyle.CornerNormals); /* Physics shapes */ Shape cubeShape = new BoxShape(1.0f, 1.0f, 1.0f); Shape sphereShape = new SphereShape(0.75f); Shape cylinderShape = new CylinderShape(1.0f, 0.5f); Shape coneShape = new ConeShape(1.0f, 0.75f); /* Models */ float gap = 2.5f; //var defaultPng = materialManager.Texture("res/images/default.png", true); Material pearl = materialManager["pearl"]; Material gold = materialManager["gold"]; //Material red = materialManager.MakeTextured("red", defaultPng); Material red = materialManager["red"]; //Material green = materialManager["green"] ; Material transparent = materialManager["transparent"]; Material cyan = materialManager["cyan"]; Material blue = materialManager["blue"]; Material magenta = materialManager["magenta"]; Material pink = materialManager["pink"]; Material hsv = materialManager["HSVColorFill"]; Material hsv2 = materialManager["HSVColorFill2"]; for (int z = 0; z < 1; ++z) { float Z = (float)(1 - z) * gap; AddModel(new Model("cube", cubeMesh, z == 0 ? pearl : pearl, -2.5f * gap, 0.5f, Z), cubeShape); AddModel(new Model("box", cubeMesh, z == 0 ? gold : pearl, -1.5f * gap, 0.5f, Z), cubeShape); AddModel(new Model("sphere", sphereMesh, z == 0 ? red : pearl, -0.5f * gap, 0.75f, Z), sphereShape); AddModel(new Model("cylinder", cylinderMesh, z == 0 ? cyan : pearl, 0.5f * gap, 0.5f, Z), cylinderShape); AddModel(new Model("cylinder", cylinderMesh, z == 0 ? blue : pearl, 1.5f * gap, 0.5f, Z), cylinderShape); AddModel(new Model("cone", coneMesh, z == 0 ? magenta : pearl, 2.5f * gap, 1.0f / 3.0f, Z), coneShape); AddModel(new Model("cone", coneMesh, z == 0 ? pink : pearl, 3.5f * gap, 1.0f / 3.0f, Z), coneShape); //AddModel(new Model("disc", discMesh, hsv, 4.5f * gap, 2.0f, Z), null); //AddModel(new Model("triangle", triangleMesh, hsv2, 4.5f * gap, 2.0f, Z), null); //AddModel(new Model("sphere", sphereMesh2, gold, -0.5f * gap, 0.75f, Z), sphereShape); //AddModel(new Model("sphere", sphereMesh, transparent, -0.5f * gap, 0.75f, Z), sphereShape); } AddCameras(); AddCameraUserControls(); #if false if (RenderStack.Graphics.Configuration.useOpenRL) { var rl = Services.Get <OpenRLRenderer>(); rl.BuildScene(renderGroup); } #endif }