コード例 #1
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="ret"></param>
        /// <returns></returns>
        public static float Normalize( Vector2 ret)
        {
            //float fLength = Utility.Sqrt(ret.x * ret.x + ret.y * ret.y);

            //// Will also work for zero-sized vectors, but will change nothing
            //if (fLength > 1e-08)
            //{
            //    float fInvLength = 1.0f / fLength;
            //    ret.x *= fInvLength;
            //    ret.y *= fInvLength;
            //}

            //return fLength;
            return ret.Normalise();
        }
コード例 #2
0
        //--------------------------------------------------------------
        public void modify() {
            if (mInputTriangleBuffer == null)
                OGRE_EXCEPT("Exception::ERR_INVALID_STATE", "Input triangle buffer must be set", "__FUNCTION__");
            ;
            //for (List<TriangleBuffer.Vertex>.Enumerator it = mInputTriangleBuffer.getVertices().begin(); it != mInputTriangleBuffer.getVertices().end(); ++it)
            foreach (var it in mInputTriangleBuffer.getVertices()) {
                Vector3 input = it.mPosition.NormalisedCopy;
                Vector3 v = new Vector3();
                Radian r = new Radian();
                if (input.y > 0)
                    Vector3.UNIT_Y.GetRotationTo(input).ToAngleAxis(out r, out v);
                else
                    Vector3.NEGATIVE_UNIT_Y.GetRotationTo(input).ToAngleAxis(out r, out v);
                Vector2 v2 = new Vector2(input.x, input.z);
                v2.Normalise();
                Vector2 uv = new Vector2(0.5f, 0.5f) + 0.5f * (r / Math.HALF_PI).ValueRadians * v2;

                if (input.y > 0)
                    it.mUV = Utils.reframe(mTextureRectangleTop, uv);
                else
                    it.mUV = Utils.reframe(mTextureRectangleBottom, uv);
            }
        }