jax 0.0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +12 -0
- data/.gitmodules +3 -0
- data/.rvmrc +7 -0
- data/Gemfile +4 -0
- data/README.rdoc +32 -0
- data/Rakefile +144 -0
- data/bin/jax +11 -0
- data/builtin/shaders/basic/common.ejs +11 -0
- data/builtin/shaders/basic/fragment.ejs +5 -0
- data/builtin/shaders/basic/vertex.ejs +13 -0
- data/builtin/shaders/depthmap/common.ejs +1 -0
- data/builtin/shaders/depthmap/fragment.ejs +5 -0
- data/builtin/shaders/depthmap/vertex.ejs +7 -0
- data/builtin/shaders/fog/common.ejs +7 -0
- data/builtin/shaders/fog/fragment.ejs +23 -0
- data/builtin/shaders/fog/manifest.yml +12 -0
- data/builtin/shaders/fog/material.js +34 -0
- data/builtin/shaders/fog/vertex.ejs +10 -0
- data/builtin/shaders/functions/depth_map.ejs +24 -0
- data/builtin/shaders/functions/lights.ejs +155 -0
- data/builtin/shaders/lighting/common.ejs +5 -0
- data/builtin/shaders/lighting/fragment.ejs +34 -0
- data/builtin/shaders/lighting/manifest.yml +4 -0
- data/builtin/shaders/lighting/material.js +26 -0
- data/builtin/shaders/lighting/vertex.ejs +7 -0
- data/builtin/shaders/normal_map/common.ejs +12 -0
- data/builtin/shaders/normal_map/fragment.ejs +26 -0
- data/builtin/shaders/normal_map/manifest.yml +17 -0
- data/builtin/shaders/normal_map/material.js +16 -0
- data/builtin/shaders/normal_map/vertex.ejs +57 -0
- data/builtin/shaders/paraboloid-depthmap/common.ejs +6 -0
- data/builtin/shaders/paraboloid-depthmap/fragment.ejs +8 -0
- data/builtin/shaders/paraboloid-depthmap/material.js +15 -0
- data/builtin/shaders/paraboloid-depthmap/vertex.ejs +26 -0
- data/builtin/shaders/shadow_map/common.ejs +14 -0
- data/builtin/shaders/shadow_map/fragment.ejs +66 -0
- data/builtin/shaders/shadow_map/manifest.yml +1 -0
- data/builtin/shaders/shadow_map/material.js +26 -0
- data/builtin/shaders/shadow_map/vertex.ejs +46 -0
- data/builtin/shaders/texture/common.ejs +4 -0
- data/builtin/shaders/texture/fragment.ejs +11 -0
- data/builtin/shaders/texture/manifest.yml +17 -0
- data/builtin/shaders/texture/material.js +18 -0
- data/builtin/shaders/texture/vertex.ejs +9 -0
- data/guides/assets/images/book_icon.gif +0 -0
- data/guides/assets/images/bullet.gif +0 -0
- data/guides/assets/images/chapters_icon.gif +0 -0
- data/guides/assets/images/check_bullet.gif +0 -0
- data/guides/assets/images/credits_pic_blank.gif +0 -0
- data/guides/assets/images/edge_badge.png +0 -0
- data/guides/assets/images/feature_tile.gif +0 -0
- data/guides/assets/images/footer_tile.gif +0 -0
- data/guides/assets/images/getting_started/clean_passing_jasmine_suite.png +0 -0
- data/guides/assets/images/getting_started/rock.png +0 -0
- data/guides/assets/images/getting_started/rock_normal.png +0 -0
- data/guides/assets/images/grey_bullet.gif +0 -0
- data/guides/assets/images/header_backdrop.png +0 -0
- data/guides/assets/images/header_tile.gif +0 -0
- data/guides/assets/images/icons/README +5 -0
- data/guides/assets/images/icons/callouts/1.png +0 -0
- data/guides/assets/images/icons/callouts/10.png +0 -0
- data/guides/assets/images/icons/callouts/11.png +0 -0
- data/guides/assets/images/icons/callouts/12.png +0 -0
- data/guides/assets/images/icons/callouts/13.png +0 -0
- data/guides/assets/images/icons/callouts/14.png +0 -0
- data/guides/assets/images/icons/callouts/15.png +0 -0
- data/guides/assets/images/icons/callouts/2.png +0 -0
- data/guides/assets/images/icons/callouts/3.png +0 -0
- data/guides/assets/images/icons/callouts/4.png +0 -0
- data/guides/assets/images/icons/callouts/5.png +0 -0
- data/guides/assets/images/icons/callouts/6.png +0 -0
- data/guides/assets/images/icons/callouts/7.png +0 -0
- data/guides/assets/images/icons/callouts/8.png +0 -0
- data/guides/assets/images/icons/callouts/9.png +0 -0
- data/guides/assets/images/icons/caution.png +0 -0
- data/guides/assets/images/icons/example.png +0 -0
- data/guides/assets/images/icons/home.png +0 -0
- data/guides/assets/images/icons/important.png +0 -0
- data/guides/assets/images/icons/next.png +0 -0
- data/guides/assets/images/icons/note.png +0 -0
- data/guides/assets/images/icons/prev.png +0 -0
- data/guides/assets/images/icons/tip.png +0 -0
- data/guides/assets/images/icons/up.png +0 -0
- data/guides/assets/images/icons/warning.png +0 -0
- data/guides/assets/images/nav_arrow.gif +0 -0
- data/guides/assets/images/tab_grey.gif +0 -0
- data/guides/assets/images/tab_info.gif +0 -0
- data/guides/assets/images/tab_note.gif +0 -0
- data/guides/assets/images/tab_red.gif +0 -0
- data/guides/assets/images/tab_yellow.gif +0 -0
- data/guides/assets/images/tab_yellow.png +0 -0
- data/guides/assets/javascripts/guides.js +7 -0
- data/guides/assets/javascripts/syntaxhighlighter/shBrushAS3.js +59 -0
- data/guides/assets/javascripts/syntaxhighlighter/shBrushAppleScript.js +75 -0
- data/guides/assets/javascripts/syntaxhighlighter/shBrushBash.js +59 -0
- data/guides/assets/javascripts/syntaxhighlighter/shBrushCSharp.js +65 -0
- data/guides/assets/javascripts/syntaxhighlighter/shBrushColdFusion.js +100 -0
- data/guides/assets/javascripts/syntaxhighlighter/shBrushCpp.js +97 -0
- data/guides/assets/javascripts/syntaxhighlighter/shBrushCss.js +91 -0
- data/guides/assets/javascripts/syntaxhighlighter/shBrushDelphi.js +55 -0
- data/guides/assets/javascripts/syntaxhighlighter/shBrushDiff.js +41 -0
- data/guides/assets/javascripts/syntaxhighlighter/shBrushErlang.js +52 -0
- data/guides/assets/javascripts/syntaxhighlighter/shBrushGroovy.js +67 -0
- data/guides/assets/javascripts/syntaxhighlighter/shBrushJScript.js +52 -0
- data/guides/assets/javascripts/syntaxhighlighter/shBrushJava.js +57 -0
- data/guides/assets/javascripts/syntaxhighlighter/shBrushJavaFX.js +58 -0
- data/guides/assets/javascripts/syntaxhighlighter/shBrushPerl.js +72 -0
- data/guides/assets/javascripts/syntaxhighlighter/shBrushPhp.js +88 -0
- data/guides/assets/javascripts/syntaxhighlighter/shBrushPlain.js +33 -0
- data/guides/assets/javascripts/syntaxhighlighter/shBrushPowerShell.js +74 -0
- data/guides/assets/javascripts/syntaxhighlighter/shBrushPython.js +64 -0
- data/guides/assets/javascripts/syntaxhighlighter/shBrushRuby.js +55 -0
- data/guides/assets/javascripts/syntaxhighlighter/shBrushSass.js +94 -0
- data/guides/assets/javascripts/syntaxhighlighter/shBrushScala.js +51 -0
- data/guides/assets/javascripts/syntaxhighlighter/shBrushSql.js +66 -0
- data/guides/assets/javascripts/syntaxhighlighter/shBrushVb.js +56 -0
- data/guides/assets/javascripts/syntaxhighlighter/shBrushXml.js +69 -0
- data/guides/assets/javascripts/syntaxhighlighter/shCore.js +17 -0
- data/guides/assets/stylesheets/fixes.css +16 -0
- data/guides/assets/stylesheets/main.css +445 -0
- data/guides/assets/stylesheets/print.css +52 -0
- data/guides/assets/stylesheets/reset.css +43 -0
- data/guides/assets/stylesheets/style.css +13 -0
- data/guides/assets/stylesheets/syntaxhighlighter/shCore.css +226 -0
- data/guides/assets/stylesheets/syntaxhighlighter/shCoreDefault.css +328 -0
- data/guides/assets/stylesheets/syntaxhighlighter/shCoreDjango.css +331 -0
- data/guides/assets/stylesheets/syntaxhighlighter/shCoreEclipse.css +339 -0
- data/guides/assets/stylesheets/syntaxhighlighter/shCoreEmacs.css +324 -0
- data/guides/assets/stylesheets/syntaxhighlighter/shCoreFadeToGrey.css +328 -0
- data/guides/assets/stylesheets/syntaxhighlighter/shCoreMDUltra.css +324 -0
- data/guides/assets/stylesheets/syntaxhighlighter/shCoreMidnight.css +324 -0
- data/guides/assets/stylesheets/syntaxhighlighter/shCoreRDark.css +324 -0
- data/guides/assets/stylesheets/syntaxhighlighter/shThemeDefault.css +117 -0
- data/guides/assets/stylesheets/syntaxhighlighter/shThemeDjango.css +120 -0
- data/guides/assets/stylesheets/syntaxhighlighter/shThemeEclipse.css +128 -0
- data/guides/assets/stylesheets/syntaxhighlighter/shThemeEmacs.css +113 -0
- data/guides/assets/stylesheets/syntaxhighlighter/shThemeFadeToGrey.css +117 -0
- data/guides/assets/stylesheets/syntaxhighlighter/shThemeJaxGuides.css +116 -0
- data/guides/assets/stylesheets/syntaxhighlighter/shThemeMDUltra.css +113 -0
- data/guides/assets/stylesheets/syntaxhighlighter/shThemeMidnight.css +113 -0
- data/guides/assets/stylesheets/syntaxhighlighter/shThemeRDark.css +113 -0
- data/guides/jax_guides.rb +41 -0
- data/guides/jax_guides/common.rb +7 -0
- data/guides/jax_guides/generator.rb +287 -0
- data/guides/jax_guides/helpers.rb +29 -0
- data/guides/jax_guides/indexer.rb +69 -0
- data/guides/jax_guides/levenshtein.rb +31 -0
- data/guides/jax_guides/textile_extensions.rb +61 -0
- data/guides/source/getting_started.textile +1171 -0
- data/guides/source/index.html.erb +50 -0
- data/guides/source/layout.html.erb +158 -0
- data/guides/source/lighting.textile +5 -0
- data/guides/source/materials.textile +5 -0
- data/guides/source/shaders.textile +5 -0
- data/guides/source/testing.textile +5 -0
- data/guides/w3c_validator.rb +91 -0
- data/jax.gems +1 -0
- data/jax.gemspec +40 -0
- data/lib/jax.rb +28 -0
- data/lib/jax/application.rb +92 -0
- data/lib/jax/application/configuration.rb +27 -0
- data/lib/jax/generators/app.rb +17 -0
- data/lib/jax/generators/app/app_generator.rb +78 -0
- data/lib/jax/generators/app/templates/Gemfile.tt +3 -0
- data/lib/jax/generators/app/templates/Rakefile +6 -0
- data/lib/jax/generators/app/templates/app/controllers/application_controller.js.tt +5 -0
- data/lib/jax/generators/app/templates/app/helpers/application_helper.js.tt +3 -0
- data/lib/jax/generators/app/templates/app/models/.empty_directory +0 -0
- data/lib/jax/generators/app/templates/app/resources/.empty_directory +0 -0
- data/lib/jax/generators/app/templates/app/views/.empty_directory +0 -0
- data/lib/jax/generators/app/templates/config/application.rb.tt +6 -0
- data/lib/jax/generators/app/templates/config/boot.rb +13 -0
- data/lib/jax/generators/app/templates/config/routes.rb.tt +5 -0
- data/lib/jax/generators/app/templates/public/javascripts/jax.js +7561 -0
- data/lib/jax/generators/app/templates/public/webgl_not_supported.html +26 -0
- data/lib/jax/generators/app/templates/script/jax +7 -0
- data/lib/jax/generators/app/templates/spec/javascripts/controllers/application_controller_spec.js +11 -0
- data/lib/jax/generators/app/templates/spec/javascripts/helpers/application_helper_spec.js +12 -0
- data/lib/jax/generators/app/templates/spec/javascripts/support/jasmine.yml +90 -0
- data/lib/jax/generators/app/templates/spec/javascripts/support/jasmine_config.rb +23 -0
- data/lib/jax/generators/app/templates/spec/javascripts/support/jasmine_runner.rb +32 -0
- data/lib/jax/generators/app/templates/spec/javascripts/support/spec_helpers/jax_spec_helper.js +216 -0
- data/lib/jax/generators/app/templates/spec/javascripts/support/spec_layout.html.erb +63 -0
- data/lib/jax/generators/commands.rb +81 -0
- data/lib/jax/generators/controller/USAGE +9 -0
- data/lib/jax/generators/controller/controller_generator.rb +59 -0
- data/lib/jax/generators/controller/templates/controller_source.js.tt +16 -0
- data/lib/jax/generators/controller/templates/controller_test.js.tt +11 -0
- data/lib/jax/generators/controller/templates/helper.js.tt +3 -0
- data/lib/jax/generators/controller/templates/helper_test.js.tt +12 -0
- data/lib/jax/generators/controller/templates/view.js.tt +4 -0
- data/lib/jax/generators/light_source/USAGE +14 -0
- data/lib/jax/generators/light_source/light_source_generator.rb +47 -0
- data/lib/jax/generators/light_source/templates/light.yml.tt +39 -0
- data/lib/jax/generators/material/USAGE +29 -0
- data/lib/jax/generators/material/material_generator.rb +81 -0
- data/lib/jax/generators/material/templates/append.yml.tt +7 -0
- data/lib/jax/generators/material/templates/material.yml.tt +33 -0
- data/lib/jax/generators/model/USAGE +5 -0
- data/lib/jax/generators/model/model_generator.rb +42 -0
- data/lib/jax/generators/model/templates/model.js.tt +11 -0
- data/lib/jax/generators/model/templates/test.js.tt +11 -0
- data/lib/jax/generators/script_jax_loader.rb +32 -0
- data/lib/jax/monkeypatch/jasmine.rb +3 -0
- data/lib/jax/monkeypatch/jasmine/config.rb +21 -0
- data/lib/jax/monkeypatch/jasmine/server.rb +50 -0
- data/lib/jax/packager.rb +58 -0
- data/lib/jax/packager/sprockets_template.rb +49 -0
- data/lib/jax/resource_compiler.rb +50 -0
- data/lib/jax/routes.rb +61 -0
- data/lib/jax/shader.rb +158 -0
- data/lib/jax/tasks/rake.rb +34 -0
- data/lib/jax/version.rb +12 -0
- data/public/images/brickwall.jpg +0 -0
- data/public/images/jacks.jpg +0 -0
- data/public/images/normal_map.jpg +0 -0
- data/public/images/rock.png +0 -0
- data/public/images/rockNormal.png +0 -0
- data/public/images/rss.png +0 -0
- data/public/webgl_not_supported.html +26 -0
- data/spec/example_app/Gemfile +1 -0
- data/spec/example_app/Rakefile +15 -0
- data/spec/example_app/app/controllers/application_controller.js +5 -0
- data/spec/example_app/app/controllers/courthouse_controller.js +24 -0
- data/spec/example_app/app/controllers/lighting_controller.js +69 -0
- data/spec/example_app/app/controllers/shadows_controller.js +130 -0
- data/spec/example_app/app/controllers/textures_controller.js +52 -0
- data/spec/example_app/app/helpers/application_helper.js +3 -0
- data/spec/example_app/app/helpers/textures_helper.js +3 -0
- data/spec/example_app/app/models/character.js +23 -0
- data/spec/example_app/app/models/door.js +10 -0
- data/spec/example_app/app/models/scene.js +19 -0
- data/spec/example_app/app/resources/characters/judge.yml +3 -0
- data/spec/example_app/app/resources/doors/courthouse_door.yml +5 -0
- data/spec/example_app/app/resources/light_sources/directional_light.yml +13 -0
- data/spec/example_app/app/resources/light_sources/point_light.yml +31 -0
- data/spec/example_app/app/resources/light_sources/spot_light.yml +15 -0
- data/spec/example_app/app/resources/light_sources/sun.yml +7 -0
- data/spec/example_app/app/resources/light_sources/textures_point.yml +34 -0
- data/spec/example_app/app/resources/materials/bricks.yml +36 -0
- data/spec/example_app/app/resources/materials/lighting_with_shadows.yml +27 -0
- data/spec/example_app/app/resources/scenes/courthouse.yml +4 -0
- data/spec/example_app/app/views/courthouse/index.js +4 -0
- data/spec/example_app/app/views/lighting/index.js +4 -0
- data/spec/example_app/app/views/shadows/index.js +6 -0
- data/spec/example_app/app/views/textures/index.js +4 -0
- data/spec/example_app/config/application.rb +6 -0
- data/spec/example_app/config/boot.rb +13 -0
- data/spec/example_app/config/routes.rb +6 -0
- data/spec/example_app/public/images/185__normalmap.png +0 -0
- data/spec/example_app/public/images/face_norm.jpg +0 -0
- data/spec/example_app/public/images/rock.png +0 -0
- data/spec/example_app/public/images/rockNormal.png +0 -0
- data/spec/example_app/public/images/rss.png +0 -0
- data/spec/example_app/public/webgl_not_supported.html +26 -0
- data/spec/example_app/script/jax +7 -0
- data/spec/example_app/spec/javascripts/controllers/textures_controller_spec.js +11 -0
- data/spec/example_app/spec/javascripts/helpers/application_helper_spec.js +12 -0
- data/spec/example_app/spec/javascripts/resources/directional_light_spec.js +16 -0
- data/spec/example_app/spec/javascripts/resources/point_light_spec.js +17 -0
- data/spec/example_app/spec/javascripts/resources/spot_light_spec.js +18 -0
- data/spec/example_app/spec/javascripts/support/jasmine.yml +89 -0
- data/spec/example_app/spec/javascripts/support/jasmine_runner.rb +32 -0
- data/spec/example_app/spec/javascripts/support/spec_helpers/jax_spec_helper.js +93 -0
- data/spec/example_app/spec/javascripts/support/spec_layout.html.erb +84 -0
- data/spec/generators/app_generator_spec.rb +46 -0
- data/spec/generators/controller_generator_spec.rb +68 -0
- data/spec/generators/light_generator_spec.rb +51 -0
- data/spec/generators/material_generator_spec.rb +35 -0
- data/spec/generators/model_generator_spec.rb +43 -0
- data/spec/javascripts/Player.js +58 -0
- data/spec/javascripts/helpers/SpecHelper.js +216 -0
- data/spec/javascripts/jax/builtin/materials/core_materials_spec.js +41 -0
- data/spec/javascripts/jax/builtin/materials/dual_paraboloid_spec.js +37 -0
- data/spec/javascripts/jax/builtin/materials/fog_spec.js +19 -0
- data/spec/javascripts/jax/builtin/materials/lighting_spec.js +19 -0
- data/spec/javascripts/jax/builtin/materials/normal_map_spec.js +19 -0
- data/spec/javascripts/jax/builtin/materials/shadow_map_spec.js +19 -0
- data/spec/javascripts/jax/builtin/materials/texture_spec.js +19 -0
- data/spec/javascripts/jax/builtin/meshes/cube_spec.js +10 -0
- data/spec/javascripts/jax/builtin/meshes/plane_spec.js +8 -0
- data/spec/javascripts/jax/builtin/meshes/quad_spec.js +8 -0
- data/spec/javascripts/jax/builtin/meshes/sphere_spec.js +8 -0
- data/spec/javascripts/jax/builtin/meshes/teapot_spec.js +8 -0
- data/spec/javascripts/jax/builtin/meshes/torus_spec.js +8 -0
- data/spec/javascripts/jax/compatibility_spec.js +50 -0
- data/spec/javascripts/jax/context_spec.js +82 -0
- data/spec/javascripts/jax/controller_spec.js +145 -0
- data/spec/javascripts/jax/core/delegation_spec.js +48 -0
- data/spec/javascripts/jax/core/events_spec.js +17 -0
- data/spec/javascripts/jax/core/matrix_stack_spec.js +28 -0
- data/spec/javascripts/jax/core/utils_spec.js +256 -0
- data/spec/javascripts/jax/helper_spec.js +33 -0
- data/spec/javascripts/jax/model_spec.js +87 -0
- data/spec/javascripts/jax/optimizations/material_limitations_spec.js +87 -0
- data/spec/javascripts/jax/optimizations/shaders/basic_spec.js +68 -0
- data/spec/javascripts/jax/prototype/extensions_spec.js +34 -0
- data/spec/javascripts/jax/route_set_spec.js +67 -0
- data/spec/javascripts/jax/view_manager_spec.js +17 -0
- data/spec/javascripts/jax/webgl/camera_spec.js +159 -0
- data/spec/javascripts/jax/webgl/framebuffer_spec.js +46 -0
- data/spec/javascripts/jax/webgl/lighting_spec.js +61 -0
- data/spec/javascripts/jax/webgl/material_spec.js +118 -0
- data/spec/javascripts/jax/webgl/mesh_spec.js +86 -0
- data/spec/javascripts/jax/webgl/shader/manifest_spec.js +60 -0
- data/spec/javascripts/jax/webgl/shader_chain_spec.js +192 -0
- data/spec/javascripts/jax/webgl/shader_spec.js +276 -0
- data/spec/javascripts/jax/webgl/tangent_space_spec.js +142 -0
- data/spec/javascripts/jax/webgl/texture_spec.js +162 -0
- data/spec/javascripts/jax/webgl_spec.js +5 -0
- data/spec/javascripts/jax/world_spec.js +88 -0
- data/spec/javascripts/jax_spec.js +27 -0
- data/spec/javascripts/support/jasmine.yml +85 -0
- data/spec/javascripts/support/jasmine_runner.rb +32 -0
- data/spec/lib/jax/routes_spec.rb +24 -0
- data/spec/lib/jax/shader_spec.rb +57 -0
- data/spec/lib/jax/tasks/jax_rake_spec.rb +79 -0
- data/spec/spec_helper.rb +11 -0
- data/spec/support/file_exist_matcher.rb +23 -0
- data/spec/support/spec_shell.rb +97 -0
- data/src/jax.js +84 -0
- data/src/jax/anim_frame.js +47 -0
- data/src/jax/builtin/all.js +7 -0
- data/src/jax/builtin/meshes/cube.js +62 -0
- data/src/jax/builtin/meshes/plane.js +36 -0
- data/src/jax/builtin/meshes/quad.js +80 -0
- data/src/jax/builtin/meshes/sphere.js +46 -0
- data/src/jax/builtin/meshes/teapot.js +38 -0
- data/src/jax/builtin/meshes/torus.js +46 -0
- data/src/jax/compatibility.js +140 -0
- data/src/jax/context.js +253 -0
- data/src/jax/controller.js +157 -0
- data/src/jax/core.js +39 -0
- data/src/jax/core/math.js +40 -0
- data/src/jax/core/matrix_stack.js +306 -0
- data/src/jax/core/util.js +226 -0
- data/src/jax/events.js +179 -0
- data/src/jax/geometry.js +3 -0
- data/src/jax/geometry/plane.js +59 -0
- data/src/jax/helper.js +8 -0
- data/src/jax/model.js +163 -0
- data/src/jax/prototype/class.js +78 -0
- data/src/jax/prototype/core.js +112 -0
- data/src/jax/prototype/extensions.js +124 -0
- data/src/jax/route_set.js +125 -0
- data/src/jax/vendor/ejs.js +4 -0
- data/src/jax/vendor/glMatrix.js +3 -0
- data/src/jax/view.js +37 -0
- data/src/jax/view_manager.js +46 -0
- data/src/jax/webgl.js +98 -0
- data/src/jax/webgl/camera.js +526 -0
- data/src/jax/webgl/core.js +6 -0
- data/src/jax/webgl/core/buffer.js +161 -0
- data/src/jax/webgl/core/edge.js +6 -0
- data/src/jax/webgl/core/events.js +25 -0
- data/src/jax/webgl/core/face.js +8 -0
- data/src/jax/webgl/core/framebuffer.js +206 -0
- data/src/jax/webgl/material.js +375 -0
- data/src/jax/webgl/mesh.js +412 -0
- data/src/jax/webgl/scene.js +11 -0
- data/src/jax/webgl/scene/frustum.js +260 -0
- data/src/jax/webgl/scene/light_manager.js +112 -0
- data/src/jax/webgl/scene/light_source.js +248 -0
- data/src/jax/webgl/shader.js +282 -0
- data/src/jax/webgl/shader/delegator.js +13 -0
- data/src/jax/webgl/shader/delegator/attribute.js +53 -0
- data/src/jax/webgl/shader/delegator/uniform.js +71 -0
- data/src/jax/webgl/shader/manifest.js +64 -0
- data/src/jax/webgl/shader/program.js +140 -0
- data/src/jax/webgl/shader_chain.js +256 -0
- data/src/jax/webgl/texture.js +312 -0
- data/src/jax/webgl/world.js +119 -0
- data/vendor/ejs/.svn/all-wcprops +17 -0
- data/vendor/ejs/.svn/entries +114 -0
- data/vendor/ejs/.svn/text-base/Eratta.txt.svn-base +3 -0
- data/vendor/ejs/.svn/text-base/license.txt.svn-base +21 -0
- data/vendor/ejs/Eratta.txt +3 -0
- data/vendor/ejs/example/.svn/all-wcprops +29 -0
- data/vendor/ejs/example/.svn/entries +164 -0
- data/vendor/ejs/example/.svn/prop-base/ejs.gif.svn-base +5 -0
- data/vendor/ejs/example/.svn/text-base/demo.html.svn-base +54 -0
- data/vendor/ejs/example/.svn/text-base/ejs.gif.svn-base +0 -0
- data/vendor/ejs/example/.svn/text-base/example.css.svn-base +31 -0
- data/vendor/ejs/example/.svn/text-base/example.js.svn-base +88 -0
- data/vendor/ejs/example/demo.html +54 -0
- data/vendor/ejs/example/ejs.gif +0 -0
- data/vendor/ejs/example/example.css +31 -0
- data/vendor/ejs/example/example.js +88 -0
- data/vendor/ejs/lib/.svn/all-wcprops +11 -0
- data/vendor/ejs/lib/.svn/entries +62 -0
- data/vendor/ejs/lib/.svn/text-base/ejs_fulljslint.js.svn-base +3774 -0
- data/vendor/ejs/lib/ejs_fulljslint.js +3774 -0
- data/vendor/ejs/license.txt +21 -0
- data/vendor/ejs/script/.svn/all-wcprops +17 -0
- data/vendor/ejs/script/.svn/entries +96 -0
- data/vendor/ejs/script/.svn/prop-base/yuicompressor-2.2.4.jar.svn-base +5 -0
- data/vendor/ejs/script/.svn/text-base/production.bat.svn-base +4 -0
- data/vendor/ejs/script/.svn/text-base/yuicompressor-2.2.4.jar.svn-base +0 -0
- data/vendor/ejs/script/production.bat +4 -0
- data/vendor/ejs/script/yuicompressor-2.2.4.jar +0 -0
- data/vendor/ejs/src/.svn/all-wcprops +17 -0
- data/vendor/ejs/src/.svn/entries +96 -0
- data/vendor/ejs/src/.svn/text-base/ejs.js.svn-base +505 -0
- data/vendor/ejs/src/.svn/text-base/view.js.svn-base +200 -0
- data/vendor/ejs/src/ejs.js +505 -0
- data/vendor/ejs/src/view.js +200 -0
- data/vendor/ejs/test/.svn/all-wcprops +23 -0
- data/vendor/ejs/test/.svn/entries +139 -0
- data/vendor/ejs/test/.svn/text-base/index.html.svn-base +18 -0
- data/vendor/ejs/test/.svn/text-base/setup_test.html.svn-base +44 -0
- data/vendor/ejs/test/.svn/text-base/sidebar.html.svn-base +28 -0
- data/vendor/ejs/test/included/.svn/all-wcprops +23 -0
- data/vendor/ejs/test/included/.svn/entries +130 -0
- data/vendor/ejs/test/included/.svn/text-base/prototype.js.svn-base +4184 -0
- data/vendor/ejs/test/included/.svn/text-base/test.css.svn-base +44 -0
- data/vendor/ejs/test/included/.svn/text-base/unittest.js.svn-base +564 -0
- data/vendor/ejs/test/included/prototype.js +4184 -0
- data/vendor/ejs/test/included/test.css +44 -0
- data/vendor/ejs/test/included/unittest.js +564 -0
- data/vendor/ejs/test/index.html +18 -0
- data/vendor/ejs/test/setup_test.html +44 -0
- data/vendor/ejs/test/sidebar.html +28 -0
- data/vendor/ejs/test/templates/.svn/all-wcprops +11 -0
- data/vendor/ejs/test/templates/.svn/entries +62 -0
- data/vendor/ejs/test/templates/.svn/text-base/test.ejs.svn-base +3 -0
- data/vendor/ejs/test/templates/test.ejs +3 -0
- data/vendor/ejs/test/tests/.svn/all-wcprops +23 -0
- data/vendor/ejs/test/tests/.svn/entries +130 -0
- data/vendor/ejs/test/tests/.svn/text-base/rendering.js.svn-base +94 -0
- data/vendor/ejs/test/tests/.svn/text-base/templating.js.svn-base +43 -0
- data/vendor/ejs/test/tests/.svn/text-base/views.js.svn-base +100 -0
- data/vendor/ejs/test/tests/rendering.js +94 -0
- data/vendor/ejs/test/tests/templating.js +43 -0
- data/vendor/ejs/test/tests/views.js +100 -0
- data/vendor/glmatrix/benchmark/js/CanvasMatrix.js +722 -0
- data/vendor/glmatrix/benchmark/js/EWGL_math.js +742 -0
- data/vendor/glmatrix/benchmark/js/mjs.js +1230 -0
- data/vendor/glmatrix/benchmark/matrix_benchmark.html +419 -0
- data/vendor/glmatrix/glMatrix-min.js +32 -0
- data/vendor/glmatrix/glMatrix.js +1815 -0
- data/vendor/glmatrix/unit tests/glMatrix-test.js +74 -0
- data/vendor/glmatrix/unit tests/qunit.css +119 -0
- data/vendor/glmatrix/unit tests/qunit.js +1069 -0
- data/vendor/glmatrix/unit tests/test_glMatrix.html +21 -0
- data/vendor/yuicompressor-2.4.2.jar +0 -0
- metadata +748 -0
|
@@ -0,0 +1,1230 @@
|
|
|
1
|
+
/* -*- Mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40; -*- */
|
|
2
|
+
/*
|
|
3
|
+
* Copyright (c) 2010 Mozilla Corporation
|
|
4
|
+
* Copyright (c) 2010 Vladimir Vukicevic
|
|
5
|
+
*
|
|
6
|
+
* Permission is hereby granted, free of charge, to any person
|
|
7
|
+
* obtaining a copy of this software and associated documentation
|
|
8
|
+
* files (the "Software"), to deal in the Software without
|
|
9
|
+
* restriction, including without limitation the rights to use,
|
|
10
|
+
* copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
11
|
+
* copies of the Software, and to permit persons to whom the
|
|
12
|
+
* Software is furnished to do so, subject to the following
|
|
13
|
+
* conditions:
|
|
14
|
+
*
|
|
15
|
+
* The above copyright notice and this permission notice shall be
|
|
16
|
+
* included in all copies or substantial portions of the Software.
|
|
17
|
+
*
|
|
18
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
19
|
+
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
|
20
|
+
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
21
|
+
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
|
22
|
+
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
23
|
+
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
24
|
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
|
25
|
+
* OTHER DEALINGS IN THE SOFTWARE.
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
/*
|
|
29
|
+
* File: mjs
|
|
30
|
+
*
|
|
31
|
+
* Vector and Matrix math utilities for JavaScript, optimized for WebGL.
|
|
32
|
+
*/
|
|
33
|
+
|
|
34
|
+
/*
|
|
35
|
+
* Constant: MJS_VERSION
|
|
36
|
+
*
|
|
37
|
+
* mjs version number aa.bb.cc, encoded as an integer of the form:
|
|
38
|
+
* 0xaabbcc.
|
|
39
|
+
*/
|
|
40
|
+
const MJS_VERSION = 0x000000;
|
|
41
|
+
|
|
42
|
+
/*
|
|
43
|
+
* Constant: MJS_DO_ASSERT
|
|
44
|
+
*
|
|
45
|
+
* Enables or disables runtime assertions.
|
|
46
|
+
*
|
|
47
|
+
* For potentially more performance, the assert methods can be
|
|
48
|
+
* commented out in each place where they are called.
|
|
49
|
+
*/
|
|
50
|
+
const MJS_DO_ASSERT = true;
|
|
51
|
+
|
|
52
|
+
// Some hacks for running in both the shell and browser,
|
|
53
|
+
// and for supporting F32 and WebGLFloat arrays
|
|
54
|
+
try { WebGLFloatArray; } catch (x) { WebGLFloatArray = Float32Array; }
|
|
55
|
+
|
|
56
|
+
/*
|
|
57
|
+
* Constant: MJS_FLOAT_ARRAY_TYPE
|
|
58
|
+
*
|
|
59
|
+
* The base float array type. By default, WebGLFloatArray.
|
|
60
|
+
*
|
|
61
|
+
* mjs can work with any array-like elements, but if an array
|
|
62
|
+
* creation is requested, it will create an array of the type
|
|
63
|
+
* MJS_FLOAT_ARRAY_TYPE. Also, the builtin constants such as (M4x4.I)
|
|
64
|
+
* will be of this type.
|
|
65
|
+
*/
|
|
66
|
+
const MJS_FLOAT_ARRAY_TYPE = WebGLFloatArray;
|
|
67
|
+
//const MJS_FLOAT_ARRAY_TYPE = Float32Array;
|
|
68
|
+
//const MJS_FLOAT_ARRAY_TYPE = Float64Array;
|
|
69
|
+
//const MJS_FLOAT_ARRAY_TYPE = Array;
|
|
70
|
+
|
|
71
|
+
if (MJS_DO_ASSERT) {
|
|
72
|
+
function MathUtils_assert(cond, msg) {
|
|
73
|
+
if (!cond)
|
|
74
|
+
throw "Assertion failed: " + msg;
|
|
75
|
+
}
|
|
76
|
+
} else {
|
|
77
|
+
function MathUtils_assert() { }
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/*
|
|
81
|
+
* Class: V3
|
|
82
|
+
*
|
|
83
|
+
* Methods for working with 3-element vectors. A vector is represented by a 3-element array.
|
|
84
|
+
* Any valid JavaScript array type may be used, but if new
|
|
85
|
+
* vectors are created they are created using the configured MJS_FLOAT_ARRAY_TYPE.
|
|
86
|
+
*/
|
|
87
|
+
|
|
88
|
+
var V3 = { };
|
|
89
|
+
|
|
90
|
+
V3._temp1 = new MJS_FLOAT_ARRAY_TYPE(3);
|
|
91
|
+
V3._temp2 = new MJS_FLOAT_ARRAY_TYPE(3);
|
|
92
|
+
V3._temp3 = new MJS_FLOAT_ARRAY_TYPE(3);
|
|
93
|
+
|
|
94
|
+
if (MJS_FLOAT_ARRAY_TYPE == Array) {
|
|
95
|
+
V3.x = [1.0, 0.0, 0.0];
|
|
96
|
+
V3.y = [0.0, 1.0, 0.0];
|
|
97
|
+
V3.z = [0.0, 0.0, 1.0];
|
|
98
|
+
|
|
99
|
+
V3.$ = function V3_$(x, y, z) {
|
|
100
|
+
return [x, y, z];
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
V3.clone = function V3_clone(a) {
|
|
104
|
+
//MathUtils_assert(a.length == 3, "a.length == 3");
|
|
105
|
+
return [a[0], a[1], a[2]];
|
|
106
|
+
};
|
|
107
|
+
} else {
|
|
108
|
+
V3.x = new MJS_FLOAT_ARRAY_TYPE([1.0, 0.0, 0.0]);
|
|
109
|
+
V3.y = new MJS_FLOAT_ARRAY_TYPE([0.0, 1.0, 0.0]);
|
|
110
|
+
V3.z = new MJS_FLOAT_ARRAY_TYPE([0.0, 0.0, 1.0]);
|
|
111
|
+
|
|
112
|
+
/*
|
|
113
|
+
* Function: V3.$
|
|
114
|
+
*
|
|
115
|
+
* Creates a new 3-element vector with the given values.
|
|
116
|
+
*
|
|
117
|
+
* Parameters:
|
|
118
|
+
*
|
|
119
|
+
* x,y,z - the 3 elements of the new vector.
|
|
120
|
+
*
|
|
121
|
+
* Returns:
|
|
122
|
+
*
|
|
123
|
+
* A new vector containing with the given argument values.
|
|
124
|
+
*/
|
|
125
|
+
|
|
126
|
+
V3.$ = function V3_$(x, y, z) {
|
|
127
|
+
return new MJS_FLOAT_ARRAY_TYPE([x, y, z]);
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
/*
|
|
131
|
+
* Function: V3.clone
|
|
132
|
+
*
|
|
133
|
+
* Clone the given 3-element vector.
|
|
134
|
+
*
|
|
135
|
+
* Parameters:
|
|
136
|
+
*
|
|
137
|
+
* a - the 3-element vector to clone
|
|
138
|
+
*
|
|
139
|
+
* Returns:
|
|
140
|
+
*
|
|
141
|
+
* A new vector with the same values as the passed-in one.
|
|
142
|
+
*/
|
|
143
|
+
|
|
144
|
+
V3.clone = function V3_clone(a) {
|
|
145
|
+
//MathUtils_assert(a.length == 3, "a.length == 3");
|
|
146
|
+
return new MJS_FLOAT_ARRAY_TYPE(a);
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
V3.u = V3.x;
|
|
151
|
+
V3.v = V3.y;
|
|
152
|
+
|
|
153
|
+
/*
|
|
154
|
+
* Function: V3.add
|
|
155
|
+
*
|
|
156
|
+
* Perform r = a + b.
|
|
157
|
+
*
|
|
158
|
+
* Parameters:
|
|
159
|
+
*
|
|
160
|
+
* a - the first vector operand
|
|
161
|
+
* b - the second vector operand
|
|
162
|
+
* r - optional vector to store the result in
|
|
163
|
+
*
|
|
164
|
+
* Returns:
|
|
165
|
+
*
|
|
166
|
+
* If r is specified, returns r after performing the operation.
|
|
167
|
+
* Otherwise, returns a new 3-element vector with the result.
|
|
168
|
+
*/
|
|
169
|
+
V3.add = function V3_add(a, b, r) {
|
|
170
|
+
//MathUtils_assert(a.length == 3, "a.length == 3");
|
|
171
|
+
//MathUtils_assert(b.length == 3, "b.length == 3");
|
|
172
|
+
//MathUtils_assert(r == undefined || r.length == 3, "r == undefined || r.length == 3");
|
|
173
|
+
|
|
174
|
+
if (r == undefined)
|
|
175
|
+
r = new MJS_FLOAT_ARRAY_TYPE(3);
|
|
176
|
+
r[0] = a[0] + b[0];
|
|
177
|
+
r[1] = a[1] + b[1];
|
|
178
|
+
r[2] = a[2] + b[2];
|
|
179
|
+
return r;
|
|
180
|
+
};
|
|
181
|
+
|
|
182
|
+
/*
|
|
183
|
+
* Function: V3.sub
|
|
184
|
+
*
|
|
185
|
+
* Perform
|
|
186
|
+
* r = a - b.
|
|
187
|
+
*
|
|
188
|
+
* Parameters:
|
|
189
|
+
*
|
|
190
|
+
* a - the first vector operand
|
|
191
|
+
* b - the second vector operand
|
|
192
|
+
* r - optional vector to store the result in
|
|
193
|
+
*
|
|
194
|
+
* Returns:
|
|
195
|
+
*
|
|
196
|
+
* If r is specified, returns r after performing the operation.
|
|
197
|
+
* Otherwise, returns a new 3-element vector with the result.
|
|
198
|
+
*/
|
|
199
|
+
V3.sub = function V3_sub(a, b, r) {
|
|
200
|
+
//MathUtils_assert(a.length == 3, "a.length == 3");
|
|
201
|
+
//MathUtils_assert(b.length == 3, "b.length == 3");
|
|
202
|
+
//MathUtils_assert(r == undefined || r.length == 3, "r == undefined || r.length == 3");
|
|
203
|
+
|
|
204
|
+
if (r == undefined)
|
|
205
|
+
r = new MJS_FLOAT_ARRAY_TYPE(3);
|
|
206
|
+
r[0] = a[0] - b[0];
|
|
207
|
+
r[1] = a[1] - b[1];
|
|
208
|
+
r[2] = a[2] - b[2];
|
|
209
|
+
return r;
|
|
210
|
+
};
|
|
211
|
+
|
|
212
|
+
/*
|
|
213
|
+
* Function: V3.neg
|
|
214
|
+
*
|
|
215
|
+
* Perform
|
|
216
|
+
* r = - a.
|
|
217
|
+
*
|
|
218
|
+
* Parameters:
|
|
219
|
+
*
|
|
220
|
+
* a - the vector operand
|
|
221
|
+
* r - optional vector to store the result in
|
|
222
|
+
*
|
|
223
|
+
* Returns:
|
|
224
|
+
*
|
|
225
|
+
* If r is specified, returns r after performing the operation.
|
|
226
|
+
* Otherwise, returns a new 3-element vector with the result.
|
|
227
|
+
*/
|
|
228
|
+
V3.neg = function V3_neg(a, r) {
|
|
229
|
+
//MathUtils_assert(a.length == 3, "a.length == 3");
|
|
230
|
+
//MathUtils_assert(r == undefined || r.length == 3, "r == undefined || r.length == 3");
|
|
231
|
+
|
|
232
|
+
if (r == undefined)
|
|
233
|
+
r = new MJS_FLOAT_ARRAY_TYPE(3);
|
|
234
|
+
r[0] = - a[0];
|
|
235
|
+
r[1] = - a[1];
|
|
236
|
+
r[2] = - a[2];
|
|
237
|
+
return r;
|
|
238
|
+
};
|
|
239
|
+
|
|
240
|
+
/*
|
|
241
|
+
* Function: V3.direction
|
|
242
|
+
*
|
|
243
|
+
* Perform
|
|
244
|
+
* r = (a - b) / |a - b|. The result is the normalized
|
|
245
|
+
* direction from a to b.
|
|
246
|
+
*
|
|
247
|
+
* Parameters:
|
|
248
|
+
*
|
|
249
|
+
* a - the first vector operand
|
|
250
|
+
* b - the second vector operand
|
|
251
|
+
* r - optional vector to store the result in
|
|
252
|
+
*
|
|
253
|
+
* Returns:
|
|
254
|
+
*
|
|
255
|
+
* If r is specified, returns r after performing the operation.
|
|
256
|
+
* Otherwise, returns a new 3-element vector with the result.
|
|
257
|
+
*/
|
|
258
|
+
V3.direction = function V3_direction(a, b, r) {
|
|
259
|
+
//MathUtils_assert(a.length == 3, "a.length == 3");
|
|
260
|
+
//MathUtils_assert(b.length == 3, "b.length == 3");
|
|
261
|
+
//MathUtils_assert(r == undefined || r.length == 3, "r == undefined || r.length == 3");
|
|
262
|
+
|
|
263
|
+
if (r == undefined)
|
|
264
|
+
r = new MJS_FLOAT_ARRAY_TYPE(3);
|
|
265
|
+
return V3.normalize(V3.sub(a, b, r), r);
|
|
266
|
+
};
|
|
267
|
+
|
|
268
|
+
/*
|
|
269
|
+
* Function: V3.length
|
|
270
|
+
*
|
|
271
|
+
* Perform r = |a|.
|
|
272
|
+
*
|
|
273
|
+
* Parameters:
|
|
274
|
+
*
|
|
275
|
+
* a - the vector operand
|
|
276
|
+
*
|
|
277
|
+
* Returns:
|
|
278
|
+
*
|
|
279
|
+
* The length of the given vector.
|
|
280
|
+
*/
|
|
281
|
+
V3.length = function V3_length(a) {
|
|
282
|
+
//MathUtils_assert(a.length == 3, "a.length == 3");
|
|
283
|
+
|
|
284
|
+
return Math.sqrt(a[0]*a[0] + a[1]*a[1] + a[2]*a[2]);
|
|
285
|
+
};
|
|
286
|
+
|
|
287
|
+
/*
|
|
288
|
+
* Function: V3.lengthSquard
|
|
289
|
+
*
|
|
290
|
+
* Perform r = |a|*|a|.
|
|
291
|
+
*
|
|
292
|
+
* Parameters:
|
|
293
|
+
*
|
|
294
|
+
* a - the vector operand
|
|
295
|
+
*
|
|
296
|
+
* Returns:
|
|
297
|
+
*
|
|
298
|
+
* The square of the length of the given vector.
|
|
299
|
+
*/
|
|
300
|
+
V3.lengthSquared = function V3_lengthSquared(a) {
|
|
301
|
+
//MathUtils_assert(a.length == 3, "a.length == 3");
|
|
302
|
+
|
|
303
|
+
return a[0]*a[0] + a[1]*a[1] + a[2]*a[2];
|
|
304
|
+
};
|
|
305
|
+
|
|
306
|
+
/*
|
|
307
|
+
* Function: V3.normalize
|
|
308
|
+
*
|
|
309
|
+
* Perform r = a / |a|.
|
|
310
|
+
*
|
|
311
|
+
* Parameters:
|
|
312
|
+
*
|
|
313
|
+
* a - the vector operand
|
|
314
|
+
* r - optional vector to store the result in
|
|
315
|
+
*
|
|
316
|
+
* Returns:
|
|
317
|
+
*
|
|
318
|
+
* If r is specified, returns r after performing the operation.
|
|
319
|
+
* Otherwise, returns a new 3-element vector with the result.
|
|
320
|
+
*/
|
|
321
|
+
V3.normalize = function V3_normalize(a, r) {
|
|
322
|
+
//MathUtils_assert(a.length == 3, "a.length == 3");
|
|
323
|
+
//MathUtils_assert(r == undefined || r.length == 3, "r == undefined || r.length == 3");
|
|
324
|
+
|
|
325
|
+
if (r == undefined)
|
|
326
|
+
r = new MJS_FLOAT_ARRAY_TYPE(3);
|
|
327
|
+
var im = 1.0 / V3.length(a);
|
|
328
|
+
r[0] = a[0] * im;
|
|
329
|
+
r[1] = a[1] * im;
|
|
330
|
+
r[2] = a[2] * im;
|
|
331
|
+
return r;
|
|
332
|
+
};
|
|
333
|
+
|
|
334
|
+
/*
|
|
335
|
+
* Function: V3.scale
|
|
336
|
+
*
|
|
337
|
+
* Perform r = a * k.
|
|
338
|
+
*
|
|
339
|
+
* Parameters:
|
|
340
|
+
*
|
|
341
|
+
* a - the vector operand
|
|
342
|
+
* k - a scalar value
|
|
343
|
+
* r - optional vector to store the result in
|
|
344
|
+
*
|
|
345
|
+
* Returns:
|
|
346
|
+
*
|
|
347
|
+
* If r is specified, returns r after performing the operation.
|
|
348
|
+
* Otherwise, returns a new 3-element vector with the result.
|
|
349
|
+
*/
|
|
350
|
+
V3.scale = function V3_scale(a, k, r) {
|
|
351
|
+
//MathUtils_assert(a.length == 3, "a.length == 3");
|
|
352
|
+
//MathUtils_assert(r == undefined || r.length == 3, "r == undefined || r.length == 3");
|
|
353
|
+
|
|
354
|
+
if (r == undefined)
|
|
355
|
+
r = new MJS_FLOAT_ARRAY_TYPE(3);
|
|
356
|
+
r[0] = a[0] * k;
|
|
357
|
+
r[1] = a[1] * k;
|
|
358
|
+
r[2] = a[2] * k;
|
|
359
|
+
return r;
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
/*
|
|
363
|
+
* Function: V3.dot
|
|
364
|
+
*
|
|
365
|
+
* Perform
|
|
366
|
+
* r = dot(a, b).
|
|
367
|
+
*
|
|
368
|
+
* Parameters:
|
|
369
|
+
*
|
|
370
|
+
* a - the first vector operand
|
|
371
|
+
* b - the second vector operand
|
|
372
|
+
*
|
|
373
|
+
* Returns:
|
|
374
|
+
*
|
|
375
|
+
* The dot product of a and b.
|
|
376
|
+
*/
|
|
377
|
+
V3.dot = function V3_dot(a, b) {
|
|
378
|
+
//MathUtils_assert(a.length == 3, "a.length == 3");
|
|
379
|
+
//MathUtils_assert(b.length == 3, "b.length == 3");
|
|
380
|
+
|
|
381
|
+
return a[0] * b[0] +
|
|
382
|
+
a[1] * b[1] +
|
|
383
|
+
a[2] * b[2];
|
|
384
|
+
};
|
|
385
|
+
|
|
386
|
+
/*
|
|
387
|
+
* Function: V3.cross
|
|
388
|
+
*
|
|
389
|
+
* Perform r = a x b.
|
|
390
|
+
*
|
|
391
|
+
* Parameters:
|
|
392
|
+
*
|
|
393
|
+
* a - the first vector operand
|
|
394
|
+
* b - the second vector operand
|
|
395
|
+
* r - optional vector to store the result in
|
|
396
|
+
*
|
|
397
|
+
* Returns:
|
|
398
|
+
*
|
|
399
|
+
* If r is specified, returns r after performing the operation.
|
|
400
|
+
* Otherwise, returns a new 3-element vector with the result.
|
|
401
|
+
*/
|
|
402
|
+
V3.cross = function V3_cross(a, b, r) {
|
|
403
|
+
//MathUtils_assert(a.length == 3, "a.length == 3");
|
|
404
|
+
//MathUtils_assert(b.length == 3, "b.length == 3");
|
|
405
|
+
//MathUtils_assert(r == undefined || r.length == 3, "r == undefined || r.length == 3");
|
|
406
|
+
|
|
407
|
+
if (r == undefined)
|
|
408
|
+
r = new MJS_FLOAT_ARRAY_TYPE(3);
|
|
409
|
+
r[0] = a[1]*b[2] - a[2]*b[1];
|
|
410
|
+
r[1] = a[2]*b[0] - a[0]*b[2];
|
|
411
|
+
r[2] = a[0]*b[1] - a[1]*b[0];
|
|
412
|
+
return r;
|
|
413
|
+
};
|
|
414
|
+
|
|
415
|
+
/*
|
|
416
|
+
* Class: M4x4
|
|
417
|
+
*
|
|
418
|
+
* Methods for working with 4x4 matrices. A matrix is represented by a 16-element array
|
|
419
|
+
* in column-major order. Any valid JavaScript array type may be used, but if new
|
|
420
|
+
* matrices are created they are created using the configured MJS_FLOAT_ARRAY_TYPE.
|
|
421
|
+
*/
|
|
422
|
+
|
|
423
|
+
var M4x4 = { };
|
|
424
|
+
|
|
425
|
+
M4x4._temp1 = new MJS_FLOAT_ARRAY_TYPE(16);
|
|
426
|
+
M4x4._temp2 = new MJS_FLOAT_ARRAY_TYPE(16);
|
|
427
|
+
|
|
428
|
+
if (MJS_FLOAT_ARRAY_TYPE == Array) {
|
|
429
|
+
M4x4.I = [1.0, 0.0, 0.0, 0.0,
|
|
430
|
+
0.0, 1.0, 0.0, 0.0,
|
|
431
|
+
0.0, 0.0, 1.0, 0.0,
|
|
432
|
+
0.0, 0.0, 0.0, 1.0];
|
|
433
|
+
|
|
434
|
+
M4x4.$ = function M4x4_$(m00, m01, m02, m03,
|
|
435
|
+
m04, m05, m06, m07,
|
|
436
|
+
m08, m09, m10, m11,
|
|
437
|
+
m12, m13, m14, m15)
|
|
438
|
+
{
|
|
439
|
+
return [m00, m01, m02, m03,
|
|
440
|
+
m04, m05, m06, m07,
|
|
441
|
+
m08, m09, m10, m11,
|
|
442
|
+
m12, m13, m14, m15];
|
|
443
|
+
};
|
|
444
|
+
|
|
445
|
+
M4x4.clone = function M4x4_clone(m) {
|
|
446
|
+
//MathUtils_assert(m.length == 16, "m.length == 16");
|
|
447
|
+
return new [m[0], m[1], m[2], m[3],
|
|
448
|
+
m[4], m[5], m[6], m[7],
|
|
449
|
+
m[8], m[9], m[10], m[11]];
|
|
450
|
+
};
|
|
451
|
+
} else {
|
|
452
|
+
M4x4.I = new MJS_FLOAT_ARRAY_TYPE([1.0, 0.0, 0.0, 0.0,
|
|
453
|
+
0.0, 1.0, 0.0, 0.0,
|
|
454
|
+
0.0, 0.0, 1.0, 0.0,
|
|
455
|
+
0.0, 0.0, 0.0, 1.0]);
|
|
456
|
+
|
|
457
|
+
/*
|
|
458
|
+
* Function: M4x4.$
|
|
459
|
+
*
|
|
460
|
+
* Creates a new 4x4 matrix with the given values.
|
|
461
|
+
*
|
|
462
|
+
* Parameters:
|
|
463
|
+
*
|
|
464
|
+
* m00..m15 - the 16 elements of the new matrix.
|
|
465
|
+
*
|
|
466
|
+
* Returns:
|
|
467
|
+
*
|
|
468
|
+
* A new matrix filled with the given argument values.
|
|
469
|
+
*/
|
|
470
|
+
M4x4.$ = function M4x4_$(m00, m01, m02, m03,
|
|
471
|
+
m04, m05, m06, m07,
|
|
472
|
+
m08, m09, m10, m11,
|
|
473
|
+
m12, m13, m14, m15)
|
|
474
|
+
{
|
|
475
|
+
return new MJS_FLOAT_ARRAY_TYPE([m00, m01, m02, m03,
|
|
476
|
+
m04, m05, m06, m07,
|
|
477
|
+
m08, m09, m10, m11,
|
|
478
|
+
m12, m13, m14, m15]);
|
|
479
|
+
};
|
|
480
|
+
|
|
481
|
+
/*
|
|
482
|
+
* Function: M4x4.clone
|
|
483
|
+
*
|
|
484
|
+
* Clone the given 4x4 matrix.
|
|
485
|
+
*
|
|
486
|
+
* Parameters:
|
|
487
|
+
*
|
|
488
|
+
* m - the 4x4 matrix to clone
|
|
489
|
+
*
|
|
490
|
+
* Returns:
|
|
491
|
+
*
|
|
492
|
+
* A new matrix with the same values as the passed-in one.
|
|
493
|
+
*/
|
|
494
|
+
M4x4.clone = function M4x4_clone(m) {
|
|
495
|
+
//MathUtils_assert(m.length == 16, "m.length == 16");
|
|
496
|
+
return new MJS_FLOAT_ARRAY_TYPE(m);
|
|
497
|
+
};
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
M4x4.identity = M4x4.I;
|
|
501
|
+
|
|
502
|
+
/*
|
|
503
|
+
* Function: M4x4.topLeft3x3
|
|
504
|
+
*
|
|
505
|
+
* Return the top left 3x3 matrix from the given 4x4 matrix m.
|
|
506
|
+
*
|
|
507
|
+
* Parameters:
|
|
508
|
+
*
|
|
509
|
+
* m - the matrix
|
|
510
|
+
* r - optional 3x3 matrix to store the result in
|
|
511
|
+
*
|
|
512
|
+
* Returns:
|
|
513
|
+
*
|
|
514
|
+
* If r is specified, returns r after performing the operation.
|
|
515
|
+
* Otherwise, returns a new 3x3 matrix with the result.
|
|
516
|
+
*/
|
|
517
|
+
M4x4.topLeft3x3 = function M4x4_topLeft3x3(m, r) {
|
|
518
|
+
//MathUtils_assert(m.length == 16, "m.length == 16");
|
|
519
|
+
//MathUtils_assert(r == undefined || r.length == 9, "r == undefined || r.length == 9");
|
|
520
|
+
|
|
521
|
+
if (r == undefined)
|
|
522
|
+
r = new MJS_FLOAT_ARRAY_TYPE(9);
|
|
523
|
+
r[0] = m[0]; r[1] = m[1]; r[2] = m[2];
|
|
524
|
+
r[3] = m[4]; r[4] = m[5]; r[5] = m[6];
|
|
525
|
+
r[6] = m[8]; r[7] = m[9]; r[8] = m[10];
|
|
526
|
+
return r;
|
|
527
|
+
};
|
|
528
|
+
|
|
529
|
+
/*
|
|
530
|
+
* Function: M4x4.inverseOrthonormal
|
|
531
|
+
*
|
|
532
|
+
* Computes the inverse of the given matrix m, assuming that
|
|
533
|
+
* the matrix is orthonormal.
|
|
534
|
+
*
|
|
535
|
+
* Parameters:
|
|
536
|
+
*
|
|
537
|
+
* m - the matrix
|
|
538
|
+
* r - optional 4x4 matrix to store the result in
|
|
539
|
+
*
|
|
540
|
+
* Returns:
|
|
541
|
+
*
|
|
542
|
+
* If r is specified, returns r after performing the operation.
|
|
543
|
+
* Otherwise, returns a new 4x4 matrix with the result.
|
|
544
|
+
*/
|
|
545
|
+
M4x4.inverseOrthonormal = function M4x4_inverseOrthonormal(m, r) {
|
|
546
|
+
//MathUtils_assert(m.length == 16, "m.length == 16");
|
|
547
|
+
//MathUtils_assert(r == undefined || r.length == 16, "r == undefined || r.length == 16");
|
|
548
|
+
//MathUtils_assert(m != r, "m != r");
|
|
549
|
+
|
|
550
|
+
if (r == undefined)
|
|
551
|
+
r = new MJS_FLOAT_ARRAY_TYPE(16);
|
|
552
|
+
M4x4.transpose(m, r);
|
|
553
|
+
var t = [m[12], m[13], m[14]];
|
|
554
|
+
r[3] = r[7] = r[11] = 0;
|
|
555
|
+
r[12] = -V3.dot([r[0], r[4], r[8]], t);
|
|
556
|
+
r[13] = -V3.dot([r[1], r[5], r[9]], t);
|
|
557
|
+
r[14] = -V3.dot([r[2], r[6], r[10]], t);
|
|
558
|
+
return r;
|
|
559
|
+
}
|
|
560
|
+
|
|
561
|
+
/*
|
|
562
|
+
* Function: M4x4.inverseTo3x3
|
|
563
|
+
*
|
|
564
|
+
* Computes the inverse of the given matrix m, but calculates
|
|
565
|
+
* only the top left 3x3 values of the result.
|
|
566
|
+
*
|
|
567
|
+
* Parameters:
|
|
568
|
+
*
|
|
569
|
+
* m - the matrix
|
|
570
|
+
* r - optional 3x3 matrix to store the result in
|
|
571
|
+
*
|
|
572
|
+
* Returns:
|
|
573
|
+
*
|
|
574
|
+
* If r is specified, returns r after performing the operation.
|
|
575
|
+
* Otherwise, returns a new 3x3 matrix with the result.
|
|
576
|
+
*/
|
|
577
|
+
M4x4.inverseTo3x3 = function M4x4_inverseTo3x3(m, r) {
|
|
578
|
+
//MathUtils_assert(m.length == 16, "m.length == 16");
|
|
579
|
+
//MathUtils_assert(r == undefined || r.length == 9, "r == undefined || r.length == 9");
|
|
580
|
+
|
|
581
|
+
if (r == undefined)
|
|
582
|
+
r = new MJS_FLOAT_ARRAY_TYPE(9);
|
|
583
|
+
|
|
584
|
+
var a11 = m[10]*m[5]-m[6]*m[9],
|
|
585
|
+
a21 = -m[10]*m[1]+m[2]*m[9],
|
|
586
|
+
a31 = m[6]*m[1]-m[2]*m[5],
|
|
587
|
+
a12 = -m[10]*m[4]+m[6]*m[8],
|
|
588
|
+
a22 = m[10]*m[0]-m[2]*m[8],
|
|
589
|
+
a32 = -m[6]*m[0]+m[2]*m[4],
|
|
590
|
+
a13 = m[9]*m[4]-m[5]*m[8],
|
|
591
|
+
a23 = -m[9]*m[0]+m[1]*m[8],
|
|
592
|
+
a33 = m[5]*m[0]-m[1]*m[4];
|
|
593
|
+
var det = m[0]*(a11) + m[1]*(a12) + m[2]*(a13);
|
|
594
|
+
if (det == 0) // no inverse
|
|
595
|
+
throw "matrix not invertible";
|
|
596
|
+
var idet = 1.0 / det;
|
|
597
|
+
|
|
598
|
+
r[0] = idet*a11;
|
|
599
|
+
r[1] = idet*a21;
|
|
600
|
+
r[2] = idet*a31;
|
|
601
|
+
r[3] = idet*a12;
|
|
602
|
+
r[4] = idet*a22;
|
|
603
|
+
r[5] = idet*a32;
|
|
604
|
+
r[6] = idet*a13;
|
|
605
|
+
r[7] = idet*a23;
|
|
606
|
+
r[8] = idet*a33;
|
|
607
|
+
|
|
608
|
+
return r;
|
|
609
|
+
};
|
|
610
|
+
|
|
611
|
+
/*
|
|
612
|
+
* Function: M4x4.makeFrustum
|
|
613
|
+
*
|
|
614
|
+
* Creates a matrix for a projection frustum with the given parameters.
|
|
615
|
+
*
|
|
616
|
+
* Parameters:
|
|
617
|
+
*
|
|
618
|
+
* left - the left coordinate of the frustum
|
|
619
|
+
* right- the right coordinate of the frustum
|
|
620
|
+
* bottom - the bottom coordinate of the frustum
|
|
621
|
+
* top - the top coordinate of the frustum
|
|
622
|
+
* znear - the near z distance of the frustum
|
|
623
|
+
* zfar - the far z distance of the frustum
|
|
624
|
+
* r - optional 4x4 matrix to store the result in
|
|
625
|
+
*
|
|
626
|
+
* Returns:
|
|
627
|
+
*
|
|
628
|
+
* If r is specified, returns r after creating the projection matrix.
|
|
629
|
+
* Otherwise, returns a new 4x4 matrix.
|
|
630
|
+
*/
|
|
631
|
+
M4x4.makeFrustum = function M4x4_makeFrustum(left, right, bottom, top, znear, zfar, r) {
|
|
632
|
+
//MathUtils_assert(r == undefined || r.length == 16, "r == undefined || r.length == 16");
|
|
633
|
+
|
|
634
|
+
if (r == undefined)
|
|
635
|
+
r = new MJS_FLOAT_ARRAY_TYPE(16);
|
|
636
|
+
|
|
637
|
+
var X = 2*znear/(right-left);
|
|
638
|
+
var Y = 2*znear/(top-bottom);
|
|
639
|
+
var A = (right+left)/(right-left);
|
|
640
|
+
var B = (top+bottom)/(top-bottom);
|
|
641
|
+
var C = -(zfar+znear)/(zfar-znear);
|
|
642
|
+
var D = -2*zfar*znear/(zfar-znear);
|
|
643
|
+
|
|
644
|
+
r[0] = 2*znear/(right-left);
|
|
645
|
+
r[1] = 0;
|
|
646
|
+
r[2] = 0;
|
|
647
|
+
r[3] = 0;
|
|
648
|
+
r[4] = 0;
|
|
649
|
+
r[5] = 2*znear/(top-bottom);
|
|
650
|
+
r[6] = 0;
|
|
651
|
+
r[7] = 0;
|
|
652
|
+
r[8] = (right+left)/(right-left);
|
|
653
|
+
r[9] = (top+bottom)/(top-bottom);
|
|
654
|
+
r[10] = -(zfar+znear)/(zfar-znear);
|
|
655
|
+
r[11] = -1;
|
|
656
|
+
r[12] = 0;
|
|
657
|
+
r[13] = 0;
|
|
658
|
+
r[14] = -2*zfar*znear/(zfar-znear);
|
|
659
|
+
r[15] = 0;
|
|
660
|
+
|
|
661
|
+
return r;
|
|
662
|
+
};
|
|
663
|
+
|
|
664
|
+
/*
|
|
665
|
+
* Function: M4x4.makePerspective
|
|
666
|
+
*
|
|
667
|
+
* Creates a matrix for a perspective projection with the given parameters.
|
|
668
|
+
*
|
|
669
|
+
* Parameters:
|
|
670
|
+
*
|
|
671
|
+
* fovy - field of view in the y axis, in degrees
|
|
672
|
+
* aspect - aspect ratio
|
|
673
|
+
* znear - the near z distance of the projection
|
|
674
|
+
* zfar - the far z distance of the projection
|
|
675
|
+
* r - optional 4x4 matrix to store the result in
|
|
676
|
+
*
|
|
677
|
+
* Returns:
|
|
678
|
+
*
|
|
679
|
+
* If r is specified, returns r after creating the projection matrix.
|
|
680
|
+
* Otherwise, returns a new 4x4 matrix.
|
|
681
|
+
*/
|
|
682
|
+
M4x4.makePerspective = function M4x4_makePerspective (fovy, aspect, znear, zfar, r) {
|
|
683
|
+
//MathUtils_assert(r == undefined || r.length == 16, "r == undefined || r.length == 16");
|
|
684
|
+
|
|
685
|
+
var ymax = znear * Math.tan(fovy * Math.PI / 360.0);
|
|
686
|
+
var ymin = -ymax;
|
|
687
|
+
var xmin = ymin * aspect;
|
|
688
|
+
var xmax = ymax * aspect;
|
|
689
|
+
|
|
690
|
+
return M4x4.makeFrustum(xmin, xmax, ymin, ymax, znear, zfar, r);
|
|
691
|
+
};
|
|
692
|
+
|
|
693
|
+
/*
|
|
694
|
+
* Function: M4x4.makeOrtho
|
|
695
|
+
*
|
|
696
|
+
* Creates a matrix for an orthogonal frustum projection with the given parameters.
|
|
697
|
+
*
|
|
698
|
+
* Parameters:
|
|
699
|
+
*
|
|
700
|
+
* left - the left coordinate of the frustum
|
|
701
|
+
* right- the right coordinate of the frustum
|
|
702
|
+
* bottom - the bottom coordinate of the frustum
|
|
703
|
+
* top - the top coordinate of the frustum
|
|
704
|
+
* znear - the near z distance of the frustum
|
|
705
|
+
* zfar - the far z distance of the frustum
|
|
706
|
+
* r - optional 4x4 matrix to store the result in
|
|
707
|
+
*
|
|
708
|
+
* Returns:
|
|
709
|
+
*
|
|
710
|
+
* If r is specified, returns r after creating the projection matrix.
|
|
711
|
+
* Otherwise, returns a new 4x4 matrix.
|
|
712
|
+
*/
|
|
713
|
+
M4x4.makeOrtho = function M4x4_makeOrtho (left, right, bottom, top, znear, zfar, r) {
|
|
714
|
+
//MathUtils_assert(r == undefined || r.length == 16, "r == undefined || r.length == 16");
|
|
715
|
+
|
|
716
|
+
if (r == undefined)
|
|
717
|
+
r = new MJS_FLOAT_ARRAY_TYPE(16);
|
|
718
|
+
|
|
719
|
+
var tX = -(right+left)/(right-left);
|
|
720
|
+
var tY = -(top+bottom)/(top-bottom);
|
|
721
|
+
var tZ = -(zfar+znear)/(zfar-znear);
|
|
722
|
+
var X = 2 / (right-left);
|
|
723
|
+
var Y = 2 / (top-bottom);
|
|
724
|
+
var Z = -2 / (zfar-znear);
|
|
725
|
+
|
|
726
|
+
r[0] = 2 / (right-left);
|
|
727
|
+
r[1] = 0;
|
|
728
|
+
r[2] = 0;
|
|
729
|
+
r[3] = 0;
|
|
730
|
+
r[4] = 0;
|
|
731
|
+
r[5] = 2 / (top-bottom);
|
|
732
|
+
r[6] = 0;
|
|
733
|
+
r[7] = 0;
|
|
734
|
+
r[8] = 0;
|
|
735
|
+
r[9] = 0;
|
|
736
|
+
r[10] = -2 / (zfar-znear);
|
|
737
|
+
r[11] = 0;
|
|
738
|
+
r[12] = -(right+left)/(right-left);
|
|
739
|
+
r[13] = -(top+bottom)/(top-bottom);
|
|
740
|
+
r[14] = -(zfar+znear)/(zfar-znear);
|
|
741
|
+
r[15] = 0;
|
|
742
|
+
|
|
743
|
+
return r;
|
|
744
|
+
};
|
|
745
|
+
|
|
746
|
+
/*
|
|
747
|
+
* Function: M4x4.makeOrtho
|
|
748
|
+
*
|
|
749
|
+
* Creates a matrix for a 2D orthogonal frustum projection with the given parameters.
|
|
750
|
+
* znear and zfar are assumed to be -1 and 1, respectively.
|
|
751
|
+
*
|
|
752
|
+
* Parameters:
|
|
753
|
+
*
|
|
754
|
+
* left - the left coordinate of the frustum
|
|
755
|
+
* right- the right coordinate of the frustum
|
|
756
|
+
* bottom - the bottom coordinate of the frustum
|
|
757
|
+
* top - the top coordinate of the frustum
|
|
758
|
+
* r - optional 4x4 matrix to store the result in
|
|
759
|
+
*
|
|
760
|
+
* Returns:
|
|
761
|
+
*
|
|
762
|
+
* If r is specified, returns r after creating the projection matrix.
|
|
763
|
+
* Otherwise, returns a new 4x4 matrix.
|
|
764
|
+
*/
|
|
765
|
+
M4x4.makeOrtho2D = function M4x4_makeOrtho2D (left, right, bottom, top, r) {
|
|
766
|
+
//MathUtils_assert(r == undefined || r.length == 16, "r == undefined || r.length == 16");
|
|
767
|
+
|
|
768
|
+
return M4x4.makeOrtho(left, right, bottom, top, -1, 1, r);
|
|
769
|
+
};
|
|
770
|
+
|
|
771
|
+
/*
|
|
772
|
+
* Function: M4x4.mul
|
|
773
|
+
*
|
|
774
|
+
* Performs r = a * b.
|
|
775
|
+
*
|
|
776
|
+
* Parameters:
|
|
777
|
+
*
|
|
778
|
+
* a - the first matrix operand
|
|
779
|
+
* b - the second matrix operand
|
|
780
|
+
* r - optional 4x4 matrix to store the result in
|
|
781
|
+
*
|
|
782
|
+
* Returns:
|
|
783
|
+
*
|
|
784
|
+
* If r is specified, returns r after performing the operation.
|
|
785
|
+
* Otherwise, returns a new 4x4 matrix with the result.
|
|
786
|
+
*/
|
|
787
|
+
M4x4.mul = function M4x4_mul(a, b, r) {
|
|
788
|
+
//MathUtils_assert(a.length == 16, "a.length == 16");
|
|
789
|
+
//MathUtils_assert(b.length == 16, "b.length == 16");
|
|
790
|
+
//MathUtils_assert(r == undefined || r.length == 16, "r == undefined || r.length == 16");
|
|
791
|
+
//MathUtils_assert(a != r && b != r, "a != r && b != r");
|
|
792
|
+
|
|
793
|
+
if (r == undefined)
|
|
794
|
+
r = new MJS_FLOAT_ARRAY_TYPE(16);
|
|
795
|
+
|
|
796
|
+
r[0] =
|
|
797
|
+
b[0] * a[0] +
|
|
798
|
+
b[0+1] * a[4] +
|
|
799
|
+
b[0+2] * a[8] +
|
|
800
|
+
b[0+3] * a[12];
|
|
801
|
+
r[0+1] =
|
|
802
|
+
b[0] * a[1] +
|
|
803
|
+
b[0+1] * a[5] +
|
|
804
|
+
b[0+2] * a[9] +
|
|
805
|
+
b[0+3] * a[13];
|
|
806
|
+
r[0+2] =
|
|
807
|
+
b[0] * a[2] +
|
|
808
|
+
b[0+1] * a[6] +
|
|
809
|
+
b[0+2] * a[10] +
|
|
810
|
+
b[0+3] * a[14];
|
|
811
|
+
r[0+3] =
|
|
812
|
+
b[0] * a[3] +
|
|
813
|
+
b[0+1] * a[7] +
|
|
814
|
+
b[0+2] * a[11] +
|
|
815
|
+
b[0+3] * a[15];
|
|
816
|
+
r[4] =
|
|
817
|
+
b[4] * a[0] +
|
|
818
|
+
b[4+1] * a[4] +
|
|
819
|
+
b[4+2] * a[8] +
|
|
820
|
+
b[4+3] * a[12];
|
|
821
|
+
r[4+1] =
|
|
822
|
+
b[4] * a[1] +
|
|
823
|
+
b[4+1] * a[5] +
|
|
824
|
+
b[4+2] * a[9] +
|
|
825
|
+
b[4+3] * a[13];
|
|
826
|
+
r[4+2] =
|
|
827
|
+
b[4] * a[2] +
|
|
828
|
+
b[4+1] * a[6] +
|
|
829
|
+
b[4+2] * a[10] +
|
|
830
|
+
b[4+3] * a[14];
|
|
831
|
+
r[4+3] =
|
|
832
|
+
b[4] * a[3] +
|
|
833
|
+
b[4+1] * a[7] +
|
|
834
|
+
b[4+2] * a[11] +
|
|
835
|
+
b[4+3] * a[15];
|
|
836
|
+
r[8] =
|
|
837
|
+
b[8] * a[0] +
|
|
838
|
+
b[8+1] * a[4] +
|
|
839
|
+
b[8+2] * a[8] +
|
|
840
|
+
b[8+3] * a[12];
|
|
841
|
+
r[8+1] =
|
|
842
|
+
b[8] * a[1] +
|
|
843
|
+
b[8+1] * a[5] +
|
|
844
|
+
b[8+2] * a[9] +
|
|
845
|
+
b[8+3] * a[13];
|
|
846
|
+
r[8+2] =
|
|
847
|
+
b[8] * a[2] +
|
|
848
|
+
b[8+1] * a[6] +
|
|
849
|
+
b[8+2] * a[10] +
|
|
850
|
+
b[8+3] * a[14];
|
|
851
|
+
r[8+3] =
|
|
852
|
+
b[8] * a[3] +
|
|
853
|
+
b[8+1] * a[7] +
|
|
854
|
+
b[8+2] * a[11] +
|
|
855
|
+
b[8+3] * a[15];
|
|
856
|
+
r[12] =
|
|
857
|
+
b[12] * a[0] +
|
|
858
|
+
b[12+1] * a[4] +
|
|
859
|
+
b[12+2] * a[8] +
|
|
860
|
+
b[12+3] * a[12];
|
|
861
|
+
r[12+1] =
|
|
862
|
+
b[12] * a[1] +
|
|
863
|
+
b[12+1] * a[5] +
|
|
864
|
+
b[12+2] * a[9] +
|
|
865
|
+
b[12+3] * a[13];
|
|
866
|
+
r[12+2] =
|
|
867
|
+
b[12] * a[2] +
|
|
868
|
+
b[12+1] * a[6] +
|
|
869
|
+
b[12+2] * a[10] +
|
|
870
|
+
b[12+3] * a[14];
|
|
871
|
+
r[12+3] =
|
|
872
|
+
b[12] * a[3] +
|
|
873
|
+
b[12+1] * a[7] +
|
|
874
|
+
b[12+2] * a[11] +
|
|
875
|
+
b[12+3] * a[15];
|
|
876
|
+
return r;
|
|
877
|
+
};
|
|
878
|
+
|
|
879
|
+
/*
|
|
880
|
+
* Function: M4x4.makeRotate
|
|
881
|
+
*
|
|
882
|
+
* Creates a transformation matrix for rotation by angle radians about the 3-element vector axis.
|
|
883
|
+
*
|
|
884
|
+
* Parameters:
|
|
885
|
+
*
|
|
886
|
+
* angle - the angle of rotation, in radians
|
|
887
|
+
* axis - the axis around which the rotation is performed, a 3-element vector
|
|
888
|
+
* r - optional 4x4 matrix to store the result in
|
|
889
|
+
*
|
|
890
|
+
* Returns:
|
|
891
|
+
*
|
|
892
|
+
* If r is specified, returns r after creating the matrix.
|
|
893
|
+
* Otherwise, returns a new 4x4 matrix with the result.
|
|
894
|
+
*/
|
|
895
|
+
M4x4.makeRotate = function M4x4_makeRotate(angle, axis, r) {
|
|
896
|
+
//MathUtils_assert(angle.length == 3, "angle.length == 3");
|
|
897
|
+
//MathUtils_assert(axis.length == 3, "axis.length == 3");
|
|
898
|
+
//MathUtils_assert(r == undefined || r.length == 16, "r == undefined || r.length == 16");
|
|
899
|
+
|
|
900
|
+
if (r == undefined)
|
|
901
|
+
r = new MJS_FLOAT_ARRAY_TYPE(16);
|
|
902
|
+
|
|
903
|
+
axis = V3.normalize(axis, V3._temp1);
|
|
904
|
+
var x = axis[0], y = axis[1], z = axis[2];
|
|
905
|
+
var c = Math.cos(angle);
|
|
906
|
+
var c1 = 1-c;
|
|
907
|
+
var s = Math.sin(angle);
|
|
908
|
+
|
|
909
|
+
r[0] = x*x*c1+c;
|
|
910
|
+
r[1] = y*x*c1+z*s;
|
|
911
|
+
r[2] = z*x*c1-y*s;
|
|
912
|
+
r[3] = 0;
|
|
913
|
+
r[4] = x*y*c1-z*s;
|
|
914
|
+
r[5] = y*y*c1+c;
|
|
915
|
+
r[6] = y*z*c1+x*s;
|
|
916
|
+
r[7] = 0;
|
|
917
|
+
r[8] = x*z*c1+y*s;
|
|
918
|
+
r[9] = y*z*c1-x*s;
|
|
919
|
+
r[10] = z*z*c1+c;
|
|
920
|
+
r[11] = 0;
|
|
921
|
+
r[12] = 0;
|
|
922
|
+
r[13] = 0;
|
|
923
|
+
r[14] = 0;
|
|
924
|
+
r[15] = 1;
|
|
925
|
+
|
|
926
|
+
return r;
|
|
927
|
+
};
|
|
928
|
+
|
|
929
|
+
/*
|
|
930
|
+
* Function: M4x4.rotate
|
|
931
|
+
*
|
|
932
|
+
* Concatenates a rotation of angle radians about the axis to the give matrix m.
|
|
933
|
+
*
|
|
934
|
+
* Parameters:
|
|
935
|
+
*
|
|
936
|
+
* angle - the angle of rotation, in radians
|
|
937
|
+
* axis - the axis around which the rotation is performed, a 3-element vector
|
|
938
|
+
* m - the matrix to concatenate the rotation to
|
|
939
|
+
* r - optional 4x4 matrix to store the result in
|
|
940
|
+
*
|
|
941
|
+
* Returns:
|
|
942
|
+
*
|
|
943
|
+
* If r is specified, returns r after performing the operation.
|
|
944
|
+
* Otherwise, returns a new 4x4 matrix with the result.
|
|
945
|
+
*/
|
|
946
|
+
M4x4.rotate = function M4x4_rotate(angle, axis, m, r) {
|
|
947
|
+
//MathUtils_assert(angle.length == 3, "angle.length == 3");
|
|
948
|
+
//MathUtils_assert(axis.length == 3, "axis.length == 3");
|
|
949
|
+
//MathUtils_assert(m.length == 16, "m.length == 16");
|
|
950
|
+
//MathUtils_assert(r == undefined || r.length == 16, "r == undefined || r.length == 16");
|
|
951
|
+
|
|
952
|
+
M4x4.makeRotate(angle, axis, M4x4._temp1);
|
|
953
|
+
return M4x4.mul(m, M4x4._temp1, r);
|
|
954
|
+
};
|
|
955
|
+
|
|
956
|
+
/*
|
|
957
|
+
* Function: M4x4.makeScale3
|
|
958
|
+
*
|
|
959
|
+
* Creates a transformation matrix for scaling by 3 scalar values, one for
|
|
960
|
+
* each of the x, y, and z directions.
|
|
961
|
+
*
|
|
962
|
+
* Parameters:
|
|
963
|
+
*
|
|
964
|
+
* x - the scale for the x axis
|
|
965
|
+
* y - the scale for the y axis
|
|
966
|
+
* z - the scale for the z axis
|
|
967
|
+
* r - optional 4x4 matrix to store the result in
|
|
968
|
+
*
|
|
969
|
+
* Returns:
|
|
970
|
+
*
|
|
971
|
+
* If r is specified, returns r after creating the matrix.
|
|
972
|
+
* Otherwise, returns a new 4x4 matrix with the result.
|
|
973
|
+
*/
|
|
974
|
+
M4x4.makeScale3 = function M4x4_makeScale3(x, y, z, r) {
|
|
975
|
+
//MathUtils_assert(r == undefined || r.length == 16, "r == undefined || r.length == 16");
|
|
976
|
+
|
|
977
|
+
if (r == undefined)
|
|
978
|
+
r = new MJS_FLOAT_ARRAY_TYPE(16);
|
|
979
|
+
|
|
980
|
+
r[0] = x;
|
|
981
|
+
r[1] = 0;
|
|
982
|
+
r[2] = 0;
|
|
983
|
+
r[3] = 0;
|
|
984
|
+
r[4] = 0;
|
|
985
|
+
r[5] = y;
|
|
986
|
+
r[6] = 0;
|
|
987
|
+
r[7] = 0;
|
|
988
|
+
r[8] = 0;
|
|
989
|
+
r[9] = 0;
|
|
990
|
+
r[10] = z;
|
|
991
|
+
r[11] = 0;
|
|
992
|
+
r[12] = 0;
|
|
993
|
+
r[13] = 0;
|
|
994
|
+
r[14] = 0;
|
|
995
|
+
r[15] = 1;
|
|
996
|
+
|
|
997
|
+
return r;
|
|
998
|
+
};
|
|
999
|
+
|
|
1000
|
+
/*
|
|
1001
|
+
* Function: M4x4.makeScale1
|
|
1002
|
+
*
|
|
1003
|
+
* Creates a transformation matrix for a uniform scale by a single scalar value.
|
|
1004
|
+
*
|
|
1005
|
+
* Parameters:
|
|
1006
|
+
*
|
|
1007
|
+
* k - the scale factor
|
|
1008
|
+
* r - optional 4x4 matrix to store the result in
|
|
1009
|
+
*
|
|
1010
|
+
* Returns:
|
|
1011
|
+
*
|
|
1012
|
+
* If r is specified, returns r after creating the matrix.
|
|
1013
|
+
* Otherwise, returns a new 4x4 matrix with the result.
|
|
1014
|
+
*/
|
|
1015
|
+
M4x4.makeScale1 = function M4x4_makeScale1(k, r) {
|
|
1016
|
+
//MathUtils_assert(r == undefined || r.length == 16, "r == undefined || r.length == 16");
|
|
1017
|
+
|
|
1018
|
+
return M4x4.makeScale3(k, k, k, r);
|
|
1019
|
+
};
|
|
1020
|
+
|
|
1021
|
+
/*
|
|
1022
|
+
* Function: M4x4.makeScale
|
|
1023
|
+
*
|
|
1024
|
+
* Creates a transformation matrix for scaling each of the x, y, and z axes by the amount
|
|
1025
|
+
* given in the corresponding element of the 3-element vector.
|
|
1026
|
+
*
|
|
1027
|
+
* Parameters:
|
|
1028
|
+
*
|
|
1029
|
+
* v - the 3-element vector containing the scale factors
|
|
1030
|
+
* r - optional 4x4 matrix to store the result in
|
|
1031
|
+
*
|
|
1032
|
+
* Returns:
|
|
1033
|
+
*
|
|
1034
|
+
* If r is specified, returns r after creating the matrix.
|
|
1035
|
+
* Otherwise, returns a new 4x4 matrix with the result.
|
|
1036
|
+
*/
|
|
1037
|
+
M4x4.makeScale = function M4x4_makeScale(v, r) {
|
|
1038
|
+
//MathUtils_assert(v.length == 3, "v.length == 3");
|
|
1039
|
+
//MathUtils_assert(r == undefined || r.length == 16, "r == undefined || r.length == 16");
|
|
1040
|
+
|
|
1041
|
+
return M4x4.makeScale3(v[0], v[1], v[2], r);
|
|
1042
|
+
};
|
|
1043
|
+
|
|
1044
|
+
/*
|
|
1045
|
+
* Function: M4x4.scale3
|
|
1046
|
+
*/
|
|
1047
|
+
M4x4.scale3 = function M4x4_scale3(x, y, z, m, r) {
|
|
1048
|
+
//MathUtils_assert(m.length == 16, "m.length == 16");
|
|
1049
|
+
//MathUtils_assert(r == undefined || r.length == 16, "r == undefined || r.length == 16");
|
|
1050
|
+
|
|
1051
|
+
M4x4.makeScale3(x, y, z, M4x4._temp1);
|
|
1052
|
+
return M4x4.mul(m, M4x4._temp1, r);
|
|
1053
|
+
};
|
|
1054
|
+
|
|
1055
|
+
/*
|
|
1056
|
+
* Function: M4x4.scale1
|
|
1057
|
+
*/
|
|
1058
|
+
M4x4.scale1 = function M4x4_scale1(k, m, r) {
|
|
1059
|
+
//MathUtils_assert(m.length == 16, "m.length == 16");
|
|
1060
|
+
//MathUtils_assert(r == undefined || r.length == 16, "r == undefined || r.length == 16");
|
|
1061
|
+
|
|
1062
|
+
M4x4.makeScale3(k, k, k, M4x4._temp1);
|
|
1063
|
+
return M4x4.mul(m, M4x4._temp1, r);
|
|
1064
|
+
};
|
|
1065
|
+
|
|
1066
|
+
/*
|
|
1067
|
+
* Function: M4x4.scale1
|
|
1068
|
+
*/
|
|
1069
|
+
M4x4.scale = function M4x4_scale(v, m, r) {
|
|
1070
|
+
//MathUtils_assert(v.length == 3, "v.length == 3");
|
|
1071
|
+
//MathUtils_assert(m.length == 16, "m.length == 16");
|
|
1072
|
+
//MathUtils_assert(r == undefined || r.length == 16, "r == undefined || r.length == 16");
|
|
1073
|
+
|
|
1074
|
+
M4x4.makeScale3(v[0], v[1], v[2], M4x4._temp1);
|
|
1075
|
+
return M4x4.mul(m, M4x4._temp1, r);
|
|
1076
|
+
};
|
|
1077
|
+
|
|
1078
|
+
/*
|
|
1079
|
+
* Function: M4x4.makeTranslate3
|
|
1080
|
+
*/
|
|
1081
|
+
M4x4.makeTranslate3 = function M4x4_makeTranslate3(x, y, z, r) {
|
|
1082
|
+
//MathUtils_assert(r == undefined || r.length == 16, "r == undefined || r.length == 16");
|
|
1083
|
+
|
|
1084
|
+
if (r == undefined)
|
|
1085
|
+
r = new MJS_FLOAT_ARRAY_TYPE(16);
|
|
1086
|
+
|
|
1087
|
+
r[0] = 1;
|
|
1088
|
+
r[1] = 0;
|
|
1089
|
+
r[2] = 0;
|
|
1090
|
+
r[3] = 0;
|
|
1091
|
+
r[4] = 0;
|
|
1092
|
+
r[5] = 1;
|
|
1093
|
+
r[6] = 0;
|
|
1094
|
+
r[7] = 0;
|
|
1095
|
+
r[8] = 0;
|
|
1096
|
+
r[9] = 0;
|
|
1097
|
+
r[10] = 1;
|
|
1098
|
+
r[11] = 0;
|
|
1099
|
+
r[12] = x;
|
|
1100
|
+
r[13] = y;
|
|
1101
|
+
r[14] = z;
|
|
1102
|
+
r[15] = 1;
|
|
1103
|
+
|
|
1104
|
+
return r;
|
|
1105
|
+
};
|
|
1106
|
+
|
|
1107
|
+
/*
|
|
1108
|
+
* Function: M4x4.makeTranslate1
|
|
1109
|
+
*/
|
|
1110
|
+
M4x4.makeTranslate1 = function M4x4_makeTranslate1 (k, r) {
|
|
1111
|
+
//MathUtils_assert(r == undefined || r.length == 16, "r == undefined || r.length == 16");
|
|
1112
|
+
|
|
1113
|
+
return M4x4.makeTranslate3(k, k, k, r);
|
|
1114
|
+
};
|
|
1115
|
+
|
|
1116
|
+
/*
|
|
1117
|
+
* Function: M4x4.makeTranslate
|
|
1118
|
+
*/
|
|
1119
|
+
M4x4.makeTranslate = function M4x4_makeTranslate (v, r) {
|
|
1120
|
+
//MathUtils_assert(v.length == 3, "v.length == 3");
|
|
1121
|
+
//MathUtils_assert(r == undefined || r.length == 16, "r == undefined || r.length == 16");
|
|
1122
|
+
|
|
1123
|
+
return M4x4.makeTranslate3(v[0], v[1], v[2], r);
|
|
1124
|
+
};
|
|
1125
|
+
|
|
1126
|
+
/*
|
|
1127
|
+
* Function: M4x4.translate3
|
|
1128
|
+
*/
|
|
1129
|
+
M4x4.translate3 = function M4x4_translate3 (x, y, z, m, r) {
|
|
1130
|
+
//MathUtils_assert(m.length == 16, "m.length == 16");
|
|
1131
|
+
//MathUtils_assert(r == undefined || r.length == 16, "r == undefined || r.length == 16");
|
|
1132
|
+
|
|
1133
|
+
M4x4.makeTranslate3(x, y, z, M4x4._temp1);
|
|
1134
|
+
return M4x4.mul(m, M4x4._temp1, r);
|
|
1135
|
+
};
|
|
1136
|
+
|
|
1137
|
+
/*
|
|
1138
|
+
* Function: M4x4.translate1
|
|
1139
|
+
*/
|
|
1140
|
+
M4x4.translate1 = function M4x4_translate1 (k, m, r) {
|
|
1141
|
+
//MathUtils_assert(m.length == 16, "m.length == 16");
|
|
1142
|
+
//MathUtils_assert(r == undefined || r.length == 16, "r == undefined || r.length == 16");
|
|
1143
|
+
|
|
1144
|
+
M4x4.makeTranslate3(k, k, k, M4x4._temp1);
|
|
1145
|
+
return M4x4.mul(m, M4x4._temp1, r);
|
|
1146
|
+
};
|
|
1147
|
+
|
|
1148
|
+
/*
|
|
1149
|
+
* Function: M4x4.translate
|
|
1150
|
+
*/
|
|
1151
|
+
M4x4.translate = function M4x4_translate (v, m, r) {
|
|
1152
|
+
//MathUtils_assert(v.length == 3, "v.length == 3");
|
|
1153
|
+
//MathUtils_assert(m.length == 16, "m.length == 16");
|
|
1154
|
+
//MathUtils_assert(r == undefined || r.length == 16, "r == undefined || r.length == 16");
|
|
1155
|
+
|
|
1156
|
+
M4x4.makeTranslate3(v[0], v[1], v[2], M4x4._temp1);
|
|
1157
|
+
return M4x4.mul(m, M4x4._temp1, r);
|
|
1158
|
+
};
|
|
1159
|
+
|
|
1160
|
+
/*
|
|
1161
|
+
* Function: M4x4.makeLookAt
|
|
1162
|
+
*/
|
|
1163
|
+
M4x4.makeLookAt = function M4x4_makeLookAt (eye, center, up, r) {
|
|
1164
|
+
//MathUtils_assert(eye.length == 3, "eye.length == 3");
|
|
1165
|
+
//MathUtils_assert(center.length == 3, "center.length == 3");
|
|
1166
|
+
//MathUtils_assert(up.length == 3, "up.length == 3");
|
|
1167
|
+
//MathUtils_assert(r == undefined || r.length == 16, "r == undefined || r.length == 16");
|
|
1168
|
+
|
|
1169
|
+
var z = V3.direction(eye, center, V3._temp1);
|
|
1170
|
+
var x = V3.normalize(V3.cross(up, z, V3._temp2), V3._temp2);
|
|
1171
|
+
var y = V3.normalize(V3.cross(z, x, V3._temp3), V3._temp3);
|
|
1172
|
+
|
|
1173
|
+
var tm1 = M4x4._temp1;
|
|
1174
|
+
var tm2 = M4x4._temp2;
|
|
1175
|
+
|
|
1176
|
+
tm1[0] = x[0];
|
|
1177
|
+
tm1[1] = y[0];
|
|
1178
|
+
tm1[2] = z[0];
|
|
1179
|
+
tm1[3] = 0;
|
|
1180
|
+
tm1[4] = x[1];
|
|
1181
|
+
tm1[5] = y[1];
|
|
1182
|
+
tm1[6] = z[1];
|
|
1183
|
+
tm1[7] = 0;
|
|
1184
|
+
tm1[8] = x[2];
|
|
1185
|
+
tm1[9] = y[2];
|
|
1186
|
+
tm1[10] = z[2];
|
|
1187
|
+
tm1[11] = 0;
|
|
1188
|
+
tm1[12] = 0;
|
|
1189
|
+
tm1[13] = 0;
|
|
1190
|
+
tm1[14] = 0;
|
|
1191
|
+
tm1[15] = 1;
|
|
1192
|
+
|
|
1193
|
+
tm2[0] = 1; tm2[1] = 0; tm2[2] = 0; tm2[3] = 0;
|
|
1194
|
+
tm2[4] = 0; tm2[5] = 1; tm2[6] = 0; tm2[7] = 0;
|
|
1195
|
+
tm2[8] = 0; tm2[9] = 0; tm2[10] = 1; tm2[3] = 0;
|
|
1196
|
+
tm2[0] = -eye[0]; tm2[1] = -eye[1]; tm2[2] = -eye[2]; tm2[3] = 0;
|
|
1197
|
+
|
|
1198
|
+
if (r == undefined)
|
|
1199
|
+
r = new MJS_FLOAT_ARRAY_TYPE(16);
|
|
1200
|
+
return M4x4.mul(tm1, tm2, r);
|
|
1201
|
+
};
|
|
1202
|
+
|
|
1203
|
+
/*
|
|
1204
|
+
* Function: M4x4.transpose
|
|
1205
|
+
*/
|
|
1206
|
+
M4x4.transpose = function M4x4_transpose (m, r) {
|
|
1207
|
+
//MathUtils_assert(m.length == 16, "m.length == 16");
|
|
1208
|
+
//MathUtils_assert(r == undefined || r.length == 16, "r == undefined || r.length == 16");
|
|
1209
|
+
|
|
1210
|
+
if (m == r) {
|
|
1211
|
+
var tmp = 0.0;
|
|
1212
|
+
tmp = m[1]; m[1] = m[4]; m[4] = tmp;
|
|
1213
|
+
tmp = m[2]; m[2] = m[8]; m[8] = tmp;
|
|
1214
|
+
tmp = m[3]; m[3] = m[12]; m[12] = tmp;
|
|
1215
|
+
tmp = m[6]; m[6] = m[9]; m[9] = tmp;
|
|
1216
|
+
tmp = m[7]; m[7] = m[13]; m[13] = tmp;
|
|
1217
|
+
tmp = m[11]; m[11] = m[14]; m[14] = tmp;
|
|
1218
|
+
return m;
|
|
1219
|
+
}
|
|
1220
|
+
|
|
1221
|
+
if (r == undefined)
|
|
1222
|
+
r = new MJS_FLOAT_ARRAY_TYPE(16);
|
|
1223
|
+
|
|
1224
|
+
r[0] = m[0]; r[1] = m[4]; r[2] = m[8]; r[3] = m[12];
|
|
1225
|
+
r[4] = m[1]; r[5] = m[5]; r[6] = m[9]; r[7] = m[13];
|
|
1226
|
+
r[8] = m[2]; r[9] = m[6]; r[10] = m[10]; r[11] = m[14];
|
|
1227
|
+
r[12] = m[3]; r[13] = m[7]; r[14] = m[11]; r[15] = m[15];
|
|
1228
|
+
|
|
1229
|
+
return r;
|
|
1230
|
+
};
|