Exemplo n.º 1
0
        public void InitRenderer(Vector3D pos, Vector3D target)
        {
            // set eye and screen plane position
            _origin = new Vector3D( 0, 0, -5 );
            _p1 = new Vector3D( -4,  3, 0 );
            _p2 = new Vector3D(  4,  3, 0 );
            _p3 = new Vector3D(  4, -3, 0 );
            _p4 = new Vector3D( -4, -3, 0 );
            // calculate camera matrix
            Vector3D zaxis = (target - pos).Normalize();
            Vector3D up = new Vector3D( 0, 1, 0 );
            Vector3D xaxis = up.CrossProduct( zaxis );
            Vector3D yaxis = xaxis.CrossProduct( -zaxis );
            Matrix m = new Matrix();
            m[0] = xaxis.X;
            m[1] = xaxis.Y;
            m[2] = xaxis.Z;
            m[4] = yaxis.X;
            m[5] = yaxis.Y;
            m[6] = yaxis.Z;
            m[8] = zaxis.X;
            m[9] = zaxis.Y;
            m[10] = zaxis.Z;
            m.Invert();
            m[3] = pos.X;
            m[7] = pos.Y;
            m[11] = pos.Z;
            // move camera
            _origin = m.Transform(_origin);
            _p1 = m.Transform( _p1 );
            _p2 = m.Transform( _p2 );
            _p3 = m.Transform( _p3 );
            _p4 = m.Transform( _p4 );
            // calculate screen plane interpolation vectors
            _dX = (_p2 - _p1) * (1.0 / _width);
            _dY = (_p4 - _p1) * (1.0 / _height);

            // setup the tile renderer
            _currCol = 0;
            _currRow = 0; // 20 / Constants.TileSize;
            _xTiles = _width / Constants.TileSize;
            _yTiles = _height / Constants.TileSize; // (_height - 20) / Constants.TileSize;

            // reset counters
            Intersections = 0;
            RaysCast = 0;

            _twister = new Twister(0);
        }