Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def calcMatrix(): Matrix4d = {
- val m = new Matrix4d()
- m.setIdentity()
- val quad = renderingQuad
- // GUI scale
- val guiScale = new Matrix4d(
- 1d / pixelSize.width, 0, 0, 0,
- 0, 1d / pixelSize.height, 0, 0,
- 0, 0, 1, 0,
- 0, 0, 0, 1
- )
- m.mul(guiScale)
- // End GUI scale
- // Quad scale
- val quadScale = new Matrix4d(
- (quad._2 - quad._1).mag, 0, 0, 0,
- 0, (quad._4 - quad._1).mag, 0, 0,
- 0, 0, 1, 0,
- 0, 0, 0, 1
- )
- m.mul(quadScale)
- // Quad scale
- // Rotate
- val v0 = quad._1.normalize
- val xAxis = Vector3(1, 0, 0)
- val xRotated = v0 cross xAxis
- val xW = (v0 dot xAxis) + math.sqrt(v0.mag * v0.mag + xAxis.mag * xAxis.mag)
- val q = new Quat4d()
- q.set(xRotated.x, xRotated.y, xRotated.z, xW)
- q.normalize()
- val xM = new Matrix4d()
- xM.set(q)
- val yAxis = Vector3(0, 1, 0)
- val yRotated = v0 cross yAxis
- val yW = (v0 dot yAxis) + math.sqrt(v0.mag * v0.mag + yAxis.mag * yAxis.mag)
- q.set(yRotated.x, yRotated.y, yRotated.z, yW)
- q.normalize()
- val yM = new Matrix4d()
- yM.set(q)
- yM.invert()
- xM.mul(yM)
- m.mul(xM)
- // End Rotate
- // Translate
- val translate = new Matrix4d(
- 1, 0, 0, quad._1.x,
- 0, 1, 0, quad._1.y,
- 0, 0, 1, quad._1.z,
- 0, 0, 0, 1
- )
- m.mul(translate)
- // End Translate
- m
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement