jax 1.1.1 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (473) hide show
  1. data/.gitignore +4 -0
  2. data/.rvmrc +2 -3
  3. data/.travis.yml +8 -22
  4. data/README.md +2 -2
  5. data/Rakefile +128 -96
  6. data/app/assets/javascripts/jax/controller-list.js.coffee +22 -0
  7. data/app/assets/javascripts/jax/dom-helpers.js.coffee +17 -0
  8. data/app/assets/javascripts/jax/jasmine_runner.js +177 -0
  9. data/app/assets/javascripts/jax/runtime.js +6 -0
  10. data/app/assets/javascripts/jax/shader_editor.js.coffee +33 -0
  11. data/app/assets/stylesheets/jax/controller-list.css +5 -0
  12. data/app/assets/stylesheets/jax/jasmine.css +16 -0
  13. data/app/assets/stylesheets/jax/nav.css +41 -0
  14. data/app/assets/stylesheets/jax/runtime.css +47 -0
  15. data/app/assets/stylesheets/jax/shader_editor.css +3 -0
  16. data/app/assets/stylesheets/jax/suite.css +82 -0
  17. data/app/controllers/jax/suite_controller.rb +48 -0
  18. data/app/views/jax/suite/jasmine.html.erb +38 -0
  19. data/app/views/jax/suite/run_webgl.html.erb +49 -0
  20. data/app/views/jax/suite/shader_editor.html.erb +24 -0
  21. data/app/views/layouts/jax.html.erb +40 -0
  22. data/bin/jax +8 -4
  23. data/config/routes.rb +2 -0
  24. data/config.ru +5 -0
  25. data/features/rails/resources.feature +45 -0
  26. data/features/rails/shaders.feature +13 -0
  27. data/features/rails/specs.feature +24 -0
  28. data/features/runtime.feature +15 -0
  29. data/features/step_definitions/environment_steps.rb +15 -0
  30. data/features/step_definitions/response_steps.rb +13 -0
  31. data/features/step_definitions/runtime.rb +11 -0
  32. data/features/step_definitions/web_steps.rb +223 -0
  33. data/features/support/env.rb +75 -0
  34. data/features/support/paths.rb +30 -0
  35. data/features/support/rails_environment.rb +3 -0
  36. data/features/support/selectors.rb +39 -0
  37. data/features/support/setup.rb +17 -0
  38. data/jax.gemspec +22 -16
  39. data/lib/assets/javascripts/jax/anim_frame.js +64 -0
  40. data/lib/assets/javascripts/jax/application.js +16 -0
  41. data/lib/assets/javascripts/jax/builtin/all.js +21 -0
  42. data/lib/assets/javascripts/jax/builtin/meshes/cube.js +83 -0
  43. data/lib/assets/javascripts/jax/builtin/meshes/plane.js +67 -0
  44. data/lib/assets/javascripts/jax/builtin/meshes/quad.js +89 -0
  45. data/lib/assets/javascripts/jax/builtin/meshes/sphere.js +65 -0
  46. data/lib/assets/javascripts/jax/builtin/meshes/teapot.js +48 -0
  47. data/lib/assets/javascripts/jax/builtin/meshes/torus.js +64 -0
  48. data/lib/assets/javascripts/jax/compatibility.js +312 -0
  49. data/lib/assets/javascripts/jax/context.js +741 -0
  50. data/lib/assets/javascripts/jax/core/base.js +69 -0
  51. data/lib/assets/javascripts/jax/core/glMatrix_ext/mat3.js +20 -0
  52. data/lib/assets/javascripts/jax/core/glMatrix_ext/mat4.js +10 -0
  53. data/lib/assets/javascripts/jax/core/glMatrix_ext/quat4.js +148 -0
  54. data/lib/assets/javascripts/jax/core/glMatrix_ext/vec2.js +25 -0
  55. data/lib/assets/javascripts/jax/core/glMatrix_ext/vec3.js +86 -0
  56. data/lib/assets/javascripts/jax/core/glMatrix_ext/vec4.js +28 -0
  57. data/lib/assets/javascripts/jax/core/helper.js +44 -0
  58. data/lib/assets/javascripts/jax/core/math.js +61 -0
  59. data/lib/assets/javascripts/jax/core/matrix_stack.js +310 -0
  60. data/lib/assets/javascripts/jax/core/util.js +271 -0
  61. data/lib/assets/javascripts/jax/core.js +43 -0
  62. data/lib/assets/javascripts/jax/events.js +304 -0
  63. data/lib/assets/javascripts/jax/geometry/line.js +185 -0
  64. data/lib/assets/javascripts/jax/geometry/plane.js +371 -0
  65. data/lib/assets/javascripts/jax/geometry/triangle/inliner.rb +94 -0
  66. data/lib/assets/javascripts/jax/geometry/triangle/slow_tri_tri_intersect.js +20 -0
  67. data/lib/assets/javascripts/jax/geometry/triangle/tri_tri_intersect.js +281 -0
  68. data/lib/assets/javascripts/jax/geometry/triangle/tri_tri_intersect_optimized.js +564 -0
  69. data/lib/assets/javascripts/jax/geometry/triangle.js +311 -0
  70. data/lib/assets/javascripts/jax/geometry.js +14 -0
  71. data/lib/assets/javascripts/jax/mvc/controller.js +188 -0
  72. data/lib/assets/javascripts/jax/mvc/model.js +302 -0
  73. data/lib/assets/javascripts/jax/mvc/route_set.js +148 -0
  74. data/lib/assets/javascripts/jax/mvc/view.js +43 -0
  75. data/lib/assets/javascripts/jax/mvc/view_manager.js +65 -0
  76. data/lib/assets/javascripts/jax/noise.js +251 -0
  77. data/lib/assets/javascripts/jax/prototype/class.js +81 -0
  78. data/lib/assets/javascripts/jax/prototype/core.js +112 -0
  79. data/lib/assets/javascripts/jax/prototype/extensions.js +142 -0
  80. data/lib/assets/javascripts/jax/vendor/ejs.js +1 -0
  81. data/lib/assets/javascripts/jax/vendor/glMatrix.js +7 -0
  82. data/lib/assets/javascripts/jax/webgl/camera.js +697 -0
  83. data/lib/assets/javascripts/jax/webgl/cleanup.js +1 -0
  84. data/lib/assets/javascripts/jax/webgl/core/buffer.js +292 -0
  85. data/lib/assets/javascripts/jax/webgl/core/data_region.js +184 -0
  86. data/lib/assets/javascripts/jax/webgl/core/data_segment.js +255 -0
  87. data/lib/assets/javascripts/jax/webgl/core/events.js +99 -0
  88. data/lib/assets/javascripts/jax/webgl/core/framebuffer.js +316 -0
  89. data/lib/assets/javascripts/jax/webgl/core.js +6 -0
  90. data/lib/assets/javascripts/jax/webgl/material.js +381 -0
  91. data/lib/assets/javascripts/jax/webgl/mesh/normals.js +37 -0
  92. data/lib/assets/javascripts/jax/webgl/mesh/support.js +104 -0
  93. data/lib/assets/javascripts/jax/webgl/mesh/tangent_space.js +111 -0
  94. data/lib/assets/javascripts/jax/webgl/mesh.js +440 -0
  95. data/lib/assets/javascripts/jax/webgl/scene/frustum.js +422 -0
  96. data/lib/assets/javascripts/jax/webgl/scene/light_manager.js +141 -0
  97. data/lib/assets/javascripts/jax/webgl/scene/light_source.js +300 -0
  98. data/lib/assets/javascripts/jax/webgl/scene.js +16 -0
  99. data/lib/assets/javascripts/jax/webgl/shader/delegator/attribute.js +53 -0
  100. data/lib/assets/javascripts/jax/webgl/shader/delegator/uniform.js +71 -0
  101. data/lib/assets/javascripts/jax/webgl/shader/delegator.js +13 -0
  102. data/lib/assets/javascripts/jax/webgl/shader/manifest.js +70 -0
  103. data/lib/assets/javascripts/jax/webgl/shader/program.js +138 -0
  104. data/lib/assets/javascripts/jax/webgl/shader.js +299 -0
  105. data/lib/assets/javascripts/jax/webgl/shader_chain.js +267 -0
  106. data/lib/assets/javascripts/jax/webgl/texture.js +506 -0
  107. data/lib/assets/javascripts/jax/webgl/world.js +279 -0
  108. data/lib/assets/javascripts/jax/webgl.js +109 -0
  109. data/lib/assets/javascripts/jax.js +136 -0
  110. data/{builtin/app/shaders/basic/common.ejs → lib/assets/javascripts/shaders/basic/common.glsl} +0 -0
  111. data/{builtin/app/shaders/basic/fragment.ejs → lib/assets/javascripts/shaders/basic/fragment.glsl} +0 -0
  112. data/{builtin/app/shaders/basic/vertex.ejs → lib/assets/javascripts/shaders/basic/vertex.glsl} +1 -1
  113. data/{builtin/app/shaders/depthmap/common.ejs → lib/assets/javascripts/shaders/depthmap/common.glsl} +0 -0
  114. data/{builtin/app/shaders/depthmap/fragment.ejs → lib/assets/javascripts/shaders/depthmap/fragment.glsl} +1 -1
  115. data/{builtin/app → lib/assets/javascripts}/shaders/depthmap/material.js +0 -0
  116. data/{builtin/app/shaders/depthmap/vertex.ejs → lib/assets/javascripts/shaders/depthmap/vertex.glsl} +0 -0
  117. data/{builtin/app/shaders/fog/common.ejs → lib/assets/javascripts/shaders/fog/common.glsl} +0 -0
  118. data/{builtin/app/shaders/fog/fragment.ejs → lib/assets/javascripts/shaders/fog/fragment.glsl} +0 -0
  119. data/{builtin/app → lib/assets/javascripts}/shaders/fog/manifest.yml +0 -0
  120. data/{builtin/app → lib/assets/javascripts}/shaders/fog/material.js +6 -8
  121. data/{builtin/app/shaders/fog/vertex.ejs → lib/assets/javascripts/shaders/fog/vertex.glsl} +0 -0
  122. data/{builtin/app/shaders/functions/depth_map.ejs → lib/assets/javascripts/shaders/functions/depth_map.glsl} +0 -0
  123. data/{builtin/app/shaders/functions/lights.ejs → lib/assets/javascripts/shaders/functions/lights.glsl} +0 -0
  124. data/{builtin/app/shaders/functions/noise.ejs → lib/assets/javascripts/shaders/functions/noise.glsl} +0 -0
  125. data/lib/assets/javascripts/shaders/lighting/common.glsl +5 -0
  126. data/{builtin/app/shaders/lighting/fragment.ejs → lib/assets/javascripts/shaders/lighting/fragment.glsl} +0 -0
  127. data/{builtin/app → lib/assets/javascripts}/shaders/lighting/manifest.yml +0 -0
  128. data/{builtin/app → lib/assets/javascripts}/shaders/lighting/material.js +2 -4
  129. data/{builtin/app/shaders/lighting/vertex.ejs → lib/assets/javascripts/shaders/lighting/vertex.glsl} +0 -0
  130. data/{builtin/app/shaders/normal_map/common.ejs → lib/assets/javascripts/shaders/normal_map/common.glsl} +1 -1
  131. data/{builtin/app/shaders/normal_map/fragment.ejs → lib/assets/javascripts/shaders/normal_map/fragment.glsl} +0 -0
  132. data/{builtin/app → lib/assets/javascripts}/shaders/normal_map/manifest.yml +0 -0
  133. data/lib/assets/javascripts/shaders/normal_map/material.js +11 -0
  134. data/{builtin/app/shaders/normal_map/vertex.ejs → lib/assets/javascripts/shaders/normal_map/vertex.glsl} +0 -0
  135. data/{builtin/app/shaders/paraboloid/common.ejs → lib/assets/javascripts/shaders/paraboloid/common.glsl} +0 -0
  136. data/{builtin/app/shaders/paraboloid/fragment.ejs → lib/assets/javascripts/shaders/paraboloid/fragment.glsl} +0 -0
  137. data/{builtin/app → lib/assets/javascripts}/shaders/paraboloid/manifest.yml +0 -0
  138. data/{builtin/app → lib/assets/javascripts}/shaders/paraboloid/material.js +2 -4
  139. data/{builtin/app/shaders/paraboloid/vertex.ejs → lib/assets/javascripts/shaders/paraboloid/vertex.glsl} +0 -0
  140. data/{builtin/app/shaders/picking/common.ejs → lib/assets/javascripts/shaders/picking/common.glsl} +0 -0
  141. data/{builtin/app/shaders/picking/fragment.ejs → lib/assets/javascripts/shaders/picking/fragment.glsl} +0 -0
  142. data/{builtin/app → lib/assets/javascripts}/shaders/picking/material.js +2 -4
  143. data/{builtin/app/shaders/picking/vertex.ejs → lib/assets/javascripts/shaders/picking/vertex.glsl} +0 -0
  144. data/{builtin/app/shaders/shadow_map/common.ejs → lib/assets/javascripts/shaders/shadow_map/common.glsl} +2 -1
  145. data/{builtin/app/shaders/shadow_map/fragment.ejs → lib/assets/javascripts/shaders/shadow_map/fragment.glsl} +1 -1
  146. data/{builtin/app → lib/assets/javascripts}/shaders/shadow_map/manifest.yml +0 -0
  147. data/{builtin/app → lib/assets/javascripts}/shaders/shadow_map/material.js +4 -6
  148. data/{builtin/app/shaders/shadow_map/vertex.ejs → lib/assets/javascripts/shaders/shadow_map/vertex.glsl} +0 -0
  149. data/{builtin/app/shaders/texture/common.ejs → lib/assets/javascripts/shaders/texture/common.glsl} +0 -0
  150. data/{builtin/app/shaders/texture/fragment.ejs → lib/assets/javascripts/shaders/texture/fragment.glsl} +0 -0
  151. data/{builtin/app → lib/assets/javascripts}/shaders/texture/manifest.yml +0 -0
  152. data/lib/assets/javascripts/shaders/texture/material.js +17 -0
  153. data/{builtin/app/shaders/texture/vertex.ejs → lib/assets/javascripts/shaders/texture/vertex.glsl} +0 -0
  154. data/lib/generators/jax/all.rb +16 -0
  155. data/lib/generators/jax/application/application_generator.rb +48 -0
  156. data/lib/generators/jax/base/actions.rb +52 -0
  157. data/lib/generators/jax/base/coffee_generator.rb +30 -0
  158. data/lib/generators/jax/base/named_base.rb +17 -0
  159. data/lib/generators/jax/base/plugin_base.rb +108 -0
  160. data/lib/generators/jax/base/plugin_credentials.rb +99 -0
  161. data/lib/generators/jax/base/plugin_manifest.rb +75 -0
  162. data/lib/generators/jax/base/rails_base.rb +30 -0
  163. data/lib/generators/jax/base/source_root.rb +5 -0
  164. data/lib/generators/jax/controller/controller_generator.rb +37 -0
  165. data/lib/generators/jax/helper/helper_generator.rb +30 -0
  166. data/lib/generators/jax/install/install_generator.rb +27 -0
  167. data/lib/generators/jax/jax_generator.rb +13 -0
  168. data/lib/generators/jax/light/light_generator.rb +23 -0
  169. data/lib/{jax/generators → generators/jax}/material/USAGE +4 -8
  170. data/lib/generators/jax/material/material_generator.rb +112 -0
  171. data/lib/generators/jax/model/model_generator.rb +24 -0
  172. data/lib/generators/jax/plugin/plugin_generator.rb +72 -0
  173. data/lib/generators/jax/scaffold/scaffold_generator.rb +35 -0
  174. data/lib/generators/jax/shader/shader_generator.rb +38 -0
  175. data/lib/jax/commands/plugin_manager.rb +240 -0
  176. data/lib/jax/commands.rb +69 -0
  177. data/lib/jax/configuration.rb +64 -0
  178. data/lib/jax/directive_processor.rb +53 -0
  179. data/lib/jax/engine.rb +38 -54
  180. data/lib/jax/helper_methods.rb +3 -0
  181. data/lib/jax/rails/application.rb +34 -0
  182. data/lib/jax/resource_file.rb +29 -0
  183. data/lib/jax/script_loader.rb +68 -0
  184. data/lib/jax/server.rb +87 -0
  185. data/lib/jax/shader.rb +70 -172
  186. data/lib/jax/testing/rails_environment.rb +94 -0
  187. data/lib/jax/util/tar.rb +75 -0
  188. data/lib/jax/util.rb +3 -0
  189. data/lib/jax/version.rb +7 -8
  190. data/lib/jax.rb +23 -41
  191. data/spec/bin/jax_spec.rb +149 -0
  192. data/{lib/jax/generators/app/templates/app/models/.empty_directory → spec/fixtures/public/favicon.ico} +0 -0
  193. data/spec/fixtures/public/textures/brickwall.jpg +0 -0
  194. data/spec/fixtures/public/textures/jacks.jpg +0 -0
  195. data/spec/fixtures/public/textures/normal_map.jpg +0 -0
  196. data/spec/fixtures/public/textures/rock.png +0 -0
  197. data/spec/fixtures/public/textures/rock_normal.png +0 -0
  198. data/spec/fixtures/public/textures/rss.png +0 -0
  199. data/spec/generators/jax/application_generator_spec.rb +18 -0
  200. data/spec/generators/jax/controller_generator_spec.rb +102 -0
  201. data/spec/generators/jax/helper_generator_spec.rb +55 -0
  202. data/spec/generators/jax/install_generator_spec.rb +30 -0
  203. data/spec/generators/jax/jax_generator_spec.rb +21 -0
  204. data/spec/generators/jax/light_generator_spec.rb +27 -0
  205. data/spec/generators/jax/material_generator_spec.rb +62 -0
  206. data/spec/generators/jax/model_generator_spec.rb +72 -0
  207. data/spec/generators/jax/plugin_generator_spec.rb +143 -0
  208. data/spec/generators/jax/scaffold_generator_spec.rb +35 -0
  209. data/spec/generators/jax/shader_generator_spec.rb +37 -0
  210. data/spec/javascripts/helpers/jasmine_webgl_helper.js +13 -0
  211. data/{lib/jax/generators/app/templates/spec/javascripts/support/spec_helpers → spec/javascripts/helpers}/jax_spec_environment_helper.js +7 -2
  212. data/{lib/jax/generators/app/templates/spec/javascripts/support/spec_helpers → spec/javascripts/helpers}/jax_spec_helper.js +0 -0
  213. data/spec/javascripts/jax/builtin/meshes/cube_spec.js +10 -0
  214. data/spec/javascripts/jax/builtin/meshes/plane_spec.js +8 -0
  215. data/spec/javascripts/jax/builtin/meshes/quad_spec.js +8 -0
  216. data/spec/javascripts/jax/builtin/meshes/sphere_spec.js +8 -0
  217. data/spec/javascripts/jax/builtin/meshes/teapot_spec.js +8 -0
  218. data/spec/javascripts/jax/builtin/meshes/torus_spec.js +8 -0
  219. data/spec/javascripts/jax/compatibility_spec.js +46 -0
  220. data/spec/javascripts/jax/context_events_spec.js +212 -0
  221. data/spec/javascripts/jax/context_spec.js +305 -0
  222. data/spec/javascripts/jax/core/data_region_spec.js +118 -0
  223. data/spec/javascripts/jax/core/data_segment_spec.js +96 -0
  224. data/spec/javascripts/jax/core/delegation_spec.js +48 -0
  225. data/spec/javascripts/jax/core/events_spec.js +17 -0
  226. data/spec/javascripts/jax/core/glMatrix_extensions_spec.js +8 -0
  227. data/spec/javascripts/jax/core/helper_spec.js +61 -0
  228. data/spec/javascripts/jax/core/matrix_stack_spec.js +28 -0
  229. data/spec/javascripts/jax/core/utils_spec.js +275 -0
  230. data/spec/javascripts/jax/geometry/line_spec.js +20 -0
  231. data/spec/javascripts/jax/geometry/plane_spec.js +181 -0
  232. data/spec/javascripts/jax/geometry/triangle_spec.js +105 -0
  233. data/spec/javascripts/jax/mvc/controller_spec.js +156 -0
  234. data/spec/javascripts/jax/mvc/model_spec.js +93 -0
  235. data/spec/javascripts/jax/mvc/route_set_spec.js +49 -0
  236. data/spec/javascripts/jax/mvc/view_manager_spec.js +17 -0
  237. data/spec/javascripts/jax/noise_spec.js +50 -0
  238. data/spec/javascripts/jax/optimizations/material_limitations_spec.js +85 -0
  239. data/spec/javascripts/jax/optimizations/shaders/basic_spec.js +65 -0
  240. data/spec/javascripts/jax/prototype/extensions_spec.js +34 -0
  241. data/spec/javascripts/jax/webgl/camera_spec.js +237 -0
  242. data/spec/javascripts/jax/webgl/core/events_spec.js +47 -0
  243. data/spec/javascripts/jax/webgl/framebuffer_spec.js +44 -0
  244. data/spec/javascripts/jax/webgl/lighting_spec.js +108 -0
  245. data/spec/javascripts/jax/webgl/material_spec.js +117 -0
  246. data/spec/javascripts/jax/webgl/mesh_spec.js +228 -0
  247. data/spec/javascripts/jax/webgl/shader/manifest_spec.js +57 -0
  248. data/spec/javascripts/jax/webgl/shader_chain_spec.js +211 -0
  249. data/spec/javascripts/jax/webgl/shader_spec.js +276 -0
  250. data/spec/javascripts/jax/webgl/tangent_space_spec.js +142 -0
  251. data/spec/javascripts/jax/webgl/texture_spec.js +159 -0
  252. data/spec/javascripts/jax/webgl_spec.js +5 -0
  253. data/spec/javascripts/jax/world_spec.js +175 -0
  254. data/spec/javascripts/jax_spec.js +14 -0
  255. data/spec/javascripts/node/mocks/webgl.js +159 -0
  256. data/spec/javascripts/node_helper.js +51 -0
  257. data/spec/javascripts/shaders/core_materials_spec.js +38 -0
  258. data/spec/javascripts/shaders/fog_spec.js +15 -0
  259. data/spec/javascripts/shaders/lighting_spec.js +15 -0
  260. data/spec/javascripts/shaders/normal_map_spec.js +15 -0
  261. data/spec/javascripts/shaders/paraboloid_spec.js +33 -0
  262. data/spec/javascripts/shaders/preprocessor_spec.js +45 -0
  263. data/spec/javascripts/shaders/shadow_map_spec.js +15 -0
  264. data/spec/javascripts/shaders/texture_spec.js +37 -0
  265. data/spec/javascripts/suite/controller_select_spec.js.coffee +24 -0
  266. data/spec/lib/jax/commands/plugin_manager/credentials_spec.rb +56 -0
  267. data/spec/lib/jax/commands/plugin_manager/push_spec.rb +62 -0
  268. data/spec/lib/jax/commands/plugin_manager_spec.rb +204 -0
  269. data/spec/lib/jax/rails/application_spec.rb +23 -0
  270. data/spec/lib/jax/shader_spec.rb +67 -0
  271. data/spec/lib/jax/util/tar_spec.rb +26 -0
  272. data/spec/{test_helper.rb → spec_helper.rb} +37 -28
  273. data/spec/support/test_model_generator.rb +14 -0
  274. data/templates/app/Gemfile.tt +17 -0
  275. data/templates/app/Rakefile +4 -0
  276. data/templates/app/config/application.rb +16 -0
  277. data/{lib/jax/generators/app/templates → templates/app}/config/boot.rb +0 -0
  278. data/templates/app/config/environment.rb +5 -0
  279. data/templates/app/config/environments/production.rb +4 -0
  280. data/templates/app/config.ru +6 -0
  281. data/{lib/jax/generators/app/templates/app/resources → templates/app/public}/.empty_directory +0 -0
  282. data/templates/app/script/jax +8 -0
  283. data/{lib/jax/generators/app/templates/app/views → templates/app/spec}/.empty_directory +0 -0
  284. data/templates/application_controller.js.coffee.erb +3 -0
  285. data/templates/application_controller.js.erb +6 -0
  286. data/templates/application_helper.js.coffee.erb +3 -0
  287. data/templates/application_helper.js.erb +3 -0
  288. data/templates/controller.js.coffee.erb +9 -0
  289. data/templates/controller.js.erb +15 -0
  290. data/templates/controller_spec.js.coffee.erb +9 -0
  291. data/templates/controller_spec.js.erb +12 -0
  292. data/templates/helper.js.coffee.erb +2 -0
  293. data/templates/helper.js.erb +3 -0
  294. data/templates/helper_spec.js.coffee.erb +8 -0
  295. data/templates/helper_spec.js.erb +12 -0
  296. data/{lib/jax/generators/light_source/templates/light.yml.tt → templates/light_source.resource.erb} +3 -3
  297. data/{lib/jax/generators/material/templates/material.yml.tt → templates/material.resource.erb} +0 -9
  298. data/templates/model.js.coffee.erb +3 -0
  299. data/templates/model.js.erb +5 -0
  300. data/templates/model_defaults.resource.erb +5 -0
  301. data/templates/model_spec.js.coffee.erb +16 -0
  302. data/templates/model_spec.js.erb +18 -0
  303. data/{lib/jax/generators/plugin/templates/new_plugin/app → templates/new_plugin/app/assets/jax}/controllers/.empty_directory +0 -0
  304. data/{lib/jax/generators/plugin/templates/new_plugin/app → templates/new_plugin/app/assets/jax}/helpers/.empty_directory +0 -0
  305. data/{lib/jax/generators/plugin/templates/new_plugin/app → templates/new_plugin/app/assets/jax}/models/.empty_directory +0 -0
  306. data/{lib/jax/generators/plugin/templates/new_plugin/app → templates/new_plugin/app/assets/jax}/resources/.empty_directory +0 -0
  307. data/{lib/jax/generators/plugin/templates/new_plugin/app → templates/new_plugin/app/assets/jax}/views/.empty_directory +0 -0
  308. data/{lib/jax/generators/plugin/templates → templates}/new_plugin/init.rb +0 -0
  309. data/{lib/jax/generators/plugin/templates → templates}/new_plugin/install.rb +0 -0
  310. data/{lib/jax/generators/plugin/templates/new_plugin/public → templates/new_plugin/spec}/.empty_directory +0 -0
  311. data/{lib/jax/generators/plugin/templates → templates}/new_plugin/uninstall.rb +0 -0
  312. data/{lib/jax/generators/shader/templates/common.ejs.tt → templates/shader_common.glsl.erb} +0 -0
  313. data/{lib/jax/generators/shader/templates/fragment.ejs.tt → templates/shader_fragment.glsl.erb} +0 -0
  314. data/{lib/jax/generators/shader/templates/manifest.yml.tt → templates/shader_manifest.yml.erb} +0 -0
  315. data/templates/shader_material.js.coffee.erb +22 -0
  316. data/{lib/jax/generators/shader/templates/material.js.tt → templates/shader_material.js.erb} +0 -0
  317. data/templates/shader_spec.js.coffee.erb +16 -0
  318. data/{lib/jax/generators/shader/templates/spec.js.tt → templates/shader_spec.js.erb} +1 -1
  319. data/{lib/jax/generators/shader/templates/vertex.ejs.tt → templates/shader_vertex.glsl.erb} +0 -0
  320. data/templates/view.js.coffee.erb +3 -0
  321. data/{lib/jax/generators/controller/templates/view.js.tt → templates/view.js.erb} +1 -1
  322. data/vendor/assets/javascripts/ejs.js +505 -0
  323. data/vendor/assets/javascripts/glMatrix.js +1772 -0
  324. data/vendor/assets/javascripts/jasmine.js +2476 -0
  325. data/vendor/assets/stylesheets/jasmine.css +166 -0
  326. data/vendor/pdoc_template/html/assets/images/pdoc/alias.png +0 -0
  327. data/vendor/pdoc_template/html/assets/images/pdoc/class.png +0 -0
  328. data/vendor/pdoc_template/html/assets/images/pdoc/class_deprecated.png +0 -0
  329. data/vendor/pdoc_template/html/assets/images/pdoc/class_method.png +0 -0
  330. data/vendor/pdoc_template/html/assets/images/pdoc/class_property.png +0 -0
  331. data/vendor/pdoc_template/html/assets/images/pdoc/constant.png +0 -0
  332. data/vendor/pdoc_template/html/assets/images/pdoc/constructor.png +0 -0
  333. data/vendor/pdoc_template/html/assets/images/pdoc/deprecated.png +0 -0
  334. data/vendor/pdoc_template/html/assets/images/pdoc/description.png +0 -0
  335. data/vendor/pdoc_template/html/assets/images/pdoc/information.png +0 -0
  336. data/vendor/pdoc_template/html/assets/images/pdoc/instance_method.png +0 -0
  337. data/vendor/pdoc_template/html/assets/images/pdoc/instance_property.png +0 -0
  338. data/vendor/pdoc_template/html/assets/images/pdoc/method.png +0 -0
  339. data/vendor/pdoc_template/html/assets/images/pdoc/method_deprecated.png +0 -0
  340. data/vendor/pdoc_template/html/assets/images/pdoc/mixin.png +0 -0
  341. data/vendor/pdoc_template/html/assets/images/pdoc/namespace.png +0 -0
  342. data/vendor/pdoc_template/html/assets/images/pdoc/property.png +0 -0
  343. data/vendor/pdoc_template/html/assets/images/pdoc/related_to.png +0 -0
  344. data/vendor/pdoc_template/html/assets/images/pdoc/search-background.png +0 -0
  345. data/vendor/pdoc_template/html/assets/images/pdoc/section-background.png +0 -0
  346. data/vendor/pdoc_template/html/assets/images/pdoc/section.png +0 -0
  347. data/vendor/pdoc_template/html/assets/images/pdoc/selected-section-background.png +0 -0
  348. data/vendor/pdoc_template/html/assets/images/pdoc/subclass.png +0 -0
  349. data/vendor/pdoc_template/html/assets/images/pdoc/superclass.png +0 -0
  350. data/vendor/pdoc_template/html/assets/images/pdoc/utility.png +0 -0
  351. data/vendor/pdoc_template/html/assets/javascripts/pdoc/application.js +478 -0
  352. data/vendor/pdoc_template/html/assets/javascripts/pdoc/prototype.js +4874 -0
  353. data/vendor/pdoc_template/html/assets/javascripts/pdoc/tabs.js +506 -0
  354. data/vendor/pdoc_template/html/assets/stylesheets/jax.css +30 -0
  355. data/vendor/pdoc_template/html/assets/stylesheets/pdoc/api.css +681 -0
  356. data/vendor/pdoc_template/html/assets/stylesheets/pdoc/pygments.css +62 -0
  357. data/vendor/pdoc_template/html/helpers.rb +35 -0
  358. data/vendor/pdoc_template/html/index.erb +18 -0
  359. data/vendor/pdoc_template/html/item_index.js.erb +6 -0
  360. data/vendor/pdoc_template/html/layout.erb +67 -0
  361. data/vendor/pdoc_template/html/leaf.erb +22 -0
  362. data/vendor/pdoc_template/html/node.erb +30 -0
  363. data/vendor/pdoc_template/html/partials/class_relationships.erb +19 -0
  364. data/vendor/pdoc_template/html/partials/classes.erb +7 -0
  365. data/vendor/pdoc_template/html/partials/constructor.erb +5 -0
  366. data/vendor/pdoc_template/html/partials/description.erb +5 -0
  367. data/vendor/pdoc_template/html/partials/link_list.erb +1 -0
  368. data/vendor/pdoc_template/html/partials/method_signatures.erb +14 -0
  369. data/vendor/pdoc_template/html/partials/methodized_note.erb +9 -0
  370. data/vendor/pdoc_template/html/partials/mixins.erb +7 -0
  371. data/vendor/pdoc_template/html/partials/namespaces.erb +7 -0
  372. data/vendor/pdoc_template/html/partials/related_utilities.erb +5 -0
  373. data/vendor/pdoc_template/html/partials/relationships.erb +11 -0
  374. data/vendor/pdoc_template/html/partials/short_description_list.erb +7 -0
  375. data/vendor/pdoc_template/html/partials/title.erb +24 -0
  376. data/vendor/pdoc_template/html/section.erb +18 -0
  377. metadata +635 -332
  378. data/builtin/app/shaders/lighting/common.ejs +0 -5
  379. data/builtin/app/shaders/normal_map/material.js +0 -16
  380. data/builtin/app/shaders/texture/material.js +0 -18
  381. data/jax.gems +0 -1
  382. data/lib/jax/application/builtin/configurable.rb +0 -5
  383. data/lib/jax/application/builtin/configuration.rb +0 -5
  384. data/lib/jax/application/builtin.rb +0 -12
  385. data/lib/jax/application/configurable.rb +0 -19
  386. data/lib/jax/application/configuration.rb +0 -60
  387. data/lib/jax/application/railties.rb +0 -26
  388. data/lib/jax/application.rb +0 -149
  389. data/lib/jax/core_ext/kernel.rb +0 -7
  390. data/lib/jax/engine/configurable.rb +0 -19
  391. data/lib/jax/engine/configuration.rb +0 -49
  392. data/lib/jax/generators/app/app_generator.rb +0 -96
  393. data/lib/jax/generators/app/templates/Gemfile.tt +0 -3
  394. data/lib/jax/generators/app/templates/Rakefile +0 -6
  395. data/lib/jax/generators/app/templates/app/controllers/application_controller.js.tt +0 -5
  396. data/lib/jax/generators/app/templates/app/helpers/application_helper.js.tt +0 -3
  397. data/lib/jax/generators/app/templates/config/application.rb.tt +0 -6
  398. data/lib/jax/generators/app/templates/config/environment.rb.tt +0 -5
  399. data/lib/jax/generators/app/templates/config/routes.rb.tt +0 -5
  400. data/lib/jax/generators/app/templates/public/index.html.tt +0 -26
  401. data/lib/jax/generators/app/templates/public/javascripts/jax.js +0 -9462
  402. data/lib/jax/generators/app/templates/public/stylesheets/%file_name%.css.tt +0 -11
  403. data/lib/jax/generators/app/templates/public/webgl_not_supported.html +0 -26
  404. data/lib/jax/generators/app/templates/script/jax +0 -7
  405. data/lib/jax/generators/app/templates/spec/javascripts/controllers/application_controller_spec.js +0 -11
  406. data/lib/jax/generators/app/templates/spec/javascripts/helpers/application_helper_spec.js +0 -12
  407. data/lib/jax/generators/app/templates/spec/javascripts/support/jasmine.yml +0 -91
  408. data/lib/jax/generators/app/templates/spec/javascripts/support/jasmine_config.rb +0 -23
  409. data/lib/jax/generators/app/templates/spec/javascripts/support/jasmine_runner.rb +0 -32
  410. data/lib/jax/generators/app/templates/spec/javascripts/support/spec_layout.html.erb +0 -104
  411. data/lib/jax/generators/app.rb +0 -18
  412. data/lib/jax/generators/commands.rb +0 -220
  413. data/lib/jax/generators/controller/USAGE +0 -9
  414. data/lib/jax/generators/controller/controller_generator.rb +0 -66
  415. data/lib/jax/generators/controller/templates/controller_source.js.tt +0 -16
  416. data/lib/jax/generators/controller/templates/controller_test.js.tt +0 -11
  417. data/lib/jax/generators/controller/templates/helper.js.tt +0 -3
  418. data/lib/jax/generators/controller/templates/helper_test.js.tt +0 -12
  419. data/lib/jax/generators/interactions.rb +0 -56
  420. data/lib/jax/generators/light_source/USAGE +0 -14
  421. data/lib/jax/generators/light_source/light_source_generator.rb +0 -46
  422. data/lib/jax/generators/material/material_generator.rb +0 -80
  423. data/lib/jax/generators/material/templates/append.yml.tt +0 -7
  424. data/lib/jax/generators/model/USAGE +0 -5
  425. data/lib/jax/generators/model/model_generator.rb +0 -40
  426. data/lib/jax/generators/model/templates/model.js.tt +0 -11
  427. data/lib/jax/generators/model/templates/test.js.tt +0 -11
  428. data/lib/jax/generators/packager/package_generator.rb +0 -32
  429. data/lib/jax/generators/plugin/USAGE +0 -4
  430. data/lib/jax/generators/plugin/all.rb +0 -113
  431. data/lib/jax/generators/plugin/credentials.rb +0 -108
  432. data/lib/jax/generators/plugin/plugin_generator.rb +0 -72
  433. data/lib/jax/generators/plugin/plugin_manager.rb +0 -254
  434. data/lib/jax/generators/plugin/templates/new_plugin/config/routes.rb +0 -3
  435. data/lib/jax/generators/plugin/templates/new_plugin/spec/.empty_directory +0 -0
  436. data/lib/jax/generators/script_jax_loader.rb +0 -49
  437. data/lib/jax/generators/shader/USAGE +0 -4
  438. data/lib/jax/generators/shader/shader_generator.rb +0 -70
  439. data/lib/jax/monkeypatch/jasmine/config.rb +0 -45
  440. data/lib/jax/monkeypatch/jasmine/server.rb +0 -50
  441. data/lib/jax/monkeypatch/jasmine.rb +0 -3
  442. data/lib/jax/packager/sprockets_template.rb +0 -77
  443. data/lib/jax/packager.rb +0 -59
  444. data/lib/jax/plugin/manifest.rb +0 -71
  445. data/lib/jax/plugin.rb +0 -49
  446. data/lib/jax/resource_compiler.rb +0 -60
  447. data/lib/jax/routes.rb +0 -62
  448. data/lib/jax/tasks/rake.rb +0 -38
  449. data/spec/benchmark.htm +0 -93
  450. data/spec/generators/app_generator_test.rb +0 -42
  451. data/spec/generators/controller_generator_test.rb +0 -47
  452. data/spec/generators/light_generator_test.rb +0 -37
  453. data/spec/generators/material_generator_test.rb +0 -22
  454. data/spec/generators/model_generator_test.rb +0 -26
  455. data/spec/generators/plugin_generator_test.rb +0 -114
  456. data/spec/generators/plugin_manager/push_test.rb +0 -59
  457. data/spec/generators/plugin_manager_test.rb +0 -192
  458. data/spec/generators/shader_generator_test.rb +0 -38
  459. data/spec/javascripts/support/jasmine.yml +0 -85
  460. data/spec/javascripts/support/jasmine_runner.rb +0 -32
  461. data/spec/lib/jax/application_test.rb +0 -18
  462. data/spec/lib/jax/generators/plugin/credentials_test.rb +0 -72
  463. data/spec/lib/jax/packager_test.rb +0 -87
  464. data/spec/lib/jax/plugin_test.rb +0 -27
  465. data/spec/lib/jax/reloading_test.rb +0 -23
  466. data/spec/lib/jax/routes_test.rb +0 -28
  467. data/spec/lib/jax/shader_test.rb +0 -29
  468. data/spec/lib/jax/tasks/jax_rake_test.rb +0 -85
  469. data/spec/support/bases/generator_test_case.rb +0 -108
  470. data/spec/support/bases/isolated_test_case.rb +0 -148
  471. data/spec/support/file_exist_matcher.rb +0 -23
  472. data/spec/support/spec_shell.rb +0 -110
  473. data/spec/test_app.rb +0 -3
