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