LiamGoodacre

DivideTriangle

Jan 11th, 2012
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. renderSphere = (quality_level) ->
  2.   # Get basic points
  3.   base = octahedronPoints()
  4.   points = []
  5.  
  6.   # Generate Subdivided points
  7.   for index = 0 to base.length step 3
  8.     points = concat(
  9.       points,
  10.       divideTriangles(
  11.         base[index],
  12.         base[index+1],
  13.         base[index+1],
  14.         quality_level
  15.       )
  16.     )
  17.  
  18.   # Render
  19.   glBegin(GL_TRIANGLES)
  20.   for point in points
  21.     glVertex3f(point.x, point.y, point.z)
  22.   glEnd()
  23.  
  24. divideTriangle = (Vector3f a, Vector3f b, Vector3f c, int level) ->
  25.   Vector3f v0, v1, v2
  26.   if level > 0
  27.     v0 = mid(a, b)
  28.     v1 = mid(b, c)
  29.     v2 = mid(c, a)
  30.    
  31.     return concat(
  32.       divideTriangle(a, v0, v1, level-1),
  33.       divideTriangle(c, v1, v2, level-1),
  34.       divideTriangle(b, v2, v0, level-1)
  35.     )
  36.   else
  37.     return [
  38.       normalise(a),
  39.       normalise(b),
  40.       normalise(c)
  41.     ]
  42.  
  43. mid = (Vector3f a, Vector3f b) ->
  44.   new Vector3f((a.x + b.x) / 2, (a.y + b.y) / 2, (a.z + b.z) / 2)
Advertisement
Add Comment
Please, Sign In to add comment