void SetupViewport() { var renderer = GetSubsystem <Renderer>(); renderer.SetViewport(0, new Viewport(scene, CameraNode.GetComponent <Camera>())); }
public void RandomizedMassSceneUpdate2() { const int NumberOfSceneNodes = 10; const int NumberOfSteps = 10000; const float WorldSize = 1000; var random = new Random(123457); var scene = new Scene(); scene.EnableMultithreading = false; var nodes = new TestSceneNode[NumberOfSceneNodes]; // Create random nodes. for (int i = 0; i < NumberOfSceneNodes; i++) { var node = new TestSceneNode(); nodes[i] = node; var position = random.NextVector3F(0, WorldSize); var orientation = random.NextQuaternionF(); node.PoseLocal = new Pose(position, orientation); float p = random.NextFloat(0, 100); if (p < 0.1f) node.Shape = Shape.Empty; else if (p < 0.2f) node.Shape = Shape.Infinite; else if (p < 0.6f) node.Shape = new BoxShape(random.NextVector3F(0, WorldSize)); else node.Shape = new SphereShape(random.NextFloat(0, WorldSize)); } var projection = new PerspectiveProjection(); projection.SetFieldOfView(0.8f, 1, WorldSize / 10000, WorldSize); var camera = new Camera(projection); var cameraNode = new CameraNode(camera); for (int updateIndex = 0; updateIndex < NumberOfSteps; updateIndex++) { int actionsPerFrame = random.NextInteger(0, 100); for (int i = 0; i < actionsPerFrame; i++) { var node = nodes[random.Next(0, NumberOfSceneNodes)]; const int numberOfActions = 100; int action = random.Next(0, numberOfActions); //scene.Validate(); if (action == 0) { // Add if (node.Parent == null) { scene.Children.Add(node); //scene.Validate(); } } else if (action == 1) { // Remove if (node.Parent != null) { node.Parent.Children.Remove(node); //scene.Validate(); } } else if (action == 2) { // Move var pose = node.PoseWorld; pose.Position = random.NextVector3F(0, WorldSize); node.PoseWorld = pose; //scene.Validate(); } else if (action == 3) { // Very small Move var pose = node.PoseWorld; const float maxDistance = WorldSize / 10000; pose.Position += random.NextVector3F(-maxDistance, maxDistance); node.PoseWorld = pose; //scene.Validate(); } else if (action == 4) { // Small Move var pose = node.PoseWorld; const float maxDistance = WorldSize / 100; pose.Position += random.NextVector3F(-maxDistance, maxDistance); node.PoseWorld = pose; //scene.Validate(); } else if (action == 5) { // Scale node.ScaleLocal = random.NextVector3F(0.0f, 10f); //scene.Validate(); } else if (action == 6) { // Rotate node.PoseWorld = new Pose(node.PoseWorld.Position, random.NextQuaternionF()); //scene.Validate(); } else if (action == 7) { // Query var query = scene.Query<CameraFrustumQuery>(cameraNode, null); //Debug.WriteLine("Camera queried nodes: " + query.SceneNodes.Count); //scene.Validate(); } else if (action == 8) { // Move camera. cameraNode.PoseWorld = new Pose(random.NextVector3F(0, WorldSize), random.NextQuaternionF()); //scene.Validate(); } else if (action == 9) { // Change shape. int type = random.NextInteger(0, 5); if (type == 0) node.Shape = new BoxShape(random.NextVector3F(0, WorldSize)); else if (type == 1) node.Shape = new SphereShape(random.NextFloat(0, WorldSize)); else if (type == 2) node.Shape = new BoxShape(new Vector3F(Single.MaxValue)); else if (type == 3) node.Shape = new BoxShape(new Vector3F(0)); else if (type == 4) node.Shape = Shape.Empty; //scene.Validate(); } else if (action == 10) { // Add to random parent. if (node.Parent == null) { var randomParent = nodes[random.NextInteger(0, NumberOfSceneNodes - 1)]; // Avoid loops: bool isLoop = node.GetSubtree().Contains(randomParent); if (!isLoop) { if (randomParent.Children == null) randomParent.Children = new SceneNodeCollection(); randomParent.Children.Add(node); } } } else if (action == 11) { if (node.Parent != null && node.Parent != scene) node.Parent.Children.Remove(node); } else if (action == 13) { if (random.NextInteger(0, 100) < 5) scene.Children.Clear(); } else if (action == 14) { if (random.NextInteger(0, 100) < 5) scene.Children = new SceneNodeCollection(); } } //Debug.WriteLine("Number of nodes in scene: " + scene.GetDescendants().Count()); //scene.Validate(); scene.Update(TimeSpan.FromSeconds(0.016666666f)); //scene.Validate(); } }
/// <summary> /// This shader does not support special camera effect. /// </summary> /// <param name="camera"></param> public virtual void SetParameters(CameraNode camera) { }