示例#1
0
        private int step, stepSize; // values for stepping

        #endregion Fields

        #region Constructors

        // constructors
        /// <summary>
        /// Object that places and orients itself.
        /// </summary>
        /// <param name="theStage"> the stage containing object </param> 
        /// <param name="aModel">how the object looks</param> 
        /// <param name="label"> name of object </param> 
        /// <param name="position"> position in stage </param> 
        /// <param name="orientAxis"> axis to orient on </param> 
        /// <param name="radians"> orientation rotation </param> 
        public Object3D(Stage theStage, Model3D aModel, string label, Vector3 position, 
      Vector3 orientAxis, float radians)
        {
            scales = Vector3.One;  // no scaling of model
              stage = theStage;
              model = aModel;
              name = label;
              step = 1;
              stepSize = 10;
              pitch = yaw = roll = 0.0f;
              orientation = Matrix.Identity;
              orientation *= Matrix.CreateFromAxisAngle(orientAxis, radians);
              orientation *= Matrix.CreateTranslation(position);
              scaleObjectBoundingSphere();
        }
示例#2
0
 /// <summary>
 /// Set GraphicDevice display and rendering BasicEffect effect.  
 /// Create SpriteBatch, font, and font positions.
 /// Creates the traceViewport to display information and the sceneViewport
 /// to render the environment.
 /// Create and add all DrawableGameComponents and Cameras.
 /// First, add all required contest:  Inspector, Cameras, Terrain, Agents
 /// Second, add all optional (scene specific) content
 /// </summary>
 protected override void LoadContent()
 {
     display = graphics.GraphicsDevice;
       effect = new BasicEffect(display);
       // Set up Inspector display
       spriteBatch = new SpriteBatch(display);      // Create a new SpriteBatch
       inspectorFont = Content.Load<SpriteFont> ("Consolas");    // Windows XNA && MonoGames
       // viewports
       defaultViewport = GraphicsDevice.Viewport;
       inspectorViewport = defaultViewport;
       sceneViewport = defaultViewport;
       inspectorViewport.Height = InfoPaneSize * inspectorFont.LineSpacing;
       inspectorProjection = Matrix.CreatePerspectiveFieldOfView((float) Math.PI/4.0f,
      inspectorViewport.Width/inspectorViewport.Height, 1.0f, 200.0f);
       sceneViewport.Height = defaultViewport.Height - inspectorViewport.Height;
       sceneViewport.Y = inspectorViewport.Height;
       sceneProjection = Matrix.CreatePerspectiveFieldOfView((float) Math.PI/4.0f,
      sceneViewport.Width /sceneViewport.Height, 1.0f, 1000.0f);
       // create Inspector display
       Texture2D inspectorBackground = Content.Load<Texture2D>("inspectorBackground");
       inspector = new Inspector(display, inspectorViewport, inspectorFont, Color.Black, inspectorBackground);
       // create information display strings
       // help strings
       inspector.setInfo(0, "AGMGSKv7 -- Academic Graphics MonoGames/XNA Starter Kit for CSUN Comp 565 assignments.");
       inspector.setInfo(1, "Press keyboard for input (not case sensitive 'H' || 'h')");
       inspector.setInfo(2, "Inspector toggles:  'H' help or info   'M'  matrix or info   'I'  displays next info pane.");
       inspector.setInfo(3, "Arrow keys move the player in, out, left, or right.  'R' resets player to initial orientation.");
       inspector.setInfo(4, "Stage toggles:  'B' bounding spheres, 'C' || 'X' cameras, 'F' fog, 'T' updates, 'Y' yon");
       // initialize empty info strings
       for (int i = 5; i < 20; i++) inspector.setInfo(i, "  ");
       // set blending for bounding sphere drawing
       blending = new BlendState();
       blending.ColorSourceBlend = Blend.SourceAlpha;
       blending.ColorDestinationBlend = Blend.InverseSourceAlpha;
       blending.ColorBlendFunction = BlendFunction.Add;
       notBlending = new BlendState();
       notBlending = display.BlendState;
       // Create and add stage components
       // You must have a TopDownCamera, BoundingSphere3D, WayPoint3D, Terrain, and Agents (player, npAgent) in your stage!
       // Place objects at a position, provide rotation axis and rotation radians.
       // All location vectors are specified relative to the center of the stage.
       // Create a top-down "Whole stage" camera view, make it first camera in collection.
       topDownCamera = new Camera(this, Camera.CameraEnum.TopDownCamera);
       camera.Add(topDownCamera);
     // Set initial camera and projection matrix
     setCamera(0);  // select the first camera
       boundingSphere3D = Content.Load<Model>("boundingSphereV3");
       wayPoint3D = Content.Load<Model>("100x50x100Marker");				// model for navigation node display
       // Create required entities:
       collidable = new List<Object3D>();  // collection of objects to test for collisions
     terrain = new Terrain(this, "terrain", "heightTexture", "colorTexture");
       Components.Add(terrain);
       // Load Agent mesh objects, meshes do not have textures
       player = new Player(this, "Chaser",
      new Vector3(510 * spacing, terrain.surfaceHeight(510, 507), 507 * spacing),
      new Vector3(0, 1, 0), 0.78f, "redAvatarV6");  // face looking diagonally across stage
       player.IsCollidable = true; // test collisions for player
       Components.Add(player);
       npAgent = new NPAgent(this, "Evader",
      new Vector3(490 * spacing, terrain.surfaceHeight(490, 450), 450 * spacing),
      new Vector3(0, 1, 0), 0.0f, "magentaAvatarV6");  // facing +Z
     npAgent.IsCollidable = false;  // npAgent does not test for collisions
       Components.Add(npAgent);
     // create file output stream for trace()
     fout = new StreamWriter("trace.txt", false);
     Trace = string.Format("{0} trace output from AGMGSKv7", DateTime.Today.ToString("MMMM dd, yyyy"));
     //  ------ The wall and pack are required for Comp 565 projects, but not AGMGSK   ---------
     // create walls for navigation algorithms
     Wall wall = new Wall(this, "wall", "100x100x100Brick");
     Components.Add(wall);
     // create a pack for "flocking" algorithms
     // create a Pack of 6 dogs centered at (450, 500) that is leaderless
     Pack pack = new Pack(this, "dog", "dogV6", 6, 450, 430, null);
     Components.Add(pack);
       // ----------- OPTIONAL CONTENT HERE -----------------------
       // Load content for your project here
       // create a temple
       Model3D m3d = new Model3D(this, "temple", "templeV3");
       m3d.IsCollidable = true;  // must be set before addObject(...) and Model3D doesn't set it
       m3d.addObject(new Vector3(340 * spacing, terrain.surfaceHeight(340, 340), 340 * spacing),
      new Vector3(0, 1, 0), 0.79f); // , new Vector3(1, 4, 1));
       Components.Add(m3d);
       Model3D treasure = new Model3D(this, "treasure", "treasure2");
       treasure.IsCollidable = true;  // must be set before addObject(...) and Model3D doesn't set it
       treasure.addObject(new Vector3(67050,100,67950),
      new Vector3(0, 1, 0), 0.0f, new Vector3(10,10,10)); // , new Vector3(1, 4, 1));
       Components.Add(treasure);
     // create 20 clouds
     Cloud cloud = new Cloud(this, "cloud", "cloudV3", 20);
     Components.Add(cloud);
     Trace = string.Format("Scene created with {0} collidable objects.", Collidable.Count);
 }