diff options
author | Jonathan Duran | 2012-03-06 11:38:39 -0800 |
---|---|---|
committer | Jonathan Duran | 2012-03-06 11:38:39 -0800 |
commit | 342fb451bd251358068a0dcb10e9dc218b79a176 (patch) | |
tree | aa0195d581c3934fb6dc09981506b3c070002806 /js/lib/drawing/world.js | |
parent | 2815adfd7c19b3dff89dc3e1bda9af8d30dca8d6 (diff) | |
download | ninja-342fb451bd251358068a0dcb10e9dc218b79a176.tar.gz |
Squashed commit of the following:
commit 1cd89d4d06e3a8f2c221628b19cf26a2c69f5d3f
Author: Jose Antonio Marquez <kgq387@motorola.com>
Date: Tue Mar 6 11:24:25 2012 -0800
Fixing WebGL not available bug
commit 84332ab81c1b445195f1d9be8bbeae0725c8e758
Author: Valerio Virgillito <valerio@motorola.com>
Date: Tue Mar 6 10:58:25 2012 -0800
Squashed commit of preload-fix into Master
- Requiring all the previously pre-loaded files
- RDGE, Codemirror and gl-matrix are not included via a script tag.
Signed-off-by: Valerio Virgillito <valerio@motorola.com>
commit 13f52cf0c74f53a919fa864f86669e8155f82961
Merge: dced508 abc04f3
Author: Valerio Virgillito <valerio@motorola.com>
Date: Fri Mar 2 15:46:11 2012 -0800
Merge pull request #93 from imix23ways/Timeline
Timeline: Critical bug fixes
commit dced508bb19a7bcd467ff1b86b5df5bbec4be794
Merge: 0aeb400 cc772ef
Author: Valerio Virgillito <valerio@motorola.com>
Date: Fri Mar 2 15:45:35 2012 -0800
Merge pull request #92 from mqg734/WebGLFixes
Selection Tool Fixes for elements flying off into space when they overlap
commit 0aeb400070762cf01d83cf9f9ee25a5595098b7f
Merge: ff0a956 aabb48a
Author: Valerio Virgillito <valerio@motorola.com>
Date: Fri Mar 2 14:05:21 2012 -0800
Merge pull request #94 from ericguzman/PresetsPanel
Presets Panel - Fix single-click activation, and transition cut-off bug.
commit cc772ef3333ed419d269a2bda7aea5b0150a7bd9
Author: Nivesh Rajbhandari <mqg734@motorola.com>
Date: Fri Mar 2 11:34:58 2012 -0800
Fixing flying off into space bug for translate tool too.
Signed-off-by: Nivesh Rajbhandari <mqg734@motorola.com>
commit abc04f3d50311ed1c21067344bc7e448686f8c5c
Author: Jonathan Duran <jduran@motorola.com>
Date: Fri Mar 2 11:26:25 2012 -0800
Timeline Fix timing function
Signed-off-by: Jonathan Duran <jduran@motorola.com>
commit aabb48a1c8d34bc968f4c6b0ffee4e31c1d5d286
Author: Eric Guzman <ericg@motorola.com>
Date: Fri Mar 2 11:22:44 2012 -0800
Presets Panel - Fix single-click activation, and transition cut-off bug.
Use double-click as the activation event for transition presets. Also fixed the bug when applying a style preset before the transition preset, which disabled transitions after the first one.
commit f3207f39ea9d8c1c34246217a23d3a689671903d
Author: Nivesh Rajbhandari <mqg734@motorola.com>
Date: Fri Mar 2 11:21:29 2012 -0800
Don't draw transform handles if the stage is the target element.
Signed-off-by: Nivesh Rajbhandari <mqg734@motorola.com>
commit 5425be91e7125c22955b4459a62412ff574e49a8
Author: Jonathan Duran <jduran@motorola.com>
Date: Fri Mar 2 11:11:48 2012 -0800
Timeline: Fix for animation iteration count
Add default webkit css properties to allow animations with integer iteration counts.
Signed-off-by: Jonathan Duran <jduran@motorola.com>
commit 1760bac1da9218315ad1bacdcf3a157495a049e8
Author: Nivesh Rajbhandari <mqg734@motorola.com>
Date: Fri Mar 2 10:48:41 2012 -0800
Fix for jumping issue when moving items that have any 3d on them.
We can't translate 3d moves into 2d space due to perspective, so we must update the matrix3d values instead of the top-left values if items have 3d.
Signed-off-by: Nivesh Rajbhandari <mqg734@motorola.com>
commit 2c04935f0ccb1cb7c98371fc10b43155f2d956c4
Author: Nivesh Rajbhandari <mqg734@motorola.com>
Date: Thu Mar 1 22:20:06 2012 -0800
Fix for elements flying off into space when moving elements that overlap.
This was happening because our hit record's element and the browser's element from point did not match.
Signed-off-by: Nivesh Rajbhandari <mqg734@motorola.com>
commit 50058746779f714ed9b0287f49e56c9f0d35593e
Merge: 500426d ff0a956
Author: Nivesh Rajbhandari <mqg734@motorola.com>
Date: Thu Mar 1 21:49:44 2012 -0800
Merge branch 'refs/heads/ninja-internal' into WebGLFixes
commit 500426dea0ca95a6b45be8ea8d132cfdb4d2c940
Author: Nivesh Rajbhandari <mqg734@motorola.com>
Date: Thu Mar 1 10:11:39 2012 -0800
Fixed logic error when resizing with the top-left transform handles.
Signed-off-by: Nivesh Rajbhandari <mqg734@motorola.com>
commit 7980d9bde2b43aa5a494ddf6f1db5c4959a57b91
Author: Nivesh Rajbhandari <mqg734@motorola.com>
Date: Thu Mar 1 10:04:15 2012 -0800
Re-fixing IKNinja-940 - Can't select objects when in side/top view.
Signed-off-by: Nivesh Rajbhandari <mqg734@motorola.com>
commit f04cc0146d8f7573628678613a99c270116768e4
Author: Nivesh Rajbhandari <mqg734@motorola.com>
Date: Wed Feb 29 16:45:40 2012 -0800
Last-used material (instead of FlatMaterial) is applied to shape when turning on use WebGL checkbox in the PI.
Signed-off-by: Nivesh Rajbhandari <mqg734@motorola.com>
Signed-off-by: Jonathan Duran <jduran@motorola.com>
Diffstat (limited to 'js/lib/drawing/world.js')
-rwxr-xr-x | js/lib/drawing/world.js | 917 |
1 files changed, 917 insertions, 0 deletions
diff --git a/js/lib/drawing/world.js b/js/lib/drawing/world.js new file mode 100755 index 00000000..3d6c6fc4 --- /dev/null +++ b/js/lib/drawing/world.js | |||
@@ -0,0 +1,917 @@ | |||
1 | /* <copyright> | ||
2 | This file contains proprietary software owned by Motorola Mobility, Inc.<br/> | ||
3 | No rights, expressed or implied, whatsoever to this software are provided by Motorola Mobility, Inc. hereunder.<br/> | ||
4 | (c) Copyright 2011 Motorola Mobility, Inc. All Rights Reserved. | ||
5 | </copyright> */ | ||
6 | |||
7 | // Useless Global variables. | ||
8 | // TODO: Remove this as soon as QE test pass | ||
9 | /* | ||
10 | var shaderProgramArray = new Array; | ||
11 | var glContextArray = new Array; | ||
12 | var vertexShaderSource = ""; | ||
13 | var fragmentShaderSource = ""; | ||
14 | var rdgeStarted = false; | ||
15 | */ | ||
16 | |||
17 | var nodeCounter = 0; | ||
18 | |||
19 | var GeomObj = require("js/lib/geom/geom-obj").GeomObj; | ||
20 | var Line = require("js/lib/geom/line").Line; | ||
21 | var Rectangle = require("js/lib/geom/rectangle").Rectangle; | ||
22 | var Circle = require("js/lib/geom/circle").Circle; | ||
23 | var MaterialsModel = require("js/models/materials-model").MaterialsModel; | ||
24 | |||
25 | /////////////////////////////////////////////////////////////////////// | ||
26 | // Class GLWorld | ||
27 | // Manages display in a canvas | ||
28 | /////////////////////////////////////////////////////////////////////// | ||
29 | var World = function GLWorld( canvas, use3D ) { | ||
30 | /////////////////////////////////////////////////////////////////////// | ||
31 | // Instance variables | ||
32 | /////////////////////////////////////////////////////////////////////// | ||
33 | |||
34 | // flag to do the drawing with WebGL | ||
35 | this._useWebGL = false; | ||
36 | if(use3D) { | ||
37 | this._useWebGL = use3D; | ||
38 | } | ||
39 | |||
40 | this._canvas = canvas; | ||
41 | if (this._useWebGL) { | ||
42 | this._glContext = canvas.getContext("experimental-webgl"); | ||
43 | } else { | ||
44 | this._2DContext = canvas.getContext( "2d" ); | ||
45 | } | ||
46 | |||
47 | this._viewportWidth = canvas.width; | ||
48 | this._viewportHeight = canvas.height; | ||
49 | |||
50 | // view parameters | ||
51 | this._fov = 45.0; | ||
52 | this._zNear = 0.1; | ||
53 | this._zFar = 100.0; | ||
54 | this._viewDist = 5.0; | ||
55 | |||
56 | // default light parameters | ||
57 | this._ambientLightColor = [0.1, 0.1, 0.1, 1.0]; | ||
58 | this._diffuseLightColor = [0.1, 0.1, 0.1, 1.0]; | ||
59 | this._specularLightColor = [0.6, 0.6, 0.6, 1.0]; | ||
60 | this._pointLightLoc = [0.0, 0.0, 0.05]; | ||
61 | |||
62 | // default material properties. Material properties should be overridden | ||
63 | // by the materials used by the objects | ||
64 | this._materialShininess = 20.0; | ||
65 | |||
66 | this._geomRoot = undefined; | ||
67 | |||
68 | this._cameraMat = Matrix.I(4); | ||
69 | this._cameraMat[14] = 5.0; | ||
70 | this._cameraMatInv = Matrix.I(4); | ||
71 | this._cameraMatInv[14] = -5.0; | ||
72 | |||
73 | this._camera = null; | ||
74 | // keep a flag indicating whether a render has been completed. | ||
75 | // this allows us to turn off automatic updating if there are | ||
76 | // no animated materials | ||
77 | this._firstRender = true; | ||
78 | |||
79 | /////////////////////////////////////////////////////////////////////// | ||
80 | // Property accessors | ||
81 | /////////////////////////////////////////////////////////////////////// | ||
82 | this.getGLContext = function() { return this._glContext; }; | ||
83 | this.setGLContext = function(gl) { this._glContext = gl; }; | ||
84 | |||
85 | this.get2DContext = function() { return this._2DContext; }; | ||
86 | this.set2DContext = function(c) { this._2DContext = c; }; | ||
87 | |||
88 | this.getCanvas = function() { return this._canvas; }; | ||
89 | this.setCanvas = function(c) { this._canvas = c; }; | ||
90 | |||
91 | this.getShaderProgram = function() { return this._shaderProgram; }; | ||
92 | |||
93 | this.getViewportWidth = function() { return this._viewportWidth; }; | ||
94 | this.getViewportHeight = function() { return this._viewportHeight; }; | ||
95 | |||
96 | this.getAspect = function() { return this._viewportWidth/this._viewportHeight; }; | ||
97 | |||
98 | this.getGeomRoot = function() { return this._geomRoot; }; | ||
99 | this.getZNear = function() { return this._zNear; }; | ||
100 | this.getZFar = function() { return this._zFar; }; | ||
101 | this.getFOV = function() { return this._fov; }; | ||
102 | |||
103 | this.getCamera = function() { return this._camera; }; | ||
104 | |||
105 | this.getCameraMat = function() { return this._cameraMat.slice(0); }; | ||
106 | this.setCameraMat = function(c) { this._cameraMat = c.slice(0); this._cameraMatInv = glmat4.inverse(c, []); }; | ||
107 | |||
108 | this.getCameraMatInverse = function() { return this._cameraMatInv.slice(0); }; | ||
109 | |||
110 | this.getViewDistance = function() { return this._viewDist; }; | ||
111 | |||
112 | this.getRootNode = function() { return this._rootNode; }; | ||
113 | this.setRootNode = function(r) { this._rootNode = r; }; | ||
114 | |||
115 | this.isWebGL = function() { return this._useWebGL; }; | ||
116 | |||
117 | this.getRenderer = function() { return this.renderer; }; | ||
118 | |||
119 | //////////////////////////////////////////////////////////////////////////////////// | ||
120 | // RDGE | ||
121 | // local variables | ||
122 | this.myScene = null; | ||
123 | this.elapsed = 0; | ||
124 | this.light = null; | ||
125 | this.light2 = null; | ||
126 | this.fillShader = null; | ||
127 | this.strokeShader = null; | ||
128 | this.renderer = null; | ||
129 | |||
130 | // keep an array of texture maps that need to be loaded | ||
131 | this._texMapsToLoad = []; | ||
132 | this._allMapsLoaded = true; | ||
133 | |||
134 | // this is the node to which objects get hung | ||
135 | this._rootNode = null; | ||
136 | |||
137 | // set up the camera matrix | ||
138 | var camMat = Matrix.I(4); | ||
139 | camMat[14] = this.getViewDistance(); | ||
140 | this.setCameraMat( camMat ); | ||
141 | |||
142 | // post-load processing of the scene | ||
143 | this.init = function() { | ||
144 | var ctx1 = g_Engine.ctxMan.handleToObject(this._canvas.rdgeCtxHandle), | ||
145 | ctx2 = g_Engine.getContext(); | ||
146 | if (ctx1 != ctx2) console.log( "***** different contexts *****" ); | ||
147 | this.renderer = ctx1.renderer; | ||
148 | this.renderer._world = this; | ||
149 | |||
150 | // create a camera, set its perspective, and then point it at the origin | ||
151 | var cam = new camera(); | ||
152 | this._camera = cam; | ||
153 | cam.setPerspective(this.getFOV(), this.getAspect(), this.getZNear(), this.getZFar()); | ||
154 | cam.setLookAt([0, 0, this.getViewDistance()], [0, 0, 0], vec3.up()); | ||
155 | |||
156 | // make this camera the active camera | ||
157 | this.renderer.cameraManager().setActiveCamera(cam); | ||
158 | |||
159 | // change clear color | ||
160 | //this.renderer.setClearFlags(g_Engine.getContext().DEPTH_BUFFER_BIT); | ||
161 | this.renderer.setClearColor([0.0, 0.0, 0.0, 0.0]); | ||
162 | //this.renderer.NinjaWorld = this; | ||
163 | |||
164 | // create an empty scene graph | ||
165 | this.myScene = new SceneGraph(); | ||
166 | |||
167 | // create some lights | ||
168 | // light 1 | ||
169 | this.light = createLightNode("myLight"); | ||
170 | this.light.setPosition([0,0,1.2]); | ||
171 | this.light.setDiffuseColor([0.75,0.9,1.0,1.0]); | ||
172 | |||
173 | // light 2 | ||
174 | this.light2 = createLightNode("myLight2"); | ||
175 | this.light2.setPosition([-0.5,0,1.2]); | ||
176 | this.light2.setDiffuseColor([1.0,0.9,0.75,1.0]); | ||
177 | |||
178 | // create a light transform | ||
179 | var lightTr = createTransformNode("lightTr"); | ||
180 | |||
181 | // create and attach a material - materials hold the light data | ||
182 | lightTr.attachMaterial(createMaterialNode("lights")); | ||
183 | |||
184 | // enable light channels 1, 2 - channel 0 is used by the default shader | ||
185 | lightTr.materialNode.enableLightChannel(1, this.light); | ||
186 | lightTr.materialNode.enableLightChannel(2, this.light2); | ||
187 | |||
188 | // all added objects are parented to the light node | ||
189 | this._rootNode = lightTr; | ||
190 | |||
191 | // add the light node to the scene | ||
192 | this.myScene.addNode(lightTr); | ||
193 | |||
194 | // Add the scene to the engine - necessary if you want the engine to draw for you | ||
195 | //g_Engine.AddScene("myScene" + this._canvas.id, this.myScene); | ||
196 | var name = this._canvas.getAttribute( "data-RDGE-id" ); | ||
197 | g_Engine.AddScene("myScene" + name, this.myScene); | ||
198 | }; | ||
199 | |||
200 | // main code for handling user interaction and updating the scene | ||
201 | this.update = function(dt) { | ||
202 | if (!dt) dt = 0.2; | ||
203 | |||
204 | dt = 0.01; // use our own internal throttle | ||
205 | this.elapsed += dt; | ||
206 | |||
207 | if (this._useWebGL) { | ||
208 | // changed the global position uniform of light 0, another way to change behavior of a light | ||
209 | rdgeGlobalParameters.u_light0Pos.set( [5*Math.cos(this.elapsed), 5*Math.sin(this.elapsed), 20]); | ||
210 | |||
211 | // orbit the light nodes around the boxes | ||
212 | this.light.setPosition([1.2*Math.cos(this.elapsed*2.0), 1.2*Math.sin(this.elapsed*2.0), 1.2*Math.cos(this.elapsed*2.0)]); | ||