public Camera(XYZ cs, XYZ_d cPos, World w) { instance = this; camSize = cs; Position = cPos; world = w; worldSize = w.GetWorldSize(); camPoint = new XYZ(camSize).Div(2); position = new XYZ_d(Position); board = new char[camSize.z, camSize.x]; color = new ConsoleColor[camSize.z, camSize.x]; perspArray = new XYZ_d[camSize.x, camSize.z]; indexArray = new XYZ_d[camSize.x, camSize.z]; spinArray = new XYZ_d[camSize.x, camSize.z]; deltaArray = new XYZ_d[camSize.x, camSize.z]; lightArray = new double[camSize.x, camSize.y, camSize.z]; circle = new bool[camPoint.x, camPoint.x]; //double rc_ratio = (1f * camSize.x) / camSize.z; double fov = 1d / 60; for (int i = 0; i < camSize.x; i++) { for (int j = 0; j < camSize.z; j++) { perspArray[i, j] = new XYZ_d(); perspArray[i, j].x = (i - camPoint.x) * (camSize.y - 1) * fov; perspArray[i, j].y = camSize.y - 1; perspArray[i, j].z = (j - camPoint.z) * (camSize.y - 1) * fov; indexArray[i, j] = new XYZ_d(); spinArray[i, j] = new XYZ_d(); deltaArray[i, j] = new XYZ_d(); } } for (int i = 0; i < camPoint.x; i++) { for (int j = 0; j < camPoint.x; j++) { circle[i, j] = false; } } XYZ_d newPos = new XYZ_d(); for (int i = 0; i < camPoint.x / 2; i++) { for (double d = 0; d < 360; d += 0.1d) { Spin_matrix_z(i, 0, 0, Math.Sin(d * PI), Math.Cos(d * PI), newPos); newPos.Add(camPoint.x / 2); int x = newPos.iX; int y = newPos.iY; if (x < camPoint.x && x >= 0 && y < camPoint.x && y >= 0) { circle[x, y] = true; } } } for (int i = 0; i < camSize.x; i++) { for (int j = 0; j < camSize.y; j++) { for (int k = 0; k < camSize.z; k++) { lightArray[i, j, k] = 0; } } } Spin_Light2(); rayDelta = new XYZ_d(); rayStrike = new XYZ_d(); viewer = new Viewer(this, camSize, 3); }