@@ -0,0 +1,422 @@
1
+ //= require "jax/geometry"
2
+
3
+ /**
4
+ * class Jax.Scene.Frustum
5
+ * includes Jax.Events.Methods
6
+ *
7
+ * A Frustum represents a camera's view; it encloses the entire visible area and can be used
8
+ * to query whether any given point is visible.
9
+ *
10
+ * Frustums are best known for their use in frustum culling, which is the practice of testing to
11
+ * see whether an object is on-screen or not. If it's not on-screen, then there is no reason to
12
+ * draw it.
13
+ *
14
+ * Frustums can also be useful for AI programming. In Jax, all instances of Jax.Camera create and
15
+ * maintain their own internal Jax.Scene.Frustum instance. Since nearly every object has, in turn,
16
+ * its own Jax.Camera, almost every object can effectively "see" the objects surrounding it.
17
+ *
18
+ * To get a Frustum instance, see the Jax.Camera#getFrustum method. Here are some examples:
19
+ *
20
+ * var playerFrustum = this.context.player.camera.getFrustum();
21
+ * var ogreFrustum = ogre.camera.getFrustum();
22
+ * // where 'ogre' is an instance of Jax.Model
23
+ *
24
+ **/
25
+ Jax.Scene.Frustum = (function() {
26
+ var RIGHT = 0, LEFT = 1, BOTTOM = 2, TOP = 3, FAR = 4, NEAR = 5;
27
+ var OUTSIDE = Jax.Geometry.Plane.BACK, INTERSECT = Jax.Geometry.Plane.INTERSECT, INSIDE = Jax.Geometry.Plane.FRONT;
28
+
29
+ function extents(self)
30
+ {
31
+ /* TODO see how this can be combined with Camera#unproject */
32
+ function extent(x, y, z)
33
+ {
34
+ var inf = [];
35
+ var mm = self.mv, pm = self.p;
36
+
37
+ //Calculation for inverting a matrix, compute projection x modelview; then compute the inverse
38
+ var m = mat4.set(mm, mat4.create());
39
+
40
+ mat4.inverse(m, m); // WHY do I have to do this? --see Jax.Context#reloadMatrices
41
+ mat4.multiply(pm, m, m);
42
+ mat4.inverse(m, m);
43
+
44
+ // Transformation of normalized coordinates between -1 and 1
45
+ inf[0]=x;//*2.0-1.0; /* x*2-1 translates x from 0..1 to -1..1 */
46
+ inf[1]=y;//*2.0-1.0;
47
+ inf[2]=z;//*2.0-1.0;
48
+ inf[3]=1.0;
49
+
50
+ //Objects coordinates
51
+ var out = mat4.multiplyVec4(m, inf);
52
+ if(out[3]==0.0)
53
+ return [0,0,0];//null;
54
+
55
+ out[3]=1.0/out[3];
56
+ return [out[0]*out[3], out[1]*out[3], out[2]*out[3]];
57
+ }
58
+
59
+ var ntl = extent(-1,1,-1), ntr = extent(1,1,-1), nbl = extent(-1,-1,-1), nbr = extent(1,-1,-1),
60
+ ftl = extent(-1,1,1), ftr = extent(1,1,1), fbl = extent(-1,-1,1), fbr = extent(1,-1,1);
61
+
62
+ return {ntl:ntl, ntr:ntr, nbl:nbl, nbr:nbr, ftl:ftl, ftr:ftr, fbl:fbl, fbr:fbr};
63
+ }
64
+
65
+ function varcube(self, position, w, h, d)
66
+ {
67
+ if (!self.mv || !self.p) return INSIDE;
68
+ var p, c, c2 = 0, plane;
69
+
70
+ w = w / 2.0;
71
+ h = h / 2.0;
72
+ d = d / 2.0;
73
+
74
+ var xp = position[0]+w, xm=position[0]-w, yp=position[1]+h, ym=position[1]-h, zp=position[2]+d, zm=position[2]-d;
75
+
76
+ for (p in self.planes)
77
+ {
78
+ plane = self.planes[p];
79
+ c = 0;
80
+ if (plane.distance(xp, yp, zp) > 0) c++;
81
+ if (plane.distance(xm, yp, zp) > 0) c++;
82
+ if (plane.distance(xp, ym, zp) > 0) c++;
83
+ if (plane.distance(xm, ym, zp) > 0) c++;
84
+ if (plane.distance(xp, yp, zm) > 0) c++;
85
+ if (plane.distance(xm, yp, zm) > 0) c++;
86
+ if (plane.distance(xp, ym, zm) > 0) c++;
87
+ if (plane.distance(xm, ym, zm) > 0) c++;
88
+ if (c == 0) return OUTSIDE;
89
+ if (c == 8) c2++;
90
+ }
91
+
92
+ return (c2 == 6) ? INSIDE : INTERSECT;
93
+ }
94
+
95
+ function extractFrustum(self)
96
+ {
97
+ var frustum = self.planes;
98
+ var e = extents(self);
99
+
100
+ frustum[TOP].set(e.ntr, e.ntl, e.ftl);
101
+ frustum[BOTTOM].set(e.nbl,e.nbr,e.fbr);
102
+ frustum[LEFT].set(e.ntl,e.nbl,e.fbl);
103
+ frustum[RIGHT].set(e.nbr,e.ntr,e.fbr);
104
+ frustum[NEAR].set(e.ntl,e.ntr,e.nbr);
105
+ frustum[FAR].set(e.ftr,e.ftl,e.fbl);
106
+ }
107
+
108
+ var klass = Jax.Class.create({
109
+ /**
110
+ * new Jax.Scene.Frustum(view, projection)
111
+ * - view (mat4): the view matrix
112
+ * - projection (mat4): the projection matrix
113
+ *
114
+ * A frustum is usually instantiated by Jax.Camera; however, if you are maintaining
115
+ * your own view and projection matrices then it could be helpful to instantiate
116
+ * the frustum directly. See also Jax.Frustum#update for keeping a frustum up-to-date.
117
+ **/
118
+ initialize: function(modelview, projection) {
119
+ this.planes = {};
120
+ for (var i = 0; i < 6; i++) this.planes[i] = new Jax.Geometry.Plane();
121
+ this.setMatrices(modelview, projection);
122
+ },
123
+
124
+ /**
125
+ * Jax.Scene.Frustum#update() -> Jax.Scene.Frustum
126
+ *
127
+ * A frustum must maintain the 6 planes making up its boundaries; if the view or
128
+ * projection matrix is modified, then the frustum is no longer accurate and must
129
+ * be updated. For improved performance, you should only call this method when the
130
+ * corresponding matrices are actually changed (or even better, when the matrices
131
+ * have been changed and the frustum is actually being used).
132
+ *
133
+ * After updating the frustum, this method will fire an 'updated' event.
134
+ *
135
+ * Instances of Jax.Camera maintain their own frustums; they will fire this
136
+ * method automatically whenever doing so becomes necessary.
137
+ **/
138
+ update: function() {
139
+ if (this.mv && this.p) {
140
+ extractFrustum(this);
141
+ this.fireEvent('updated');
142
+ }
143
+ return this;
144
+ },
145
+
146
+ /**
147
+ * Jax.Scene.Frustum#setViewMatrix(view) -> Jax.Scene.Frustum
148
+ * - view (mat4): a 4x4 matrix
149
+ *
150
+ * Replaces this frustum's view matrix with the specified one and then
151
+ * updates the frustum.
152
+ *
153
+ * Note that the frustum adopts the given matrix reference; that is,
154
+ * if you make further changes to the view matrix, they will be reflected
155
+ * by the frustum (though you still need to call Jax.Scene.Frustum#update).
156
+ **/
157
+ setViewMatrix: function(mv) { return this.setMatrices(mv, this.p); },
158
+
159
+ /**
160
+ * Jax.Scene.Frustum#setProjectionMatrix(proj) -> Jax.Scene.Frustum
161
+ * - proj (mat4): a 4x4 matrix
162
+ *
163
+ * Replaces this frustum's projection matrix with the specified one and then
164
+ * updates the frustum.
165
+ *
166
+ * Note that the frustum adopts the given matrix reference; that is,
167
+ * if you make further changes to the projection matrix, they will be reflected
168
+ * by the frustum (though you still need to call Jax.Scene.Frustum#update).
169
+ **/
170
+ setProjectionMatrix: function(p) { return this.setMatrices(this.mv, p); },
171
+
172
+ /**
173
+ * Jax.Scene.Frustum#setMatrices(view, proj) -> Jax.Scene.Frustum
174
+ * - view (mat4): the 4x4 view matrix
175
+ * - proj (mat4): the 4x4 projection matrix
176
+ *
177
+ * Replaces both matrices in the frustum, and then updates the frustum.
178
+ *
179
+ * Note that the frustum adopts the given matrix reference; that is,
180
+ * if you make further changes to the projection matrix, they will be reflected
181
+ * by the frustum (though you still need to call Jax.Scene.Frustum#update).
182
+ **/
183
+ setMatrices: function(mv, p) {
184
+ this.mv = mv;
185
+ this.p = p;
186
+ this.update();
187
+ return this;
188
+ },
189
+
190
+ /**
191
+ * Jax.Scene.Frustum#point(p) -> Jax.Scene.Frustum.INSIDE | Jax.Scene.Frustum.OUTSIDE
192
+ * - p (vec3): the 3D point to be tested
193
+ *
194
+ * Returns Jax.Scene.Frustum.INSIDE if the specified point lies within this frustum;
195
+ * returns Jax.Scene.Frustum.OUTSIDE otherwise.
196
+ **/
197
+ point: function(point) {
198
+ if (!this.mv || !this.p) return INSIDE;
199
+ if (arguments.length == 3) point = [arguments[0], arguments[1], arguments[2]];
200
+
201
+ for(var i=0; i < 6; i++)
202
+ {
203
+ if (this.planes[i].distance(point) < 0)
204
+ return OUTSIDE;
205
+ }
206
+ return INSIDE;
207
+ },
208
+
209
+ /**
210
+ * Jax.Scene.Frustum#sphere(center, radius) -> Jax.Scene.Frustum.INSIDE | Jax.Scene.Frustum.OUTSIDE | Jax.Scene.Frustum.INTERSECT
211
+ * - center (vec3): the center of the sphere to be tested
212
+ * - radius (Number): the radius of the sphere to be tested
213
+ *
214
+ * Returns Jax.Scene.Frustum.INSIDE if the specified sphere lies entirely within this frustum;
215
+ * Jax.Scene.Frustum.INTERSECT if the sphere lies only partially within this frustum; or
216
+ * Jax.Scene.Frustum.OUTSIDE if the sphere lies entirely beyond the boundaries of this frustum.
217
+ **/
218
+ sphere: function(center, radius)
219
+ {
220
+ if (!this.mv || !this.p) return INSIDE;
221
+ if (arguments.length == 4) { center = [arguments[0], arguments[1], arguments[2]]; radius = arguments[3]; }
222
+
223
+ var result = INSIDE, distance;
224
+ for (var i = 0; i < 6; i++)
225
+ {
226
+ distance = this.planes[i].distance(center);
227
+ if (distance < -radius) return OUTSIDE;
228
+ else if (distance < radius) result = INTERSECT;
229
+ }
230
+ return result;
231
+ },
232
+
233
+
234
+ /**
235
+ * Jax.Scene.Frustum#cube(corners) -> Jax.Scene.Frustum.INSIDE | Jax.Scene.Frustum.OUTSIDE | Jax.Scene.Frustum.INTERSECT
236
+ * Jax.Scene.Frustum#cube(center, width, height, depth) -> Jax.Scene.Frustum.INSIDE | Jax.Scene.Frustum.OUTSIDE | Jax.Scene.Frustum.INTERSECT
237
+ * - corners (Array): an array of 3D points representing the corners of the cube to be tested
238
+ * - center (vec3): a 3D point representing the center of the cube to be tested
239
+ * - width (Number): the width of the cube to be tested
240
+ * - height (Number): the height of the cube to be tested
241
+ * - depth (Number): the depth of the cube to be tested
242
+ *
243
+ * Returns Jax.Scene.Frustum.INSIDE if the specified cube lies entirely within this frustum;
244
+ * Jax.Scene.Frustum.INTERSECT if the cube lies only partially within this frustum; or
245
+ * Jax.Scene.Frustum.OUTSIDE if the cube lies entirely beyond the boundaries of this frustum.
246
+ **/
247
+ cube: function(corners)
248
+ {
249
+ if (arguments.length == 2) { return varcube(this, arguments[0], arguments[1], arguments[1], arguments[1]); }
250
+ if (arguments.length == 4) { return varcube(this, arguments[0], arguments[1], arguments[2], arguments[3]); }
251
+
252
+ if (!this.mv || !this.p) return INSIDE;
253
+ if (arguments.length > 1) { corners = arguments; }
254
+ var p, c, c2 = 0, i, num_corners = corners.length, plane;
255
+ for (p in this.planes)
256
+ {
257
+ plane = this.planes[p];
258
+ c = 0;
259
+ for (i = 0; i < num_corners; i++)
260
+ if (plane.distance(corners[i]) > 0)
261
+ c++;
262
+ if (c == 0) return OUTSIDE;
263
+ if (c == num_corners) c2++;
264
+ }
265
+
266
+ return (c2 == 6) ? INSIDE : INTERSECT;
267
+ },
268
+
269
+ /**
270
+ * Jax.Scene.Frustum#sphereVisible(center, radius) -> Boolean
271
+ * - center (vec3): the center of the sphere to be tested
272
+ * - radius (Number): the radius of the sphere to be tested
273
+ *
274
+ * Returns true if the sphere is entirely or partially within this frustum, false otherwise.
275
+ **/
276
+ sphereVisible: function(center, radius) { return this.sphere.apply(this, arguments) != OUTSIDE; },
277
+
278
+ /**
279
+ * Jax.Scene.Frustum#pointVisible(point) -> Boolean
280
+ * - point (vec3): the 3D point to be tested
281
+ *
282
+ * Returns true if the point is within this frustum, false otherwise.
283
+ **/
284
+ pointVisible: function(center) { return this.point.apply(this, arguments) != OUTSIDE; },
285
+
286
+ /**
287
+ * Jax.Scene.Frustum#cubeVisible(corners) -> Boolean
288
+ * Jax.Scene.Frustum#cubeVisible(center, width, height, depth) -> Boolean
289
+ * - corners (Array): an array of 3D points representing the corners of the cube to be tested
290
+ * - center (vec3): a 3D point representing the center of the cube to be tested
291
+ * - width (Number): the width of the cube to be tested
292
+ * - height (Number): the height of the cube to be tested
293
+ * - depth (Number): the depth of the cube to be tested
294
+ *
295
+ * Returns true if the cube is entirely or partially within this frustum, false otherwise.
296
+ **/
297
+ cubeVisible: function(corners) { return this.cube.apply(this, arguments) != OUTSIDE; },
298
+
299
+ /**
300
+ * Jax.Scene.Frustum#isValid() -> Boolean
301
+ *
302
+ * Returns true if the frustum has both a projection and a view matrix, false otherwise.
303
+ **/
304
+ isValid: function() { return this.p && this.mv; },
305
+
306
+ /**
307
+ * Jax.Scene.Frustum#getRenderable() -> Jax.Model
308
+ *
309
+ * Returns a renderable 3D object with a corresponding Jax.Mesh
310
+ * representing this frustum and its orientation within the world. Very
311
+ * useful for debugging or otherwise visualizing the frustum object.
312
+ *
313
+ * The 3D object hooks into this frustum's 'updated' event so that
314
+ * whenever the frustum is updated, the renderable will be, too.
315
+ **/
316
+ getRenderable: function()
317
+ {
318
+ if (this.renderable) return this.renderable;
319
+
320
+ var renderable = this.renderable = new Jax.Model({mesh: new Jax.Mesh()});
321
+ renderable.upToDate = false;
322
+ var frustum = this;
323
+
324
+ function addVertices(e, vertices)
325
+ {
326
+ // near quad
327
+ vertices.push(e.ntl[0], e.ntl[1], e.ntl[2]);
328
+ vertices.push(e.ntr[0], e.ntr[1], e.ntr[2]);
329
+
330
+ vertices.push(e.ntr[0], e.ntr[1], e.ntr[2]);
331
+ vertices.push(e.nbr[0], e.nbr[1], e.nbr[2]);
332
+
333
+ vertices.push(e.nbr[0], e.nbr[1], e.nbr[2]);
334
+ vertices.push(e.nbl[0], e.nbl[1], e.nbl[2]);
335
+
336
+ vertices.push(e.nbl[0], e.nbl[1], e.nbl[2]);
337
+ vertices.push(e.ntl[0], e.ntl[1], e.ntl[2]);
338
+
339
+ // far quad
340
+ vertices.push(e.ftl[0], e.ftl[1], e.ftl[2]);
341
+ vertices.push(e.ftr[0], e.ftr[1], e.ftr[2]);
342
+
343
+ vertices.push(e.ftr[0], e.ftr[1], e.ftr[2]);
344
+ vertices.push(e.fbr[0], e.fbr[1], e.fbr[2]);
345
+
346
+ vertices.push(e.fbr[0], e.fbr[1], e.fbr[2]);
347
+ vertices.push(e.fbl[0], e.fbl[1], e.fbl[2]);
348
+
349
+ vertices.push(e.fbl[0], e.fbl[1], e.fbl[2]);
350
+ vertices.push(e.ftl[0], e.ftl[1], e.ftl[2]);
351
+
352
+ // left side
353
+ vertices.push(e.ntl[0], e.ntl[1], e.ntl[2]);
354
+ vertices.push(e.ftl[0], e.ftl[1], e.ftl[2]);
355
+
356
+ vertices.push(e.nbl[0], e.nbl[1], e.nbl[2]);
357
+ vertices.push(e.fbl[0], e.fbl[1], e.fbl[2]);
358
+
359
+ // right side
360
+ vertices.push(e.ntr[0], e.ntr[1], e.ntr[2]);
361
+ vertices.push(e.ftr[0], e.ftr[1], e.ftr[2]);
362
+
363
+ vertices.push(e.nbr[0], e.nbr[1], e.nbr[2]);
364
+ vertices.push(e.fbr[0], e.fbr[1], e.fbr[2]);
365
+ }
366
+
367
+ renderable.mesh.init = function(vertices, colors) {
368
+ this.draw_mode = GL_LINES;
369
+
370
+ for (var i = 0; i < 24; i++)
371
+ {
372
+ vertices.push(0,0,0);
373
+ colors.push(1,1,0,1);
374
+ }
375
+ };
376
+
377
+ renderable.update = null;
378
+
379
+ frustum.addEventListener('updated', function() {
380
+ if (!frustum.isValid()) { return; }
381
+
382
+ renderable.upToDate = true;
383
+ var buf = renderable.mesh.getVertexBuffer();
384
+ if (!buf) return;
385
+ var vertices = buf.js;
386
+ vertices.clear();
387
+ var e = extents(frustum);//{ntl:ntl, ntr:ntr, nbl:nbl, nbr:nbr, ftl:ftl, ftr:ftr, fbl:fbl, fbr:fbr};
388
+
389
+ addVertices(e, vertices);
390
+
391
+ buf.refresh();
392
+ });
393
+
394
+ return renderable;
395
+ }
396
+ });
397
+
398
+ /**
399
+ * Jax.Scene.Frustum.INSIDE = Jax.Geometry.Plane.FRONT
400
+ *
401
+ * Special value used to represent an object falling entirely within this frustum.
402
+ **/
403
+ klass.INSIDE = INSIDE;
404
+
405
+ /**
406
+ * Jax.Scene.Frustum.OUTSIDE = Jax.Geometry.Plane.BACK
407
+ *
408
+ * Special value used to represent an object falling entirely outside of this frustum.
409
+ **/
410
+ klass.OUTSIDE = OUTSIDE;
411
+
412
+ /**
413
+ * Jax.Scene.Frustum.INTERSECT = Jax.Geometry.Plane.INTERSECT
414
+ *
415
+ * Special value used to represent an object falling partially within this frustum, partially outside.
416
+ **/
417
+ klass.INTERSECT = INTERSECT;
418
+
419
+ klass.addMethods(Jax.Events.Methods);
420
+
421
+ return klass;
422
+ })();
@@ -0,0 +1,141 @@
1
+ //= require "jax/webgl/scene/light_source"
2
+
3
+ Jax.Scene.LightManager = (function() {
4
+ return Jax.Class.create({
5
+ initialize: function(context) {
6
+ this.context = context;
7
+ this._lights = [];
8
+ this.objects = [];
9
+ },
10
+
11
+ addObject: function(obj) {
12
+ this.objects.push(obj);
13
+ for (var j = 0; j < this._lights.length; j++)
14
+ if (obj.isShadowCaster())
15
+ this._lights[j].registerCaster(obj);
16
+ this.recalculateBoundingRadius();
17
+ },
18
+
19
+ removeObject: function(obj) {
20
+ if (this.objects[obj]) {
21
+ var o = this.objects[obj];
22
+ this.objects.splice(obj, 1);
23
+ for (var j = 0; j < this._lights.length; j++)
24
+ if (o.isShadowCaster())
25
+ this._lights[j].unregisterCaster(o);
26
+ this.recalculateBoundingRadius();
27
+ return o;
28
+ }
29
+ for (var i = 0; i < this.objects.length; i++)
30
+ if (this.objects[i] == obj)
31
+ return this.removeObject(obj);
32
+ },
33
+
34
+ getShadowCasters: function() {
35
+ var ret = [];
36
+ for (var i = 0; i < this.objects.length; i++) {
37
+ if (this.objects[i].isShadowCaster())
38
+ ret.push(this.objects[i]);
39
+ }
40
+ return ret;
41
+ },
42
+
43
+ add: function(light) {
44
+ if (typeof(light) == "string") light = Jax.Scene.LightSource.find(light);
45
+
46
+ if (this._lights.length == Jax.max_lights)
47
+ throw new Error("Maximum number of light sources in a scene has been exceeded! Try removing some first.");
48
+ for (var i = 0; i < this.objects.length; i++) {
49
+ if (this.objects[i].isShadowCaster())
50
+ light.registerCaster(this.objects[i]);
51
+ }
52
+ this._lights.push(light);
53
+ light.boundingRadius = this.boundingRadius || 0;
54
+ },
55
+
56
+ recalculateBoundingRadius: function() {
57
+ var boundingRadius = null;
58
+ var i, j;
59
+ for (i = 0; i < this.objects.length; i++) {
60
+ j = vec3.length(this.objects[i].camera.getPosition()) + this.objects[i].getBoundingSphereRadius();
61
+ if (boundingRadius == null || boundingRadius < j)
62
+ boundingRadius = j;
63
+ }
64
+ this.boundingRadius = boundingRadius = boundingRadius || 0;
65
+
66
+ for (i = 0; i < this._lights.length; i++)
67
+ this._lights[i].boundingRadius = boundingRadius;
68
+ },
69
+
70
+ enable: function() { this.enabled = true; },
71
+
72
+ disable: function() { this.enabled = false; },
73
+
74
+ isEnabled: function() {
75
+ if (arguments.length == 1) {
76
+ if (this._lights.length > arguments[0])
77
+ return this._lights[arguments[0]].isEnabled();
78
+ return false;
79
+ }
80
+
81
+ if (this.enabled != undefined)
82
+ return this.enabled;
83
+ return this._lights.length > 0;
84
+ },
85
+
86
+ count: function() { return this._lights.length; },
87
+
88
+ remove: function(index) {
89
+ var result = this._lights.splice(index, 1);
90
+ if (this._lights.length == 0) delete this.enabled;
91
+ return result;
92
+ },
93
+
94
+ illuminate: function(context, options) {
95
+ // used by individual light sources
96
+ options = Jax.Util.normalizeOptions(options, {});
97
+
98
+ // Use alpha blending for the first pass, and additive blending for subsequent passes.
99
+ context.glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
100
+ var i;
101
+ for (i = 0; i < this._lights.length; i++) {
102
+ if (i == 1) context.glBlendFunc(GL_ONE, GL_ONE);
103
+ this._current_light = i;
104
+ this._lights[i].render(context, this.objects, options);
105
+ }
106
+
107
+ if (i > 0) context.glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
108
+
109
+ delete this._current_light;
110
+ },
111
+
112
+ getDirection: function(index) { return this.getLight(index).getDirection(); },
113
+
114
+ getPosition: function(index) { return this.getLight(index).getPosition(); },
115
+
116
+ getLight: function(index) {
117
+ if (index == undefined)
118
+ if (this._current_light != undefined) return this._lights[this._current_light];
119
+ else return (this.default_light = this.default_light || new Jax.Scene.LightSource());
120
+ return this._lights[index];
121
+ },
122
+
123
+ getType: function(index) { return this.getLight(index).getType(); },
124
+
125
+ getDiffuseColor: function(index) { return this.getLight(index).getDiffuseColor(); },
126
+
127
+ getSpecularColor: function(index) { return this.getLight(index).getSpecularColor(); },
128
+
129
+ getAmbientColor: function(index) { return this.getLight(index).getAmbientColor(); },
130
+
131
+ getConstantAttenuation: function(index) { return this.getLight(index).getConstantAttenuation(); },
132
+
133
+ getLinearAttenuation: function(index) { return this.getLight(index).getLinearAttenuation(); },
134
+
135
+ getQuadraticAttenuation: function(index) { return this.getLight(index).getQuadraticAttenuation(); },
136
+
137
+ getSpotCosCutoff: function(index) { return this.getLight(index).getSpotCosCutoff(); },
138
+
139
+ getSpotExponent: function(index) { return this.getLight(index).getSpotExponent(); }
140
+ });
141
+ })();