Пример #1
0
        public MainForm()
        {
            // Create form
            InitializeComponent();

            // Create scene
            scene = new Scene(Canvas_Box, Canvas_Box.Width, Canvas_Box.Height);

            scene.Create_Origin();
            scene.Create_Axes();

            // Create cameras
            Perspective_Camera default_camera = new Perspective_Camera(new Vector3D(0, 0, 100), scene.Shape_List[0].Render_Mesh, Vector3D.Unit_Y, Canvas_Box.Width / 10, Canvas_Box.Height / 10, 10, 750);

            scene.Add(default_camera);
            scene.Render_Camera = default_camera;

            Perspective_Camera alternate_camera = new Perspective_Camera(new Vector3D(0, 0, -10), scene.Shape_List[0].Render_Mesh, Vector3D.Unit_Y, Canvas_Box.Width / 10, Canvas_Box.Height / 10, 10, 20)
            {
                Draw_Entire_View = false
            };

            scene.Add(alternate_camera);

            // Create textures
            Bitmap brick  = Properties.Resources.brick;
            Bitmap smiley = Properties.Resources.smiley;

            Texture brick_texture  = new Texture(brick);
            Texture smiley_texture = new Texture(smiley);

            // Create test texture plane
            Plane texture_plane       = new Plane(new Vector3D(100, 0, 0), Vector3D.Unit_Y, Vector3D.Unit_Z, 50, 50, smiley);
            Shape texture_plane_shape = new Shape(texture_plane);

            scene.Add(texture_plane_shape);

            // Create default meshes
            Cube cube_mesh = new Cube(new Vector3D(0, 0, 0), Vector3D.Unit_X, Vector3D.Unit_Y, 50)
            {
                Face_Colour = Color.Green
            };
            Shape cube = new Shape(cube_mesh)
            {
                Selected = true
            };

            scene.Add(cube);

            /*
             * Cuboid cuboid_mesh = new Cuboid(new Vector3D(100, 0, 100), Vector3D.Unit_X, Vector3D.Unit_Y, 30, 40, 90, smiley);
             * Shape cuboid = new Shape(cuboid_mesh);
             * scene.Add(cuboid);
             */

            /*
             * Plane plane_mesh = new Plane(new Vector3D(0, 0, -30), Vector3D.Unit_X, Vector3D.Unit_Y, 100, 100) { Face_Colour = Color.Aqua };
             * Shape plane = new Shape(plane_mesh);
             * scene.Add(plane);
             */

            /*
             * // Add object from file
             * Custom teapot_mesh = new Custom(Vector3D.Zero, Vector3D.Unit_X, Vector3D.Unit_Y, "C:\\Users\\jbrya\\source\\repos\\3D Graphics\\3D Graphics\\Models\\teapot.obj");
             * Shape teapot = new Shape(teapot_mesh);
             * scene.Add(teapot);
             * teapot_mesh.Scale(20);
             */

            Thread graphics_thread = new Thread(Game_Loop);

            graphics_thread.Start();
            graphics_thread.IsBackground = true;
        }
Пример #2
0
        public Main_Form()
        {
            // Create main form
            InitializeComponent();

            // Create scene
            scene = new Scene(Canvas_Box, Canvas_Box.Width, Canvas_Box.Height); // panel?

            // Set settings
            Settings.Mesh_Debug_Output_Verbosity = Verbosity.All;

            // Create origin and axes
            scene.Create_Origin();
            scene.Create_Axes();

            // Create a camera
            double camera_width = Canvas_Box.Width / 10, camera_height = Canvas_Box.Height / 10;

            Perspective_Camera camera = new Perspective_Camera(new Vector3D(0, 0, -100), scene.Meshes[0], Vector3D.Unit_Y, camera_width, camera_height, 10, 750);

            scene.Add(camera);
            scene.Render_Camera = camera;

            // Add some meshes
            Cube cube_mesh = new Cube(new Vector3D(100, 100, 300), Vector3D.Unit_Z, Vector3D.Unit_Y, 100);

            scene.Add(cube_mesh);
            Shape cube = new Shape(cube_mesh, Vector3D.Zero, Constants.Grav_Acc_Vector);

            shapes.Add(cube);

            Square floor_mesh = new Square(Vector3D.Zero, Vector3D.Unit_Z, Vector3D.Unit_Y, 600);

            scene.Add(floor_mesh);
            floor_mesh.Face_Colour = Color.Brown;

            // Add some lights
            Distant_Light distant_light = new Distant_Light(new Vector3D(0, 300, 0), Vector3D.Unit_Z, Vector3D.Unit_Y, 1000);

            scene.Add(distant_light);

            distant_light.Show_Icon = true;

            // Call some methods

            /*
             * scene.Generate_MWV_Matrices();
             * scene.Generate_Shadow_Map(distant_light);
             * distant_light.Export_Shadow_Map();
             */

            // Change some properties
            distant_light.Colour = Color.Goldenrod;

            /*
             * string teapot_file_path = "C:\\Users\\jbrya\\source\\repos\\3D-Engine\\3D-Engine\\External\\Models\\teapot.obj";
             * Custom teapot_mesh = new Custom(new Vector3D(500, 10, 0), Vector3D.Unit_Z, Vector3D.Unit_Y, teapot_file_path);
             *
             * teapot_mesh.Scale(50);
             * teapot_mesh.Face_Colour = Color.Red;
             *
             * scene.Add(teapot_mesh);
             */
            /*
             * string seahorse_file_path = "C:\\Users\\jbrya\\source\\repos\\3D-Engine\\3D-Engine\\External\\Models\\seahorse.obj";
             * Custom seahorse_mesh = new Custom(new Vector3D(1000, 10, 0), Vector3D.Unit_Z, Vector3D.Unit_Y, seahorse_file_path);
             *
             * seahorse_mesh.Scale(50);
             * seahorse_mesh.Face_Colour = Color.Gray;
             *
             * scene.Add(seahorse_mesh);
             */
            /*
             * Cone cone_mesh = new Cone(new Vector3D(1000, 10, 0), Vector3D.Unit_Z, Vector3D.Unit_Y, 50, 25, 50);
             * cone_mesh.Face_Colour = Color.Aquamarine;
             * scene.Add(cone_mesh);
             *
             * Cylinder cylinder_mesh = new Cylinder(new Vector3D(1500, 10, 0), Vector3D.Unit_Z, Vector3D.Unit_Y, 100, 50, 50);
             * scene.Add(cylinder_mesh);
             *
             * Ring ring_mesh = new Ring(new Vector3D(0, 500, 0), Vector3D.Unit_Z, Vector3D.Unit_Y, 100, 200, 50);
             * scene.Add(ring_mesh);
             * ring_mesh.Face_Colour = Color.Orange;
             *
             * Vector3D[] texture_vertices = Texture.Generate_Vertices("Square");
             * Texture smiley = new Texture(Properties.Resources.smiley, texture_vertices);
             * Square square_mesh = new Square(new Vector3D(500, 0, 500), Vector3D.Unit_Y, Vector3D.Unit_Negative_Z, 100, smiley);
             * scene.Add(square_mesh);
             */

            // Start loop
            Thread thread = new Thread(Loop)
            {
                IsBackground = true
            };

            thread.Start();
        }