示例#1
0
 public Camera(Vector<double> cameraPosition, Vector<double> cameraTarget, Vector<double> upVector, PhysicalData pd)
 {
     this.cameraPosition = cameraPosition;
     this.cameraTarget = cameraTarget;
     this.upVector = upVector;
     this.physicalData = pd;
     CreateMatrices();
 }
示例#2
0
        public MainWindow()
        {
            InitializeComponent();

            var cameraPosition = Vector<double>.Build.DenseOfArray(new double[3] { 5, 5, 0.5 });
            var cameraTarget = Vector<double>.Build.DenseOfArray(new double[3] { 0.5, 0, 0 });
            var upVector = Vector<double>.Build.DenseOfArray(new double[3] { 0, 0, 1 });
            PhysicalData pd = new PhysicalData()
            {
                n = 1,
                f = 100,
                fov = 660,
                a = 1
            };

            var cameraPosition2 = Vector<double>.Build.DenseOfArray(new double[3] { 5, -5, 2 });
            var cameraTarget2 = Vector<double>.Build.DenseOfArray(new double[3] { 1, 1, 0 });
            var upVector2 = Vector<double>.Build.DenseOfArray(new double[3] { 0, 0, 1 });
            PhysicalData pd2 = new PhysicalData()
            {
                n = 1,
                f = 150,
                fov = 650,
                a = 1
            };

            p = new Presenter();
            p.CreateMainCamera(cameraPosition, cameraTarget, upVector, pd);
            p.CreateSecondCamera(cameraPosition2, cameraTarget2, upVector2, pd2);
            renderBox.Presenter = p;
            var meshes = JSON.LoadJSONFile(@"../../Resources/scena1.babylon");
            this.meshes
                = renderBox.Meshes
                = meshes.ToList();

            this.cboMeshes.DataSource = this.meshes;
            this.cboMeshes.DisplayMember = "Name";

            this.cboTransformationAxis.DataSource = new BindingSource(this.transformationAxis, null);
            this.cboTransformationAxis.DisplayMember = "Key";
            this.cboTransformationAxis.ValueMember = "Value";

            SetSuzanne();

            T = new Timer();
            T.Interval = 10;

            this.renderBox.Select();
            T.Tick += new EventHandler((object sender, EventArgs e) =>
            {
                renderBox.Render(cboSecondLightSource.Checked);
            });
            T.Start();
        }
示例#3
0
 public void CreateSecondCamera(Vector<double> cameraPosition, Vector<double> cameraTarget, Vector<double> upVector, PhysicalData pd)
 {
     this.secondCamera = new Camera(cameraPosition, cameraTarget, upVector, pd);
 }
示例#4
0
 private Matrix<double> CreateProjectionMatrix(PhysicalData pd)
 {
     double e = 1 / Math.Tan(pd.fov * Math.PI / 180 / 2);
     var result = Matrix<double>.Build.DenseOfRowArrays(new List<double[]> {
         new double[4] {e, 0, 0, 0},
         new double[4] {0, e/pd.a, 0, 0},
         new double[4] {0, 0, -(double)(pd.f+pd.n)/(double)(pd.f-pd.n), -2*(double)(pd.f+pd.n)/(double)(pd.f-pd.n)},
         new double[4] {0,0,-1,0}
     });
     return result;
 }