/// <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(); }
//-------------------------------------------------------------- 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); } }