Пример #1
0
        static void HandleRotation(Transform4 t, Viewer4 v, Vector3 p, Quaternion orient)
        {
            var v_ = Handles.RotationHandle(orient, p);

            if (orient != v_)
            {
                Undo.RecordObject(t, "Transform4 Rotation");
                t.Rotate(v_ * Quaternion.Inverse(orient), Space4.View);
            }
        }
Пример #2
0
        static void HandlePosition(Transform4 t, Viewer4 v, Vector3 p, Quaternion orient)
        {
            var v_ = Handles.PositionHandle(p, Tools.pivotRotation == PivotRotation.Global ? Quaternion.identity : orient);

            if (p != v_)
            {
                Undo.RecordObject(t, "Transform4 Position");
                t.Translate((UnityEngine.Vector4)(v_ - p), Space4.View);
            }
        }
        public MainViewModel()
        {
            EffectsManager = new DefaultEffectsManager();
            Title          = "Material Demo";
            this.Camera    = new PerspectiveCamera {
                Position = new Point3D(-30, 30, -30), LookDirection = new Vector3D(30, -30, 30), UpDirection = new Vector3D(0, 1, 0)
            };

            var builder = new MeshBuilder();

            builder.AddBox(new Vector3(0, -6, 0), 200, 2, 100);

            Floor = builder.ToMesh();

            builder = new MeshBuilder();
            builder.AddSphere(Vector3.Zero, 2);

            LoadObj(@"shaderBall\shaderBall.obj");

            EnvironmentMap = LoadFileToMemory("Cubemap_Grandcanyon.dds");

            ColorStripeMaterial.ColorStripeX = GetGradients(new Color4(1, 0, 0, 1), new Color4(0, 1, 0, 1), new Color4(0, 0, 1, 1), 48).ToList();
            ColorStripeMaterial.ColorStripeY = GetGradients(new Color4(1, 1, 0, 1), new Color4(0, 1, 1, 1), new Color4(1, 0, 1, 1), 48).ToList();

            MeshTitles = new BillboardText3D();
            MeshTitles.TextInfo.Add(new TextInfo("Blinn", Transform1.ToVector3())
            {
                Scale = 0.08f, Background = new Color4(1, 1, 1, 1)
            });
            MeshTitles.TextInfo.Add(new TextInfo("Normal", Transform2.ToVector3())
            {
                Scale = 0.08f, Background = new Color4(1, 1, 1, 1)
            });
            MeshTitles.TextInfo.Add(new TextInfo("Diffuse", Transform3.ToVector3())
            {
                Scale = 0.08f, Background = new Color4(1, 1, 1, 1)
            });
            MeshTitles.TextInfo.Add(new TextInfo("Position", Transform4.ToVector3())
            {
                Scale = 0.08f, Background = new Color4(1, 1, 1, 1)
            });
            MeshTitles.TextInfo.Add(new TextInfo("VertexColor", Transform5.ToVector3())
            {
                Scale = 0.08f, Background = new Color4(1, 1, 1, 1)
            });
            MeshTitles.TextInfo.Add(new TextInfo("ColorStripe", Transform6.ToVector3())
            {
                Scale = 0.08f, Background = new Color4(1, 1, 1, 1)
            });
            (FloorMaterial as PhongMaterial).RenderShadowMap = true;
        }
Пример #4
0
        public List <byte> Write()
        {
            List <byte> bytes = new List <byte>();

            bytes.AddRange(Transform1.Write());
            bytes.AddRange(Transform2.Write());
            bytes.AddRange(Transform3.Write());
            bytes.AddRange(Transform4.Write());
            bytes.AddRange(Transform5.Write());

            if (bytes.Count != 320)
            {
                throw new InvalidDataException("FPF_SubEntry is an invalid size.");
            }
            return(bytes);
        }
Пример #5
0
        static void OnSceneGUIHandler(Transform4 target)
        {
            if (Tools.current != Tool.None)
            {
                Handles.BeginGUI();

                var r = new Rect(10, Screen.height - 68, 400, 42);
                GUI.Label(r, new GUIContent("Using 3D Transformation tools for 4D objects. Be careful."), "SC ViewLabel");//.centeredGreyMiniLabel);

                Handles.EndGUI();
                return;
            }
            var t = target;
            var v = Viewer4.main;

            var p      = v.worldToViewerMatrix * t.position;
            var n      = Vector3.Normalize(Camera.current.transform.position - p);
            var s      = HandleUtility.GetHandleSize(p) * 0.2f;
            var orient = GetRotation3D(v.worldToViewerMatrix.rotation * t.rotation * v.viewerToWorldMatrix.rotation);

            Handles.matrix = t.transform.localToWorldMatrix;

            // Give unique indicator
            Handles.color = _themeSolid;
            Handles.DrawSolidDisc(p, n, s);

            Handles.color = _themeWire;
            Handles.DrawWireDisc(p, n, s);

            switch (_tool)
            {
            case Tool4.Move:
                HandlePosition(t, v, p, orient);
                break;

            case Tool4.Rotate:
                HandleRotation(t, v, p, orient);
                break;

            case Tool4.Scale:
                HandleScale(t, v, p, orient);
                break;
            }
        }
Пример #6
0
        static void HandleScale(Transform4 t, Viewer4 v, Vector3 p, Quaternion orient)
        {
            var r  = v.worldToViewerMatrix.rotation * t.localScale;
            var r_ = Handles.ScaleHandle(r, p, orient, HandleUtility.GetHandleSize(p));

            if (r != r_)
            {
                if (IsScaledUniformly(r, r_))
                {
                    r = new Vector4(r_.x, r_.y, r_.z, r.w * r_.x / r.x);
                }
                else
                {
                    r = new Vector4(r_.x, r_.y, r_.z, r.w);
                }
                Undo.RecordObject(t, "Transform4 Scale");
                t.localScale = v.viewerToWorldMatrix * r;
            }
        }
Пример #7
0
        static void OnPrefabDrop(Transform4 t)
        {
            if (Event.current.type == EventType.DragExited)
            {
                //PrefabUtility.SetPropertyModifications(t, new PropertyModification[]
                //{
                //    new PropertyModification() { propertyPath = "m_Position" },
                //    new PropertyModification() { propertyPath = "m_Rotation" }
                //});
                //PrefabUtility.RecordPrefabInstancePropertyModifications(t);
                // Undo.RecordObject(t, "Place " + t.name);

                EditorApplication.delayCall += delegate(){
                    Undo.RecordObject(t, "Place " + t.name);
                    Runtime.TransferTransform3DTo4D(t.gameObject);
                };
                //t.position = Vector4.forward;
                //Debug.Log(t.gameObject.transform.position);
                //Event.current.Use();
            }
        }