Advertisement
PaleoCrafter

Untitled

Jun 6th, 2015
293
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 1.32 KB | None | 0 0
  1. def calcMatrix(): Matrix4d = {
  2.   val m = new Matrix4d()
  3.   m.setIdentity()
  4.   val quad = renderingQuad
  5.  
  6.   // GUI scale
  7.   val guiScale = new Matrix4d(
  8.     1d / pixelSize.width, 0, 0, 0,
  9.     0, 1d / pixelSize.height, 0, 0,
  10.     0, 0, 1, 0,
  11.     0, 0, 0, 1
  12.   )
  13.   m.mul(guiScale)
  14.   // End GUI scale
  15.  
  16.   // Quad scale
  17.   val quadScale = new Matrix4d(
  18.     (quad._2 - quad._1).mag, 0, 0, 0,
  19.     0, (quad._4 - quad._1).mag, 0, 0,
  20.     0, 0, 1, 0,
  21.     0, 0, 0, 1
  22.   )
  23.   m.mul(quadScale)
  24.   // Quad scale
  25.  
  26.   // Rotate
  27.   val v0 = quad._1.normalize
  28.  
  29.   val xAxis = Vector3(1, 0, 0)
  30.   val xRotated = v0 cross xAxis
  31.   val xW = (v0 dot xAxis) + math.sqrt(v0.mag * v0.mag + xAxis.mag * xAxis.mag)
  32.  
  33.   val q = new Quat4d()
  34.  
  35.   q.set(xRotated.x, xRotated.y, xRotated.z, xW)
  36.   q.normalize()
  37.   val xM = new Matrix4d()
  38.   xM.set(q)
  39.  
  40.   val yAxis = Vector3(0, 1, 0)
  41.   val yRotated = v0 cross yAxis
  42.   val yW = (v0 dot yAxis) + math.sqrt(v0.mag * v0.mag + yAxis.mag * yAxis.mag)
  43.  
  44.   q.set(yRotated.x, yRotated.y, yRotated.z, yW)
  45.   q.normalize()
  46.   val yM = new Matrix4d()
  47.   yM.set(q)
  48.   yM.invert()
  49.  
  50.   xM.mul(yM)
  51.   m.mul(xM)
  52.   // End Rotate
  53.  
  54.   // Translate
  55.   val translate = new Matrix4d(
  56.     1, 0, 0, quad._1.x,
  57.     0, 1, 0, quad._1.y,
  58.     0, 0, 1, quad._1.z,
  59.     0, 0, 0, 1
  60.   )
  61.   m.mul(translate)
  62.   // End Translate
  63.  
  64.   m
  65. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement