Example #1
0
        private void withTextureToolStripMenuItem_Click(object sender, EventArgs e)
        {
            const string FILE_NAME = "./EarthTextureSmall.bmp";

            if (File.Exists(FILE_NAME))
            {
                Bitmap bitmap = (Bitmap)Image.FromFile(FILE_NAME);
                viewer3D.AddTexture(bitmap);
                Scene3D scene = new Scene3D();
                scene.LightList.Add(light);
                sphere = new Sphere3D();
                sphere.Generate(new List <double>()
                {
                    2, 64, 64
                });
                sphere.AmbientColor  = Color.FromArgb(255, 255, 255);
                sphere.DiffuseColor  = Color.FromArgb(255, 255, 255);
                sphere.SpecularColor = Color.White;
                sphere.Shininess     = 20;
                sphere.ShowVertices  = false;
                sphere.ShowWireFrame = false;
                sphere.ShowSurfaces  = true;
                sphere.UseLight      = true;
                sphere.ShadingModel  = ShadingModel.Smooth;
                sphere.SetTexture(1);
                scene.AddObject(sphere);
                viewer3D.Scene = scene;
                viewer3D.Invalidate();
            }
        }
Example #2
0
        private void surfacesWireframeAndVerticesSmoothShadingToolStripMenuItem_Click(object sender, EventArgs e)
        {
            sphere = new Sphere3D();
            sphere.Generate(new List <double>()
            {
                2, 64, 64
            });
            Scene3D scene = new Scene3D();

            scene.LightList.Add(light);
            scene.AddObject(sphere);
            sphere.AmbientColor  = Color.FromArgb(0, 255, 0);
            sphere.DiffuseColor  = Color.FromArgb(0, 255, 0);
            sphere.SpecularColor = Color.White;
            sphere.Shininess     = 20;
            sphere.SetUniformColor(Color.White); // This color is used ONLY for the wireframe.
            sphere.ShowVertices   = true;
            sphere.ShowWireFrame  = true;
            sphere.ShowSurfaces   = true;
            sphere.WireFrameWidth = 1.5f;
            sphere.VertexSize     = 2.5f;
            sphere.UseLight       = true;
            sphere.ShadingModel   = ShadingModel.Smooth;
            sphere.Alpha          = 0.5f;
            viewer3D.Scene        = scene;
        }
Example #3
0
        private void translucentToolStripMenuItem_Click(object sender, EventArgs e)
        {
            sphere = new Sphere3D();
            sphere.Generate(new List <double>()
            {
                2, 64, 64
            });
            Scene3D scene = new Scene3D();

            scene.LightList.Add(light);
            scene.AddObject(sphere);
            sphere.AmbientColor  = Color.FromArgb(255, 255, 255);
            sphere.DiffuseColor  = Color.FromArgb(255, 255, 255);
            sphere.SpecularColor = Color.White;
            sphere.Shininess     = 20;
            sphere.ShowVertices  = false;
            sphere.ShowWireFrame = false;
            sphere.ShowSurfaces  = true;
            sphere.UseLight      = true;
            sphere.ShadingModel  = ShadingModel.Smooth;
            sphere.SetAlpha(0.5f);
            Sphere3D smallSphere = new Sphere3D();

            smallSphere.Generate(new List <double>()
            {
                1.5, 64, 64
            });
            smallSphere.AmbientColor  = Color.FromArgb(0, 0, 255);
            smallSphere.DiffuseColor  = Color.FromArgb(0, 0, 255);
            smallSphere.SpecularColor = Color.White;
            smallSphere.Shininess     = 20;
            smallSphere.SetUniformColor(Color.White); // This color is used ONLY for the wireframe.
            smallSphere.ShowVertices  = false;
            smallSphere.ShowWireFrame = false;
            smallSphere.ShowSurfaces  = true;
            smallSphere.UseLight      = true;
            smallSphere.ShadingModel  = ShadingModel.Smooth;
            scene.AddObject(smallSphere);
            scene.SortForTranslucence();
            viewer3D.Scene = scene;
        }
Example #4
0
        private void noLightToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Scene3D scene = new Scene3D();

            scene.AddObject(sphere);
            sphere = new Sphere3D();
            sphere.Generate(new List <double>()
            {
                2, 64, 64
            });
            sphere.SetUniformColor(Color.FromArgb(0, 255, 0));
            scene.LightList           = new List <Light>();
            viewer3D.Scene            = scene;
            viewer3D.UseSmoothShading = false;
        }
Example #5
0
        private void verticesToolStripMenuItem_Click(object sender, EventArgs e)
        {
            sphere = new Sphere3D();
            sphere.Generate(new List <double>()
            {
                2, 64, 64
            });
            Scene3D scene = new Scene3D();

            scene.AddObject(sphere);
            sphere.ShowVertices  = true;
            sphere.ShowWireFrame = false;
            sphere.ShowSurfaces  = false;
            sphere.VertexSize    = 2f;
            viewer3D.Scene       = scene;
        }
Example #6
0
        private void wireframeToolStripMenuItem_Click(object sender, EventArgs e)
        {
            sphere = new Sphere3D();
            sphere.Generate(new List <double>()
            {
                2, 64, 64
            });
            Scene3D scene = new Scene3D();

            scene.AddObject(sphere);
            sphere.SetUniformColor(Color.FromArgb(255, 255, 255));
            sphere.ShowVertices   = false;
            sphere.ShowWireFrame  = true;
            sphere.ShowSurfaces   = false;
            sphere.WireFrameWidth = 1f;
            viewer3D.Scene        = scene;
        }
Example #7
0
        private void lightSmoothShadingToolStripMenuItem_Click(object sender, EventArgs e)
        {
            sphere = new Sphere3D();
            sphere.Generate(new List <double>()
            {
                2, 64, 64
            });
            sphere.AmbientColor  = Color.FromArgb(0, 255, 0);
            sphere.DiffuseColor  = Color.FromArgb(0, 255, 0);
            sphere.SpecularColor = Color.White;
            sphere.Shininess     = 20;
            Scene3D scene = new Scene3D();

            scene.AddObject(sphere);
            scene.LightList.Add(light);
            viewer3D.Scene            = scene;
            viewer3D.UseSmoothShading = true;
        }
Example #8
0
        private void surfacesNoLightToolStripMenuItem_Click(object sender, EventArgs e)
        {
            sphere = new Sphere3D();
            sphere.Generate(new List <double>()
            {
                2, 64, 64
            });
            Scene3D scene = new Scene3D();

            scene.LightList.Add(light);
            scene.AddObject(sphere);
            sphere.SetUniformColor(Color.FromArgb(0, 255, 0));
            sphere.ShowVertices  = false;
            sphere.ShowWireFrame = false;
            sphere.ShowSurfaces  = true;
            sphere.UseLight      = false;
            sphere.ShadingModel  = ShadingModel.Flat;
            scene.LightList      = new List <Light>();
            viewer3D.Scene       = scene;
        }
Example #9
0
        private void surfacesSmoothShadingToolStripMenuItem_Click(object sender, EventArgs e)
        {
            sphere = new Sphere3D();
            sphere.Generate(new List <double>()
            {
                2, 64, 64
            });
            Scene3D scene = new Scene3D();

            scene.LightList.Add(light);
            scene.AddObject(sphere);
            sphere.AmbientColor  = Color.FromArgb(0, 255, 0);
            sphere.DiffuseColor  = Color.FromArgb(0, 255, 0);
            sphere.SpecularColor = Color.White;
            sphere.Shininess     = 20;
            sphere.ShowVertices  = false;
            sphere.ShowWireFrame = false;
            sphere.ShowSurfaces  = true;
            sphere.UseLight      = true;
            sphere.ShadingModel  = ShadingModel.Smooth;
            viewer3D.Scene       = scene;
        }
Example #10
0
        public void Initialize()
        {
            ClearControls();
            this.slice      = new Rectangle3D();
            this.slice.Name = "SlicePlane";
            // First tool strip: Slice position.
            slicePositionToolStrip         = new ToolStrip();
            slicePositionToolStrip.Dock    = DockStyle.Top;
            currentSliceLabel              = new ToolStripLabel();
            currentSliceLabel.DisplayStyle = ToolStripItemDisplayStyle.Text; // NOTE: The text for this label is set below.
            slicePositionToolStrip.Items.Add(currentSliceLabel);
            zLabel = new ToolStripLabel();
            zLabel.DisplayStyle = ToolStripItemDisplayStyle.Text; // NOTE: The text for this label is set below.
            slicePositionToolStrip.Items.Add(zLabel);
            ToolStripSeparator separator1 = new ToolStripSeparator();

            slicePositionToolStrip.Items.Add(separator1);
            moveUpButton              = new ToolStripButton();
            moveUpButton.Click       += new EventHandler(HandleMoveUpButtonClick);
            moveUpButton.DisplayStyle = ToolStripItemDisplayStyle.Text;
            moveUpButton.Text         = "Move up";
            slicePositionToolStrip.Items.Add(moveUpButton);
            moveDownButton              = new ToolStripButton();
            moveDownButton.Click       += new EventHandler(HandleMoveDownButtonClick);
            moveDownButton.DisplayStyle = ToolStripItemDisplayStyle.Text;
            moveDownButton.Text         = "Move down";
            slicePositionToolStrip.Items.Add(moveDownButton);
            zStepLabel = new ToolStripLabel();
            zStepLabel.DisplayStyle = ToolStripItemDisplayStyle.Text;
            zStepLabel.Text         = "Step: ";
            slicePositionToolStrip.Items.Add(zStepLabel);
            zStepTextBox = new ToolStripTextBox();
            zStepTextBox.DisplayStyle = ToolStripItemDisplayStyle.Text;
            zStepTextBox.Text         = "0.01";
            zStepTextBox.AutoSize     = false;
            zStepTextBox.Width        = 50;
            slicePositionToolStrip.Items.Add(zStepTextBox);
            ToolStripSeparator separator2 = new ToolStripSeparator();

            slicePositionToolStrip.Items.Add(separator2);

            insertSliceButton              = new ToolStripButton();
            insertSliceButton.Click       += new EventHandler(HandleInsertSliceButtonClick);
            insertSliceButton.DisplayStyle = ToolStripItemDisplayStyle.Text;
            insertSliceButton.Text         = "Insert slice";
            slicePositionToolStrip.Items.Add(insertSliceButton);
            removeSliceButton              = new ToolStripButton();
            removeSliceButton.Enabled      = false;
            removeSliceButton.Click       += new EventHandler(HandleRemoveSliceButtonClick);
            removeSliceButton.DisplayStyle = ToolStripItemDisplayStyle.Text;
            removeSliceButton.Text         = "Remove slice";
            slicePositionToolStrip.Items.Add(removeSliceButton);

            // Second tool strip: Slice editing
            sliceEditingToolStrip      = new ToolStrip();
            sliceEditingToolStrip.Dock = DockStyle.Top;
            moveButton = new ToolStripButton();
            moveButton.DisplayStyle    = ToolStripItemDisplayStyle.Text;
            moveButton.Text            = "Move";
            moveButton.CheckOnClick    = true;
            moveButton.Checked         = false;
            moveButton.CheckedChanged += new EventHandler(HandleMoveButtonCheckedChanged);
            sliceEditingToolStrip.Items.Add(moveButton);
            expandButton = new ToolStripButton();
            expandButton.DisplayStyle    = ToolStripItemDisplayStyle.Text;
            expandButton.Text            = "Expand";
            expandButton.CheckOnClick    = true;
            expandButton.Checked         = false;
            expandButton.CheckedChanged += new EventHandler(HandleExpandButtonCheckedChanged);
            sliceEditingToolStrip.Items.Add(expandButton);
            alignXButton              = new ToolStripButton();
            alignXButton.Enabled      = false;
            alignXButton.DisplayStyle = ToolStripItemDisplayStyle.Text;
            alignXButton.Text         = "Align X";
            alignXButton.Click       += new EventHandler(HandleAlignXButtonClick);
            sliceEditingToolStrip.Items.Add(alignXButton);
            alignYButton              = new ToolStripButton();
            alignYButton.Enabled      = false;
            alignYButton.DisplayStyle = ToolStripItemDisplayStyle.Text;
            alignYButton.Text         = "Align Y";
            alignYButton.Click       += new EventHandler(HandleAlignYButtonClick);
            sliceEditingToolStrip.Items.Add(alignYButton);

            // Third tool strip: Rendering tool strip
            renderingToolStrip                  = new ToolStrip();
            renderingToolStrip.Dock             = DockStyle.Top;
            showWireframeButton                 = new ToolStripButton();
            showWireframeButton.DisplayStyle    = ToolStripItemDisplayStyle.Text;
            showWireframeButton.Text            = "Show wireframe";
            showWireframeButton.CheckOnClick    = true;
            showWireframeButton.Checked         = false;
            showWireframeButton.CheckedChanged += new EventHandler(HandleShowWireframeButtonCheckedChanged);
            renderingToolStrip.Items.Add(showWireframeButton);
            showSurfacesButton = new ToolStripButton();
            showSurfacesButton.DisplayStyle    = ToolStripItemDisplayStyle.Text;
            showSurfacesButton.Text            = "Show surfaces";
            showSurfacesButton.CheckOnClick    = true;
            showSurfacesButton.Checked         = true;
            showSurfacesButton.CheckedChanged += new EventHandler(HandleShowSurfacesButtonCheckedChanged);
            renderingToolStrip.Items.Add(showSurfacesButton);
            showVerticesButton = new ToolStripButton();
            showVerticesButton.DisplayStyle    = ToolStripItemDisplayStyle.Text;
            showVerticesButton.Text            = "Show vertices";
            showVerticesButton.CheckOnClick    = true;
            showVerticesButton.Checked         = false;
            showVerticesButton.CheckedChanged += new EventHandler(HandleShowVerticesButtonCheckedChanged);
            renderingToolStrip.Items.Add(showVerticesButton);
            showSlicePlaneButton = new ToolStripButton();
            showSlicePlaneButton.DisplayStyle    = ToolStripItemDisplayStyle.Text;
            showSlicePlaneButton.Text            = "Show slice plane";
            showSlicePlaneButton.CheckOnClick    = true;
            showSlicePlaneButton.Checked         = true;
            showSlicePlaneButton.CheckedChanged += new EventHandler(HandleShowSlicePlaneButtonCheckedChanged);
            renderingToolStrip.Items.Add(showSlicePlaneButton);
            showAxesButton = new ToolStripButton();
            showAxesButton.DisplayStyle    = ToolStripItemDisplayStyle.Text;
            showAxesButton.Text            = "Show axes";
            showAxesButton.CheckOnClick    = true;
            showAxesButton.Checked         = false;
            showAxesButton.CheckedChanged += new EventHandler(HandleShowAxesButtonCheckedChanged);
            renderingToolStrip.Items.Add(showAxesButton);
            ToolStripSeparator separator3 = new ToolStripSeparator();

            renderingToolStrip.Items.Add(separator3);
            numberOfLongitudePointsLabel = new ToolStripLabel();
            numberOfLongitudePointsLabel.DisplayStyle = ToolStripItemDisplayStyle.Text;
            numberOfLongitudePointsLabel.Text         = "Number of longitude points: ";
            renderingToolStrip.Items.Add(numberOfLongitudePointsLabel);
            numberOfLongitudePointsTextBox = new ToolStripTextBox();
            numberOfLongitudePointsTextBox.DisplayStyle = ToolStripItemDisplayStyle.Text;
            numberOfLongitudePointsTextBox.Text         = "32";
            numberOfLongitudePointsTextBox.AutoSize     = false;
            numberOfLongitudePointsTextBox.Width        = 30;
            numberOfLongitudePointsTextBox.TextChanged += new EventHandler(HandleNumberOfLongitudePointsTextBoxTextChanged);
            renderingToolStrip.Items.Add(numberOfLongitudePointsTextBox);
            shadingModelLabel = new ToolStripLabel();
            shadingModelLabel.DisplayStyle = ToolStripItemDisplayStyle.Text;
            shadingModelLabel.Text         = "Shading model";
            renderingToolStrip.Items.Add(shadingModelLabel);
            shadingModelComboBox = new ToolStripComboBox();
            shadingModelComboBox.DropDownStyle = ComboBoxStyle.DropDownList;
            shadingModelComboBox.Items.Add("Flat");
            shadingModelComboBox.Items.Add("Smooth");
            shadingModelComboBox.AutoSize              = false;
            shadingModelComboBox.Width                 = 70;
            shadingModelComboBox.SelectedIndex         = 1; // Default value: Smooth shading
            shadingModelComboBox.SelectedIndexChanged += new EventHandler(HandleShadingModelComboBoxSelectedIndexChanged);
            renderingToolStrip.Items.Add(shadingModelComboBox);
            autoRenderButton = new ToolStripButton();
            autoRenderButton.DisplayStyle    = ToolStripItemDisplayStyle.Text;
            autoRenderButton.Text            = "Autorender";
            autoRenderButton.CheckOnClick    = true;
            autoRenderButton.Checked         = true;
            autoRenderButton.CheckedChanged += new EventHandler(HandleAutoRenderButtonCheckedChanged);
            renderingToolStrip.Items.Add(autoRenderButton);



            splitContainer      = new SplitContainer();
            splitContainer.Dock = DockStyle.Fill;
            this.Controls.Add(splitContainer);
            viewer3D      = new Viewer3D();
            viewer3D.Dock = DockStyle.Fill;
            splitContainer.Panel1.Controls.Add(viewer3D);
            bezierCurveViewer      = new BezierCurveViewer();
            bezierCurveViewer.Dock = DockStyle.Fill;
            splitContainer.Panel2.Controls.Add(bezierCurveViewer);
            splitContainer.SplitterDistance = this.Width / 2;
            bezierCurveViewer.SetRange(-2, 2, -2, 2);
            bezierCurveViewer.SplineCurveChanged  += new EventHandler(HandleBezierSplineViewerSplineCurveChanged);
            bezierCurveViewer.PointsSelected      += new EventHandler(HandleBezierCurveViewerPointsSelected);
            bezierCurveViewer.AllPointsDeSelected += new EventHandler(HandleBezierCurveViewerAllPointsDeSelected);

            // Add the toolstrips in reverse order
            // Strangely enough, they should also apparently be inserted AFTER the SplitContainer, despite
            // the latter's DockStyle (= Fill)!
            this.Controls.Add(renderingToolStrip);
            this.Controls.Add(sliceEditingToolStrip);
            this.Controls.Add(slicePositionToolStrip);

            // MW ToDo: Some ugly hard-coding here...
            scene = new Scene3D();
            Light light = new Light();

            light.Position[1] = -5;
            light.Position[2] = 3;
            light.IsOn        = true;
            scene.LightList.Add(light);
            face.AmbientColor  = Color.FromArgb(255, 205, 148); // Typical skin color approximation
            face.DiffuseColor  = Color.FromArgb(255, 205, 148); // Typical skin color approximation
            face.SpecularColor = Color.White;
            face.Shininess     = 50;                            //  20;
            int numberOfLongitudePoints = int.Parse(numberOfLongitudePointsTextBox.Text);

            face.Generate(new List <double>()
            {
                numberOfLongitudePoints
            });
            scene.AddObject(face);
            slice.AmbientColor  = Color.FromArgb(200, 100, 255, 100);
            slice.DiffuseColor  = Color.FromArgb(200, 100, 255, 100);
            slice.SpecularColor = Color.FromArgb(200, 100, 255, 100);
            slice.Shininess     = 20;
            slice.Generate(new List <double>()
            {
                3.0, 3.0
            });
            scene.AddObject(slice);
            currentSliceIndex = face.HorizontalBezierCurveList.Count / 2;
            slice.Move(0, 0, face.HorizontalBezierCurveList[currentSliceIndex].SplineList[0].ControlPointList[0].CoordinateList[2]);
            //     slice.Translate(0, 0, face.HorizontalBezierCurveList[currentSliceIndex].SplineList[0].ControlPointList[0].CoordinateList[2]);
            bezierCurveViewer.SetBezierCurve(face.HorizontalBezierCurveList[currentSliceIndex]);
            currentSliceLabel.Text    = "Current slice: " + currentSliceIndex.ToString() + " of " + (face.HorizontalBezierCurveList.Count - 1).ToString();
            zLabel.Text               = "z = " + face.HorizontalBezierCurveList[currentSliceIndex].SplineList[0].ControlPointList[0].CoordinateList[2].ToString("0.0000");
            zStepTextBox.TextChanged += new EventHandler(HandleZStepTextBoxTextChanged); // Add the event handler here, AFTER setting the slice index
            viewer3D.Scene            = scene;
            viewer3D.CameraTarget     = new OpenTK.Vector3(0f, 0f, 0.5f);                // The model extends from 0 to 1 in z.

            viewer3D.ArrowUpPressed   -= new EventHandler(HandlerViewer3DArrowUpPressed);
            viewer3D.ArrowUpPressed   += new EventHandler(HandlerViewer3DArrowUpPressed);
            viewer3D.ArrowDownPressed -= new EventHandler(HandleViewer3DArrowDownPressed);
            viewer3D.ArrowDownPressed += new EventHandler(HandleViewer3DArrowDownPressed);
        }
        private void Initialize()
        {
            randomNumberGenerator = new Random();
            string faceFileName = Path.GetDirectoryName(Application.ExecutablePath) + DEFAULT_RELATIVE_FACE_FILE_NAME;

            if (File.Exists(faceFileName))
            {
                face      = (Face)ObjectXmlSerializer.ObtainSerializedObject(faceFileName, typeof(Face));
                face.Name = "Face";
                face.Generate(new List <double> {
                    128
                });
                face.Visible       = true;
                face.SpecularColor = Color.OrangeRed;
                face.Shininess     = 50;

                // A lot of ugly hard-coding here, but OK - just for demonstration:
                face.Object3DList = new List <Object3D>();

                Sphere3D leftEyeBulb = new Sphere3D();
                leftEyeBulb.Generate(new List <double>()
                {
                    0.07, 64, 64
                });
                leftEyeBulb.AmbientColor  = Color.White;
                leftEyeBulb.DiffuseColor  = Color.White;
                leftEyeBulb.SpecularColor = Color.White;
                leftEyeBulb.Shininess     = 50;
                leftEyeBulb.ShowSurfaces  = true;
                // leftEyeBulb.Move(-0.1375, -0.403, 1.145);
                leftEyeBulb.ShadingModel = ShadingModel.Smooth;
                leftEyeBulb.UseLight     = true;
                leftEyeBulb.Name         = "LeftEye";
                leftEyeBulb.Object3DList = new List <Object3D>();

                SphereSegment3D leftEyeIris = new SphereSegment3D();
                leftEyeIris.Generate(new List <double>()
                {
                    0.07, 32, 32, Math.PI / 3
                });
                leftEyeIris.AmbientColor  = Color.Green;
                leftEyeIris.DiffuseColor  = Color.Green;
                leftEyeIris.SpecularColor = Color.White;
                leftEyeIris.Shininess     = 50;
                leftEyeIris.ShowSurfaces  = true;
                //   leftEyeIris.Move(-0.1375, -0.407, 0.145);
                leftEyeIris.Move(0, -0.005, 0);
                leftEyeIris.RotateX(90);
                SphereSegment3D leftEyePupil = new SphereSegment3D();
                leftEyePupil.Generate(new List <double>()
                {
                    0.07, 16, 32, Math.PI / 2 - 0.2
                });
                leftEyePupil.AmbientColor  = Color.Black;
                leftEyePupil.DiffuseColor  = Color.Black;
                leftEyePupil.SpecularColor = Color.White;
                leftEyePupil.Shininess     = 50;
                leftEyePupil.ShowSurfaces  = true;
                leftEyePupil.Move(0, -0.01, 0);
                leftEyePupil.RotateX(90); // , 0, 0);
                                          //   leftEyePupil.RotateX(Math.PI / 2);
                                          //  leftEyePupil.Translate(-0.1375, -0.4758, 0.0725);
                leftEyePupil.ShadingModel = ShadingModel.Smooth;
                leftEyePupil.UseLight     = true;
                SphereSegment3D leftEyeLid = new SphereSegment3D();
                leftEyeLid.Name = "LeftEyeLid";
                leftEyeLid.Generate(new List <double>()
                {
                    0.07, 32, 32, 0.0
                });
                leftEyeLid.AmbientColor  = Color.FromArgb(255, 205, 148); // Typical skin color approximation
                leftEyeLid.DiffuseColor  = Color.FromArgb(255, 205, 148); // Typical skin color approximation
                leftEyeLid.SpecularColor = Color.White;
                leftEyeLid.Shininess     = 50;
                leftEyeLid.ShowSurfaces  = true;
                leftEyeLid.RotateX(-36);
                leftEyeLid.Move(0, -0.015, 0);
                leftEyeBulb.Object3DList.Add(leftEyeIris);
                leftEyeBulb.Object3DList.Add(leftEyePupil);
                leftEyeBulb.Object3DList.Add(leftEyeLid);
                face.Object3DList.Add(leftEyeBulb);

                Sphere3D rightEyeBulb = new Sphere3D();
                rightEyeBulb.Generate(new List <double>()
                {
                    0.07, 64, 64
                });
                rightEyeBulb.AmbientColor  = Color.White;
                rightEyeBulb.DiffuseColor  = Color.White;
                rightEyeBulb.SpecularColor = Color.White;
                rightEyeBulb.Shininess     = 50;
                rightEyeBulb.ShowSurfaces  = true;
                //  rightEyeBulb.Move(0.1375, -0.403, 0.145);
                rightEyeBulb.ShadingModel = ShadingModel.Smooth;
                rightEyeBulb.UseLight     = true;
                rightEyeBulb.Name         = "RightEye";
                rightEyeBulb.Object3DList = new List <Object3D>();
                face.Object3DList.Add(rightEyeBulb);
                SphereSegment3D rightEyeIris = new SphereSegment3D();
                rightEyeIris.Generate(new List <double>()
                {
                    0.07, 32, 32, Math.PI / 3
                });
                rightEyeIris.AmbientColor  = Color.Green;
                rightEyeIris.DiffuseColor  = Color.Green;
                rightEyeIris.SpecularColor = Color.White;
                rightEyeIris.Shininess     = 50;
                rightEyeIris.ShowSurfaces  = true;
                rightEyeIris.RotateX(90); //  , 0, 0);
                rightEyeIris.Move(0, -0.005, 0);
                //   rightEyeIris.RotateX(Math.PI / 2);
                //   rightEyeIris.Translate(0.1375, -0.4715, 0.075);
                rightEyeIris.ShadingModel = ShadingModel.Smooth;
                rightEyeIris.UseLight     = true;
                SphereSegment3D rightEyePupil = new SphereSegment3D();
                rightEyePupil.Generate(new List <double>()
                {
                    0.07, 16, 32, Math.PI / 2 - 0.2
                });
                rightEyePupil.AmbientColor  = Color.Black;
                rightEyePupil.DiffuseColor  = Color.Black;
                rightEyePupil.SpecularColor = Color.White;
                rightEyePupil.Shininess     = 50;
                rightEyePupil.ShowSurfaces  = true;
                rightEyePupil.RotateX(90); //, 0, 0);
                rightEyePupil.Move(0, -0.01, 0);
                //  rightEyePupil.RotateX(Math.PI / 2);
                //  rightEyePupil.Translate(0.1375, -0.4758, 0.0725);
                rightEyePupil.ShadingModel = ShadingModel.Smooth;
                rightEyePupil.UseLight     = true;
                SphereSegment3D rightEyeLid = new SphereSegment3D();
                rightEyeLid.Name = "RightEyeLid";
                rightEyeLid.Generate(new List <double>()
                {
                    0.07, 32, 32, 0.0
                });
                rightEyeLid.AmbientColor  = Color.FromArgb(255, 205, 148); // Typical skin color approximation
                rightEyeLid.DiffuseColor  = Color.FromArgb(255, 205, 148); // Typical skin color approximation
                rightEyeLid.SpecularColor = Color.White;
                rightEyeLid.Shininess     = 50;
                rightEyeLid.ShowSurfaces  = true;
                rightEyeLid.RotateX(-36); // , 0, 0);
                rightEyeLid.Move(0, -0.015, 0);
                rightEyeBulb.Object3DList.Add(rightEyeIris);
                rightEyeBulb.Object3DList.Add(rightEyePupil);
                rightEyeBulb.Object3DList.Add(rightEyeLid);

                TorusSector3D leftEyebrow = new TorusSector3D();
                leftEyebrow.Name = "LeftEyebrow";
                leftEyebrow.Generate(new List <double> {
                    0.15, 0.01, 30, 30, 3 * Math.PI / 2 - 0.60, 3 * Math.PI / 2 + 0.40
                });
                leftEyebrow.AmbientColor  = Color.Black;
                leftEyebrow.DiffuseColor  = Color.Black;
                leftEyebrow.SpecularColor = Color.White;
                leftEyebrow.Shininess     = 50;
                leftEyebrow.ShowSurfaces  = true;
                leftEyebrow.RotateZ(-11);
                TorusSector3D rightEyebrow = new TorusSector3D();
                rightEyebrow.Name = "RightEyebrow";
                rightEyebrow.Generate(new List <double> {
                    0.15, 0.01, 30, 30, 3 * Math.PI / 2 - 0.60, 3 * Math.PI / 2 + 0.40
                });
                rightEyebrow.AmbientColor  = Color.Black;
                rightEyebrow.DiffuseColor  = Color.Black;
                rightEyebrow.SpecularColor = Color.White;
                rightEyebrow.Shininess     = 50;
                rightEyebrow.ShowSurfaces  = true;
                rightEyebrow.RotateZ(11);
                face.Object3DList.Add(leftEyebrow);
                face.Object3DList.Add(rightEyebrow);

                face.Move(0, 0, -0.5);
                leftEyeBulb.Move(-0.1375, -0.403, 0.645);
                rightEyeBulb.Move(0.1375, -0.403, 0.645);
                leftEyebrow.Move(-0.11, -0.325, 0.73);
                rightEyebrow.Move(0.11, -0.325, 0.73);

                // Close eyes to start with:
                leftEyeLid.RotateX(120);
                rightEyeLid.RotateX(120);
                leftEyebrow.Move(0, -0.005, -0.02);
                rightEyebrow.Move(0, -0.005, -0.02);
                eyesClosed = true;

                Scene3D scene = new Scene3D();
                Light   light = new Light();
                light.IsOn     = true;
                light.Position = new List <float>()
                {
                    0.0f, -3.0f, 1f, 1.0f
                };
                scene.LightList.Add(light);
                scene.AddObject(face);
                viewer3D.Scene           = scene;
                viewer3D.ShowWorldAxes   = false; // true;
                viewer3D.CameraDistance  = 0.8;
                viewer3D.CameraLatitude  = Math.PI / 24;
                viewer3D.CameraLongitude = -Math.PI / 2;
                //  viewer3D.Invalidate();
                viewer3D.StartAnimation();
            }

            normalThreadRunning = true;
            normalThread        = new Thread(new ThreadStart(NormalLoop));
            normalThread.Start();
        }
