コード例 #1
0
ファイル: V-Camera.cs プロジェクト: NaTure77/CubeWorld
        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);
        }