// This must be called _BEFORE_ each draw!! public void CompositeXform(ref Matrix4x4 parentXform) { Matrix4x4 orgT = Matrix4x4.Translate(NodeOrigin); Matrix4x4 trs = Matrix4x4.TRS(transform.localPosition, transform.localRotation, transform.localScale); mCombinedParentXform = parentXform * orgT * trs; location = mCombinedParentXform.GetColumn(3); rotation = Quaternion.LookRotation(mCombinedParentXform.GetColumn(2), mCombinedParentXform.GetColumn(1)); // propagate to all children foreach (Transform child in transform) { SceneNode cn = child.GetComponent <SceneNode>(); if (cn != null) { cn.CompositeXform(ref mCombinedParentXform); } } // disenminate to primitives foreach (NodePrimitive p in PrimitiveList) { p.LoadShaderMatrix(ref mCombinedParentXform); } }
// This must be called _BEFORE_ each draw!! public void CompositeXform(ref Matrix4x4 parentXform) { Matrix4x4 orgT = Matrix4x4.Translate(NodeOrigin); Matrix4x4 trs = Matrix4x4.TRS(transform.localPosition, transform.localRotation, transform.localScale); mCombinedParentXform = parentXform * orgT * trs; // propagate to all children foreach (Transform child in transform) { SceneNode cn = child.GetComponent <SceneNode>(); if (cn != null) { cn.CompositeXform(ref mCombinedParentXform); } } // disenminate to primitives foreach (NodePrimitive p in PrimitiveList) { p.LoadShaderMatrix(ref mCombinedParentXform); } // Compute AxisFrame if (AxisFrame != null) { AxisFrame.localPosition = mCombinedParentXform.MultiplyPoint(kDefaultTreeTip); Vector3 p = mCombinedParentXform.MultiplyPoint(kAtPos); Debug.DrawLine(p, AxisFrame.localPosition, Color.red); } }
// This must be called _BEFORE_ each draw!! public void CompositeXform(ref Matrix4x4 parentXform) { Matrix4x4 orgT = Matrix4x4.Translate(NodeOrigin); Matrix4x4 trs = Matrix4x4.TRS(transform.localPosition, transform.localRotation, transform.localScale); mCombinedParentXform = parentXform * orgT * trs; // propagate to all children foreach (Transform child in transform) { SceneNode cn = child.GetComponent <SceneNode>(); if (cn != null) { cn.CompositeXform(ref mCombinedParentXform); } } // disenminate to primitives foreach (NodePrimitive p in PrimitiveList) { p.LoadShaderMatrix(ref mCombinedParentXform); } ////sc = sc.GetComponent<Camera>(); //if (sc != null) // sc.loadCombinedMatrix(ref mCombinedParentXform); }
void Update() { Vector3 pos, dir; Matrix4x4 m = Matrix4x4.identity; RootNode.CompositeXform(ref m, out pos, out dir); }
// tipPos: is the origin of this scene node // topDir: is the y-direction of this node public void CompositeXform(ref Matrix4x4 parentXform, out Vector3 snOrgin, out Vector3 snUp) { Matrix4x4 orgT = Matrix4x4.Translate(NodeOrigin); Matrix4x4 trs = Matrix4x4.TRS(transform.localPosition, transform.localRotation, transform.localScale); mCombinedParentXform = parentXform * orgT * trs; // let's decompose the combined matrix into R, and S Vector3 c0 = mCombinedParentXform.GetColumn(0); Vector3 c1 = mCombinedParentXform.GetColumn(1); Vector3 c2 = mCombinedParentXform.GetColumn(2); Vector3 s = new Vector3(c0.magnitude, c1.magnitude, c2.magnitude); Quaternion q = Quaternion.LookRotation(c2, c1); // creates a rotation matrix with c2-Forward, c1-up snOrgin = mCombinedParentXform.GetColumn(3); snUp = c1; // propagate to all children foreach (Transform child in transform) { SceneNode cn = child.GetComponent <SceneNode>(); if (cn != null) { cn.CompositeXform(ref mCombinedParentXform, out snOrgin, out snUp); } } // disenminate to primitives foreach (NodePrimitive p in PrimitiveList) { p.LoadShaderMatrix(ref mCombinedParentXform); } }
public static void ShowXForm() { if (root != null && preview) { SceneNode tmp = root; Matrix4x4 i = Matrix4x4.identity; tmp.CompositeXform(ref i); } }
void Update() { Vector3 pos, dir; Matrix4x4 m = Matrix4x4.identity; RootNode.CompositeXform(ref m, out pos, out dir); Vector3 p1 = pos; Vector3 p2 = pos + kSightLength * dir; }
void Update() { // (Kyla) so can test magnet in separate scene if (RootNode_Crane != null) { Matrix4x4 m = Matrix4x4.identity; RootNode_Crane.CompositeXform(ref m); } CastClawShadow(); PositionClawObj(); }
private void Update() { Matrix4x4 i = Matrix4x4.identity; TheRoot.CompositeXform(ref i); if (Input.GetKeyDown(KeyCode.Q) || Input.GetKeyDown(KeyCode.Escape)) { Application.Quit(); } }
// This must be called _BEFORE_ each draw!! public void CompositeXform(ref Matrix4x4 parentXform) { Matrix4x4 orgT = Matrix4x4.Translate(NodeOrigin); Matrix4x4 trs = Matrix4x4.TRS(transform.localPosition, transform.localRotation, transform.localScale); mCombinedParentXform = parentXform * orgT * trs; // propagate to all children foreach (Transform child in transform) { SceneNode cn = child.GetComponent <SceneNode>(); if (cn != null) { cn.CompositeXform(ref mCombinedParentXform); } } // disenminate to primitives foreach (NodePrimitive p in PrimitiveList) { p.LoadShaderMatrix(ref mCombinedParentXform); } // Compute AxisFrame if (AxisFrame != null) { AxisFrame.localPosition = mCombinedParentXform.MultiplyPoint(kDefaultTreeTip); // // What is going on in the next two lines of code? Vector3 up = mCombinedParentXform.GetColumn(1).normalized; Vector3 forward = mCombinedParentXform.GetColumn(2).normalized; if (UseUnity) { AxisFrame.localRotation = Quaternion.LookRotation(forward, up); } else { // First align up direction, remember that the default AxisFrame.up is simply the y-axis float angle = Mathf.Acos(Vector3.Dot(Vector3.up, up)) * Mathf.Rad2Deg; Vector3 axis = Vector3.Cross(Vector3.up, up); AxisFrame.localRotation = Quaternion.AngleAxis(angle, axis); // Now, align the forward axis angle = Mathf.Acos(Vector3.Dot(AxisFrame.transform.forward, forward)) * Mathf.Rad2Deg; axis = Vector3.Cross(AxisFrame.transform.forward, forward); AxisFrame.localRotation = Quaternion.AngleAxis(angle, axis) * AxisFrame.localRotation; } } CalcHead(); }
// This must be called _BEFORE_ each draw!! public void CompositeXform(ref Matrix4x4 parentXform) { Matrix4x4 pivot = Matrix4x4.TRS(Pivot, Quaternion.identity, Vector3.one); // Pivot translation Matrix4x4 invPivot = Matrix4x4.TRS(-Pivot, Quaternion.identity, Vector3.one); // inv Pivot Matrix4x4 trs = Matrix4x4.TRS(transform.localPosition, transform.localRotation, transform.localScale); mCombinedParentXform = parentXform * pivot * trs; // propagate to all children foreach (Transform child in transform) { SceneNode cn = child.GetComponent <SceneNode>(); if (cn != null) { cn.CompositeXform(ref mCombinedParentXform); } } // disenminate to primitives foreach (NodePrimitive p in PrimitiveList) { p.LoadShaderMatrix(ref mCombinedParentXform); } // Compute AxisFrame if (pivotP != null) { Vector3 x = mCombinedParentXform.GetColumn(0); Vector3 y = mCombinedParentXform.GetColumn(1); Vector3 z = mCombinedParentXform.GetColumn(2); Vector3 size = new Vector3(x.magnitude, y.magnitude, z.magnitude); Matrix4x4 xform = mCombinedParentXform * invPivot; pivotP.transform.localPosition = xform.MultiplyPoint(defaultPivotPos); pivotP.transform.localRotation = Quaternion.LookRotation(z / size.z, y / size.y); } if (isCamera) { if (smallViewCamera != null) { Vector3 x = mCombinedParentXform.GetColumn(0); Vector3 y = mCombinedParentXform.GetColumn(1); Vector3 z = mCombinedParentXform.GetColumn(2); Vector3 size = new Vector3(x.magnitude, y.magnitude, z.magnitude); Matrix4x4 xform = mCombinedParentXform * invPivot; smallViewCamera.transform.localPosition = xform.MultiplyPoint(cameraPos); smallViewCamera.transform.localRotation = Quaternion.LookRotation(y / size.y, -z / size.z); } } }
void Update() { Vector3 pos, dir; Matrix4x4 m = Matrix4x4.identity; RootNode.CompositeXform(ref m); if (rocket.activeSelf) { pos = rocket.transform.position; dir = rocket.transform.up; } else { pos = SceneNode.selected.snOrigin; dir = SceneNode.selected.snUp; } Vector3 p1 = pos; Vector3 p2 = pos + kSightLength * dir; LineOfSight.SetEndPoints(p1, p2); // Now update NodeCam NodeCam.transform.localPosition = pos + kNodeCamPos * dir; //NodeCam.transform.localPosition = pos; // NodeCam.transform.LookAt(p2, Vector3.up); //NodeCam.transform.forward = (p2 - NodeCam.transform.localPosition).normalized; NodeCam.transform.forward = dir.normalized; if (rocket.activeSelf) { if (Vector3.Distance(rocket.transform.position, RootNode.transform.position) < 10) { Destroy(explosion); explosion = Instantiate(explosionModel, rocket.transform.position, Quaternion.identity) as GameObject; rocket.SetActive(false); } if (Vector3.Distance(rocket.transform.position, alien.transform.position) < 2) { Destroy(explosion); explosion = Instantiate(explosionModel, rocket.transform.position, Quaternion.identity) as GameObject; alien.SetActive(false); } else { CheckCollision(RootNode.transform); } } }
void Update() { Vector3 pos, dir; Matrix4x4 m = Matrix4x4.identity; RootNode.CompositeXform(ref m, out pos, out dir); Vector3 p1 = pos; Vector3 p2 = pos + kSightLength * dir; // Now update NodeCam NodeCam.transform.localPosition = pos + CameraDistance * dir; // NodeCam.transform.LookAt(p2, Vector3.up); NodeCam.transform.forward = (p2 - NodeCam.transform.localPosition).normalized; }
// tipPos: is the origin of this scene node // topDir: is the y-direction of this node public void CompositeXform(ref Matrix4x4 parentXform, out Vector3 snPivot, out Vector3 snUp) { Matrix4x4 pivot = Matrix4x4.TRS(Pivot, Quaternion.identity, Vector3.one); // Pivot translation //Matrix4x4 invPivot = Matrix4x4.TRS(-Pivot, Quaternion.identity, Vector3.one); // inv Pivot Matrix4x4 trs = Matrix4x4.TRS(transform.localPosition, transform.localRotation, transform.localScale); mCombinedParentXform = parentXform * pivot * trs; // let's decompose the combined matrix into R, and S Vector3 c0 = mCombinedParentXform.GetColumn(0); Vector3 c1 = mCombinedParentXform.GetColumn(1); Vector3 c2 = mCombinedParentXform.GetColumn(2); Vector3 s = new Vector3(c0.magnitude, c1.magnitude, c2.magnitude); Matrix4x4 r = Matrix4x4.identity; c0 /= s.x; // normalize the columns c1 /= s.y; c2 /= s.z; r.SetColumn(0, c0); r.SetColumn(1, c1); r.SetColumn(2, c2); //Quaternion q = Quaternion.LookRotation(c2, c1); // creates a rotation matrix with c2-Forward, c1-up snPivot = mCombinedParentXform.GetColumn(3); snUp = c1; //AxisFrame.transform.localPosition = snPivot; // our location is Pivot //AxisFrame.transform.localScale = s * kAxisFrameSize; //AxisFrame.transform.localRotation = q; // propagate to all children foreach (Transform child in transform) { SceneNode cn = child.GetComponent <SceneNode>(); if (cn != null) { cn.CompositeXform(ref mCombinedParentXform, out snPivot, out snUp); } } // disenminate to primitives foreach (NodePrimitive p in PrimitiveList) { p.LoadShaderMatrix(ref mCombinedParentXform); } }
// This must be called _BEFORE_ each draw!! public void CompositeXform(ref Matrix4x4 parentXform) { Matrix4x4 orgT = Matrix4x4.Translate(NodeOrigin); Matrix4x4 orgR = Matrix4x4.Rotate(rotation); //Debug.Log("localPos:" + transform.localPosition + " localRot: " + transform.localRotation + " localScale: " + transform.localScale); Matrix4x4 trs = Matrix4x4.TRS(transform.localPosition, transform.localRotation, transform.localScale); mCombinedParentXform = parentXform * orgT * orgR * trs; // propagate to all children foreach (Transform child in transform) { SceneNode cn = child.GetComponent <SceneNode>(); if (cn != null) { cn.CompositeXform(ref mCombinedParentXform); } } // disenminate to primitives foreach (NodePrimitive p in PrimitiveList) { p.LoadShaderMatrix(ref mCombinedParentXform); } // Compute AxisFrame if (AxisFrame != null) { AxisFrame.localPosition = mCombinedParentXform.MultiplyPoint(Vector3.zero); Vector3 up = mCombinedParentXform.GetColumn(1).normalized; Vector3 forward = mCombinedParentXform.GetColumn(2).normalized; float angle = Mathf.Acos(Vector3.Dot(Vector3.up, up)) * Mathf.Rad2Deg; Vector3 axis = Vector3.Cross(Vector3.up, up); AxisFrame.localRotation = Quaternion.AngleAxis(angle, axis); angle = Mathf.Acos(Vector3.Dot(AxisFrame.transform.forward, forward)) * Mathf.Rad2Deg; axis = Vector3.Cross(AxisFrame.transform.forward, forward); AxisFrame.localRotation = Quaternion.AngleAxis(angle, axis) * AxisFrame.localRotation; } }
// This must be called _BEFORE_ each draw!! public void CompositeXform(ref Matrix4x4 parentXform) { Matrix4x4 orgT = Matrix4x4.Translate(NodeOrigin); Matrix4x4 trs = Matrix4x4.TRS(transform.localPosition, transform.localRotation, transform.localScale); mCombinedParentXform = parentXform * orgT * trs; // propagate to all children foreach (Transform child in transform) { SceneNode cn = child.GetComponent <SceneNode>(); if (cn != null) { cn.CompositeXform(ref mCombinedParentXform); } } // disenminate to primitives foreach (NodePrimitive p in PrimitiveList) { p.LoadShaderMatrix(ref mCombinedParentXform); } /*/ Compute AxisFrame * if (AxisFrame != null) * { * AxisFrame.GetComponent<Renderer>().enabled = false; * if (Parent != null) * { * AxisFrame.localPosition = mCombinedParentXform.MultiplyPoint(transform.localPosition); * AxisFrame.localRotation = transform.localRotation; * } * else * { * AxisFrame.localPosition = transform.localPosition + Offset; * AxisFrame.localRotation = transform.localRotation; * } * }*/ }
// This must be called _BEFORE_ each draw!! public void CompositeXform(ref Matrix4x4 parentXform) { Matrix4x4 pivot = Matrix4x4.TRS(Pivot, Quaternion.identity, Vector3.one); // Pivot translation //Matrix4x4 invPivot = Matrix4x4.TRS(-Pivot, Quaternion.identity, Vector3.one); // inv Pivot Matrix4x4 trs = Matrix4x4.TRS(transform.localPosition, transform.localRotation, transform.localScale); //Debug.Log( transform.gameObject.name + " Pivot\n" + pivot.ToString()); // Sets new reference point // Inverse of the pivot is calculated in the node primitive class mCombinedParentXform = parentXform * pivot * trs; // propagate to all children foreach (Transform child in transform) { SceneNode cn = child.GetComponent <SceneNode>(); //Debug.Log("Traversing: " + transform.gameObject.name); if (cn != null) { cn.CompositeXform(ref mCombinedParentXform); } } // disenminate to primitives foreach (NodePrimitive p in PrimitiveList) { p.LoadShaderMatrix(ref mCombinedParentXform); } //Debug.Log(transform.gameObject.name + " local position : " + transform.localPosition.ToString()); //Debug.Log(transform.gameObject.name + " reference position:\n" + mCombinedParentXform.ToString()); //Debug.Log(transform.gameObject.name + " Pivot " + Pivot.ToString()); // Compute AxisFrame // if (AxisFrame != null) //{ // AxisFrame.localPosition = mCombinedParentXform.MultiplyPoint(Pivot); // AxisFrame.localRotation = transform.rotation; // axis frame matches selected node's rotation //Debug.Log("Axis Frame Position from " + transform.gameObject.name + " : " + mCombinedParentXform.MultiplyPoint(Pivot).ToString()); // } }
// Update is called once per frame void Update() { Time.timeScale = timeScale; Matrix4x4 i = Matrix4x4.identity; TheRoot.CompositeXform(ref i); if (Input.GetKeyDown(KeyCode.H)) { SceneManager.LoadScene("ScottShirleyMP4"); } if (Input.GetKeyDown(KeyCode.P)) { timeScale = (isPause) ? 1 : 0; isPause = !isPause; } if (Input.GetKeyDown(KeyCode.Escape)) { Application.Quit(); } }
// Called before draws public void CompositeXform(ref Matrix4x4 parentXform) { Matrix4x4 orgT = Matrix4x4.Translate(NodeOrigin); Matrix4x4 trs = Matrix4x4.TRS(transform.localPosition, transform.localRotation, transform.localScale); mCombinedParentXform = parentXform * orgT * trs; //Pass to children foreach (Transform child in transform) { SceneNode cn = child.GetComponent <SceneNode>(); if (cn != null) { cn.CompositeXform(ref mCombinedParentXform); } } // Send to primitives foreach (NodePrimitive p in PrimitiveList) { p.LoadShaderMatrix(ref mCombinedParentXform); } }
private void Update() { Matrix4x4 i = Matrix4x4.identity; TheRoot.CompositeXform(ref i); }
private void Update() { shipHealth.text = "Space Ship Health: " + health; if (health <= 0) { SetPlayMode(); warning.text = "Game over! Ship destroyed!"; health = 100; } if (Input.GetKeyDown(KeyCode.X)) { if (giantAsteroids.Count > 0) { for (int k = 0; k < giantAsteroids.Count; k++) { GiantAsteroid ga = giantAsteroids[k]; giantAsteroids.Remove(giantAsteroids[k]); GameObject.Destroy(ga.gameObject); } } } if (TheRoot != null) { Matrix4x4 i = Matrix4x4.identity; TheRoot.CompositeXform(ref i); if (isPlayTime) { TheRoot.transform.localPosition += TheRoot.transform.up * .1f; velocity = TheRoot.transform.up * .1f; timePastInstantiation += Time.deltaTime; curgiantGen += Time.deltaTime; if (curgiantGen >= giantGenInterval) { GameObject g = Instantiate(Resources.Load("Prefabs\\GiantAsteroid")) as GameObject; g.GetComponent <GiantAsteroid>().world = this; // Set spawning location g.transform.localPosition = new Vector3(Random.Range(asteroidSpawningPoint.transform.localPosition.x - 50f, asteroidSpawningPoint.transform.localPosition.x + 50f), Random.Range(asteroidSpawningPoint.transform.localPosition.y - 50f, asteroidSpawningPoint.transform.localPosition.y + 50f), Random.Range(asteroidSpawningPoint.transform.localPosition.z - 50f, asteroidSpawningPoint.transform.localPosition.z + 50f)); giantAsteroids.Add(g.GetComponent <GiantAsteroid>()); // Sets direction of travel and speed of asteroid curgiantGen = 0f; } if (timePastInstantiation >= generateInterval) { GameObject g = Instantiate(Resources.Load("Prefabs\\Asteroid")) as GameObject; g.GetComponent <Asteroid>().Initialize(this); // Set spawning location g.transform.localPosition = new Vector3(Random.Range(asteroidSpawningPoint.transform.localPosition.x - 5f, asteroidSpawningPoint.transform.localPosition.x + 5f), Random.Range(asteroidSpawningPoint.transform.localPosition.y - 5f, asteroidSpawningPoint.transform.localPosition.y + 5f), Random.Range(asteroidSpawningPoint.transform.localPosition.z - 5f, asteroidSpawningPoint.transform.localPosition.z + 5f)); // Sets direction of travel and speed of asteroid g.GetComponent <Asteroid>().SetTravellingDirection(new Vector3(Random.Range(-1, 1), Random.Range(-1, 1), Random.Range(-1, 1))); g.GetComponent <Asteroid>().SetSpeed(15f); asteroids.Add(g.GetComponent <Asteroid>()); timePastInstantiation = 0f; } } else { for (int k = 0; k < giantAsteroids.Count; k++) { GiantAsteroid ga = giantAsteroids[k]; giantAsteroids.Remove(giantAsteroids[k]); GameObject.Destroy(ga.gameObject); } for (int k = 0; k < asteroids.Count; k++) { Asteroid ast = asteroids[k]; asteroids.Remove(asteroids[k]); GameObject.Destroy(ast.gameObject); } foreach (StationarySentry sentry in existingSentries) { sentry.enabled = true; } } } }
void Update() { Matrix4x4 i = Matrix4x4.identity; mBallMachine.CompositeXform(ref i); }
void Update() { Matrix4x4 i = Matrix4x4.identity; root.CompositeXform(ref i); }