Example #12
0
        private void Initialize()
        {
            randomNumberGenerator = new Random();
            string faceFileName  = Path.GetDirectoryName(Application.ExecutablePath) + FROG_RELATIVE_FACE_FILE_NAME;
            string mouthFileName = Path.GetDirectoryName(Application.ExecutablePath) + FROG_RELATIVE_MOUTH_FILE_NAME;
            string eyeFileName   = Path.GetDirectoryName(Application.ExecutablePath) + FROG_RELATIVE_EYE_FILE_NAME;

            if (File.Exists(faceFileName))
            {
                face      = (Face)ObjectSerializerLibrary.ObjectXmlSerializer.ObtainSerializedObject(faceFileName, typeof(Face));
                face.Name = "Face";
                face.Generate(new List <double> {
                    128
                });
                face.Visible       = true;
                face.SpecularColor = Color.White;
                face.Shininess     = 50;
                face.AmbientColor  = Color.Green;
                // A lot of ugly hard-coding here, but OK - just for demonstration:
                face.Object3DList = new List <Object3D>();

                SphereSegment3D mouth = new SphereSegment3D();
                mouth.Name = "Mouth";
                mouth.Generate(new List <double>()
                {
                    0.85, 16, 16, 0.3
                });
                mouth.AmbientColor  = Color.White;
                mouth.DiffuseColor  = Color.White;
                mouth.SpecularColor = Color.White;
                mouth.RotateX(180);
                mouth.Shininess    = 50;
                mouth.ShowSurfaces = true;
                //mouth.RotateX(-36);
                mouth.Move(0, -0.1f, 0.85f);
                face.Object3DList.Add(mouth);



                #region generateLeftEye
                Sphere3D leftEyeBulb = new Sphere3D();
                leftEyeBulb.Generate(new List <double>()
                {
                    0.20, 64, 64
                });
                leftEyeBulb.AmbientColor  = Color.Yellow;
                leftEyeBulb.DiffuseColor  = Color.White;
                leftEyeBulb.SpecularColor = Color.White;
                leftEyeBulb.Shininess     = 50;
                leftEyeBulb.ShowSurfaces  = true;
                // x z y
                leftEyeBulb.Move(-0.60, 0.34, 0.29);
                leftEyeBulb.ShadingModel = ShadingModel.Smooth;
                leftEyeBulb.UseLight     = true;
                leftEyeBulb.Name         = "LeftEye";
                leftEyeBulb.Object3DList = new List <Object3D>();


                SphereSegment3D leftEyePupil = new SphereSegment3D();
                leftEyePupil.Generate(new List <double>()
                {
                    0.25, 16, 32, Math.PI / 2 - 0.2
                });
                leftEyePupil.AmbientColor  = Color.Black;
                leftEyePupil.DiffuseColor  = Color.Black;
                leftEyePupil.SpecularColor = Color.White;
                leftEyePupil.Shininess     = 50;
                leftEyePupil.ShowSurfaces  = true;
                leftEyePupil.Move(0, 0.05, 0);
                leftEyePupil.RotateX(90); // , 0, 0);
                                          //   leftEyePupil.RotateX(Math.PI / 2);
                                          //  leftEyePupil.Translate(-0.1375, -0.4758, 0.0725);
                leftEyePupil.ShadingModel = ShadingModel.Smooth;
                leftEyePupil.UseLight     = true;


                SphereSegment3D leftEyePupilExtended = new SphereSegment3D();
                leftEyePupilExtended.Generate(new List <double>()
                {
                    0.25, 16, 32, Math.PI / 2 - 0.2
                });
                leftEyePupilExtended.AmbientColor  = Color.Black;
                leftEyePupilExtended.DiffuseColor  = Color.Black;
                leftEyePupilExtended.SpecularColor = Color.White;
                leftEyePupilExtended.Shininess     = 50;
                leftEyePupilExtended.ShowSurfaces  = true;
                leftEyePupilExtended.Move(0, 0.05, 0);
                leftEyePupilExtended.RotateZ(13);
                leftEyePupilExtended.RotateX(87); // , 0, 0);
                //   leftEyePupilExtended.RotateX(Math.PI / 2);
                //  leftEyePupilExtended.Translate(-0.1375, -0.4758, 0.0725);
                leftEyePupilExtended.ShadingModel = ShadingModel.Smooth;
                leftEyePupilExtended.UseLight     = true;


                SphereSegment3D leftEyeLid = new SphereSegment3D();
                leftEyeLid.Name = "LeftEyeLid";
                leftEyeLid.Generate(new List <double>()
                {
                    0.21, 32, 32, 0.0
                });
                leftEyeLid.AmbientColor  = Color.Green; // Typical skin color approximation
                leftEyeLid.DiffuseColor  = Color.Green; // Typical skin color approximation
                leftEyeLid.SpecularColor = Color.White;
                leftEyeLid.Shininess     = 50;
                leftEyeLid.ShowSurfaces  = true;
                leftEyeLid.RotateX(0);
                leftEyeLid.Move(0, 0, 0);
                leftEyeBulb.Object3DList.Add(leftEyePupil);
                leftEyeBulb.Object3DList.Add(leftEyePupilExtended);
                leftEyeBulb.Object3DList.Add(leftEyeLid);
                face.Object3DList.Add(leftEyeBulb);


                SphereSegment3D lowerLeftEyeLid = new SphereSegment3D();
                lowerLeftEyeLid.Name = "LowerLeftEyeLid";
                lowerLeftEyeLid.Generate(new List <double>()
                {
                    0.21, 32, 32, 0.0
                });
                lowerLeftEyeLid.AmbientColor  = Color.Green; // Typical skin color approximation
                lowerLeftEyeLid.DiffuseColor  = Color.Green; // Typical skin color approximation
                lowerLeftEyeLid.SpecularColor = Color.White;
                lowerLeftEyeLid.Shininess     = 50;
                lowerLeftEyeLid.ShowSurfaces  = true;
                lowerLeftEyeLid.RotateX(0);
                lowerLeftEyeLid.RotateY(180);
                lowerLeftEyeLid.Move(0, 0, 0);
                leftEyeBulb.Object3DList.Add(lowerLeftEyeLid);

                //face.Object3DList.Add(leftEyeBulb);
                #endregion
                #region generateRightEye
                Sphere3D rightEyeBulb = new Sphere3D();
                rightEyeBulb.Generate(new List <double>()
                {
                    0.20, 64, 64
                });
                rightEyeBulb.AmbientColor  = Color.Yellow;
                rightEyeBulb.DiffuseColor  = Color.White;
                rightEyeBulb.SpecularColor = Color.White;
                rightEyeBulb.Shininess     = 50;
                rightEyeBulb.ShowSurfaces  = true;
                // x z y
                rightEyeBulb.Move(0.60, 0.34, 0.29);
                rightEyeBulb.ShadingModel = ShadingModel.Smooth;
                rightEyeBulb.UseLight     = true;
                rightEyeBulb.Name         = "RightEye";
                rightEyeBulb.Object3DList = new List <Object3D>();


                SphereSegment3D rightEyePupil = new SphereSegment3D();
                rightEyePupil.Generate(new List <double>()
                {
                    0.25, 16, 32, Math.PI / 2 - 0.2
                });
                rightEyePupil.AmbientColor  = Color.Black;
                rightEyePupil.DiffuseColor  = Color.Black;
                rightEyePupil.SpecularColor = Color.White;
                rightEyePupil.Shininess     = 50;
                rightEyePupil.ShowSurfaces  = true;
                rightEyePupil.Move(0, 0.05, 0);
                rightEyePupil.RotateX(90); // , 0, 0);
                                           //   rightEyePupil.RotateX(Math.PI / 2);
                                           //  rightEyePupil.Translate(-0.1375, -0.4758, 0.0725);
                rightEyePupil.ShadingModel = ShadingModel.Smooth;
                rightEyePupil.UseLight     = true;


                SphereSegment3D rightEyePupilExtended = new SphereSegment3D();
                rightEyePupilExtended.Generate(new List <double>()
                {
                    0.25, 16, 32, Math.PI / 2 - 0.2
                });
                rightEyePupilExtended.AmbientColor  = Color.Black;
                rightEyePupilExtended.DiffuseColor  = Color.Black;
                rightEyePupilExtended.SpecularColor = Color.White;
                rightEyePupilExtended.Shininess     = 50;
                rightEyePupilExtended.ShowSurfaces  = true;
                rightEyePupilExtended.Move(0, 0.05, 0);
                rightEyePupilExtended.RotateZ(13);
                rightEyePupilExtended.RotateX(93); // , 0, 0);
                                                   //   rightEyePupilExtended.RotateX(Math.PI / 2);
                                                   //  rightEyePupilExtended.Translate(-0.1375, -0.4758, 0.0725);
                rightEyePupilExtended.ShadingModel = ShadingModel.Smooth;
                rightEyePupilExtended.UseLight     = true;


                SphereSegment3D rightEyeLid = new SphereSegment3D();
                rightEyeLid.Name = "RightEyeLid";
                rightEyeLid.Generate(new List <double>()
                {
                    0.21, 32, 32, 0.0
                });
                rightEyeLid.AmbientColor  = Color.Green; // Typical skin color approximation
                rightEyeLid.DiffuseColor  = Color.Green; // Typical skin color approximation
                rightEyeLid.SpecularColor = Color.White;
                rightEyeLid.Shininess     = 50;
                rightEyeLid.ShowSurfaces  = true;
                rightEyeLid.RotateX(0);
                rightEyeLid.Move(0, 0, 0);
                rightEyeBulb.Object3DList.Add(rightEyePupil);
                rightEyeBulb.Object3DList.Add(rightEyePupilExtended);
                rightEyeBulb.Object3DList.Add(rightEyeLid);
                face.Object3DList.Add(rightEyeBulb);


                SphereSegment3D lowerRightEyeLid = new SphereSegment3D();
                lowerRightEyeLid.Name = "LowerRightEyeLid";
                lowerRightEyeLid.Generate(new List <double>()
                {
                    0.21, 32, 32, 0.0
                });
                lowerRightEyeLid.AmbientColor  = Color.Green; // Typical skin color approximation
                lowerRightEyeLid.DiffuseColor  = Color.Green; // Typical skin color approximation
                lowerRightEyeLid.SpecularColor = Color.White;
                lowerRightEyeLid.Shininess     = 50;
                lowerRightEyeLid.ShowSurfaces  = true;
                lowerRightEyeLid.RotateX(0);
                lowerRightEyeLid.RotateY(180);
                lowerRightEyeLid.Move(0, 0, 0);
                rightEyeBulb.Object3DList.Add(lowerRightEyeLid);

                #endregion
                face.Move(0, 0, -0.5);
                leftEyeBulb.Move(-0.1375, -0.403, 0.645);
                rightEyeBulb.Move(0.1375, -0.403, 0.645);

                // Close eyes to start with:
                leftEyeLid.RotateX(0);
                rightEyeLid.RotateX(0);
                eyesClosed = true;


                Scene3D scene = new Scene3D();
                Light   light = new Light();
                light.IsOn     = true;
                light.Position = new List <float>()
                {
                    0.0f, -3.0f, 1f, 1.0f
                };
                scene.LightList.Add(light);
                scene.AddObject(face);



                viewer3D.Scene           = scene;
                viewer3D.ShowWorldAxes   = false; // true;
                viewer3D.CameraDistance  = 1.8;
                viewer3D.CameraLatitude  = 0.3;
                viewer3D.CameraLongitude = -1.3; //-Math.PI / 2;

                //viewer3D.Invalidate();

                viewer3D.StartAnimation();
            }

            normalThreadRunning = true;
            normalThread        = new Thread(new ThreadStart(NormalLoop));
            normalThread.Start();
        }