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(); }
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(); }
public void CreateSecondCamera(Vector<double> cameraPosition, Vector<double> cameraTarget, Vector<double> upVector, PhysicalData pd) { this.secondCamera = new Camera(cameraPosition, cameraTarget, upVector, pd); }
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; }