예제 #1
0
        public override void Render(object opaqueContext, ViewControl vc)
        {
            Matrix4F normWorld = GetManipulatorMatrix();

            if (normWorld == null)
            {
                return;
            }

            var context = opaqueContext as GUILayer.SimpleRenderingContext;

            if (context == null)
            {
                return;
            }

            float RingDiameter = 2 * AxisLength;
            Color xcolor       = (m_hitRegion == HitRegion.XAxis) ? Color.Gold : XAxisColor;
            Color ycolor       = (m_hitRegion == HitRegion.YAxis) ? Color.Gold : YAxisColor;
            Color Zcolor       = (m_hitRegion == HitRegion.ZAxis) ? Color.Gold : ZAxisColor;
            Color lColor       = (m_hitRegion == HitRegion.LookAxis) ? Color.Gold : Color.Cyan;

            float s       = Util.CalcAxisScale(vc.Camera, normWorld.Translation, RingDiameter, vc.Height);
            Vec3F axScale = new Vec3F(s, s, s);

            Matrix4F rot   = new Matrix4F();
            Matrix4F scale = new Matrix4F();

            scale.Scale(axScale);
            rot.RotX(MathHelper.PiOver2);
            Matrix4F xform = scale * rot * normWorld;

            Util3D.DrawRing(context, xform, Zcolor);

            rot.RotZ(-MathHelper.PiOver2);
            xform = scale * rot * normWorld;
            Util3D.DrawRing(context, xform, xcolor);

            xform = scale * normWorld;
            Util3D.DrawRing(context, xform, ycolor);

            Matrix4F billboard
                = Util.CreateBillboard(normWorld.Translation, vc.Camera.WorldEye, vc.Camera.Up, vc.Camera.LookAt);

            rot.RotX(MathHelper.PiOver2);
            scale.Scale(s * LookRingScale);
            xform = scale * rot * billboard;
            Util3D.DrawRing(context, xform, lColor);
        }