Пример #1
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="timeSinceLastFrame"></param>
        public void UpdateGeometry(float timeSinceLastFrame)
        {
            // Calculate wind offset
            Vector2 cameraDirection = new Vector2(_vclouds.Camera.DerivedDirection.x, _vclouds.Camera.DerivedDirection.z);
            float offset = -cameraDirection.DotProduct(_vclouds.WindDirectionAsVector2) * _vclouds.WindSpeed * timeSinceLastFrame;
            _worldOffset += _vclouds.WindDirectionAsVector2 * _vclouds.WindSpeed * timeSinceLastFrame;

            // Calculate camera offset
            Vector2 cameraOffset = new Vector2(_vclouds.Camera.DerivedPosition.x - _lastCameraPosition.x, _vclouds.Camera.DerivedPosition.z - _lastCameraPosition.z);
            offset -= cameraOffset.DotProduct(cameraDirection);
            _worldOffset += cameraOffset;

            for (int k = 0; k < _numberOfBlocks; k++)
            {
                _geometryBlocks[k].Update(offset);
                _geometryBlocks[k].WorldOffset = _worldOffset;
            }
        }
Пример #2
0
        //    *
        //	 * Equivalent of Ogre::Vector3::angleBetween, applied to Ogre::Vector2
        //	 
        public static Radian angleBetween(Vector2 v1, Vector2 v2) {
            float lenProduct = v1.Length * v2.Length;
            // Divide by zero check
            if (lenProduct < 1e-6f)
                lenProduct = 1e-6f;

            float f = v1.DotProduct(v2) / lenProduct;

            f = Math_Clamp(f, -1.0f, 1.0f);
            return Math.ACos(f);
        }