Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(120)

Side by Side Diff: tracing/tracing/ui/base/camera.html

Issue 2771723003: [tracing] Move math utilities from base into their own subdirectory (attempt 2) (Closed)
Patch Set: rebase Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « tracing/tracing/ui/base/bar_chart_test.html ('k') | tracing/tracing/ui/base/camera_test.html » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 <!DOCTYPE html> 1 <!DOCTYPE html>
2 <!-- 2 <!--
3 Copyright (c) 2014 The Chromium Authors. All rights reserved. 3 Copyright (c) 2014 The Chromium Authors. All rights reserved.
4 Use of this source code is governed by a BSD-style license that can be 4 Use of this source code is governed by a BSD-style license that can be
5 found in the LICENSE file. 5 found in the LICENSE file.
6 --> 6 -->
7 7
8 <link rel="import" href="/tracing/base/settings.html"> 8 <link rel="import" href="/tracing/base/settings.html">
9 <link rel="import" href="/tracing/ui/base/ui.html"> 9 <link rel="import" href="/tracing/ui/base/ui.html">
10 <link rel="import" href="/tracing/ui/base/utils.html"> 10 <link rel="import" href="/tracing/ui/base/utils.html">
11 11
12 <script> 12 <script>
13 'use strict'; 13 'use strict';
14 14
15 tr.exportTo('tr.ui.b', function() { 15 tr.exportTo('tr.ui.b', function() {
16 let deg2rad = tr.b.math.deg2rad;
17
16 var constants = { 18 var constants = {
17 DEFAULT_SCALE: 0.5, 19 DEFAULT_SCALE: 0.5,
18 DEFAULT_EYE_DISTANCE: 10000, 20 DEFAULT_EYE_DISTANCE: 10000,
19 MINIMUM_DISTANCE: 1000, 21 MINIMUM_DISTANCE: 1000,
20 MAXIMUM_DISTANCE: 100000, 22 MAXIMUM_DISTANCE: 100000,
21 FOV: 15, 23 FOV: 15,
22 RESCALE_TIMEOUT_MS: 200, 24 RESCALE_TIMEOUT_MS: 200,
23 MAXIMUM_TILT: 80, 25 MAXIMUM_TILT: 80,
24 SETTINGS_NAMESPACE: 'tr.ui_camera' 26 SETTINGS_NAMESPACE: 'tr.ui_camera'
25 }; 27 };
26 28
27
28 var Camera = tr.ui.b.define('camera'); 29 var Camera = tr.ui.b.define('camera');
29 30
30 Camera.prototype = { 31 Camera.prototype = {
31 __proto__: HTMLUnknownElement.prototype, 32 __proto__: HTMLUnknownElement.prototype,
32 33
33 decorate: function(eventSource) { 34 decorate: function(eventSource) {
34 this.eventSource_ = eventSource; 35 this.eventSource_ = eventSource;
35 36
36 this.eventSource_.addEventListener('beginpan', 37 this.eventSource_.addEventListener('beginpan',
37 this.onPanBegin_.bind(this)); 38 this.onPanBegin_.bind(this));
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
70 }, 71 },
71 72
72 get projectionMatrix() { 73 get projectionMatrix() {
73 var rect = 74 var rect =
74 tr.ui.b.windowRectForElement(this.canvas_). 75 tr.ui.b.windowRectForElement(this.canvas_).
75 scaleSize(this.pixelRatio_); 76 scaleSize(this.pixelRatio_);
76 77
77 var aspectRatio = rect.width / rect.height; 78 var aspectRatio = rect.width / rect.height;
78 var matrix = mat4.create(); 79 var matrix = mat4.create();
79 mat4.perspective( 80 mat4.perspective(
80 matrix, tr.b.deg2rad(constants.FOV), aspectRatio, 1, 100000); 81 matrix, deg2rad(constants.FOV), aspectRatio, 1, 100000);
81 82
82 return matrix; 83 return matrix;
83 }, 84 },
84 85
85 set canvas(c) { 86 set canvas(c) {
86 this.canvas_ = c; 87 this.canvas_ = c;
87 }, 88 },
88 89
89 set deviceRect(rect) { 90 set deviceRect(rect) {
90 this.deviceRect_ = rect; 91 this.deviceRect_ = rect;
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
154 // Get the eye vector, since we'll be adjusting gazeTarget. 155 // Get the eye vector, since we'll be adjusting gazeTarget.
155 var eyeVector = [ 156 var eyeVector = [
156 this.eye_[0] - this.gazeTarget_[0], 157 this.eye_[0] - this.gazeTarget_[0],
157 this.eye_[1] - this.gazeTarget_[1], 158 this.eye_[1] - this.gazeTarget_[1],
158 this.eye_[2] - this.gazeTarget_[2]]; 159 this.eye_[2] - this.gazeTarget_[2]];
159 var length = vec3.length(eyeVector); 160 var length = vec3.length(eyeVector);
160 vec3.normalize(eyeVector, eyeVector); 161 vec3.normalize(eyeVector, eyeVector);
161 162
162 var halfFov = constants.FOV / 2; 163 var halfFov = constants.FOV / 2;
163 var multiplier = 164 var multiplier =
164 2.0 * length * Math.tan(tr.b.deg2rad(halfFov)) / rect.height; 165 2.0 * length * Math.tan(deg2rad(halfFov)) / rect.height;
165 166
166 // Get the up and right vectors. 167 // Get the up and right vectors.
167 var up = [0, 1, 0]; 168 var up = [0, 1, 0];
168 var rotMatrix = mat4.create(); 169 var rotMatrix = mat4.create();
169 mat4.rotate( 170 mat4.rotate(
170 rotMatrix, rotMatrix, tr.b.deg2rad(this.rotation_[1]), [0, 1, 0]); 171 rotMatrix, rotMatrix, deg2rad(this.rotation_[1]), [0, 1, 0]);
171 mat4.rotate( 172 mat4.rotate(
172 rotMatrix, rotMatrix, tr.b.deg2rad(this.rotation_[0]), [1, 0, 0]); 173 rotMatrix, rotMatrix, deg2rad(this.rotation_[0]), [1, 0, 0]);
173 vec3.transformMat4(up, up, rotMatrix); 174 vec3.transformMat4(up, up, rotMatrix);
174 175
175 var right = [0, 0, 0]; 176 var right = [0, 0, 0];
176 vec3.cross(right, eyeVector, up); 177 vec3.cross(right, eyeVector, up);
177 vec3.normalize(right, right); 178 vec3.normalize(right, right);
178 179
179 // Update the gaze target. 180 // Update the gaze target.
180 for (var i = 0; i < 3; ++i) { 181 for (var i = 0; i < 3; ++i) {
181 this.gazeTarget_[i] += 182 this.gazeTarget_[i] +=
182 delta[0] * multiplier * right[i] - delta[1] * multiplier * up[i]; 183 delta[0] * multiplier * right[i] - delta[1] * multiplier * up[i];
183 184
184 this.eye_[i] = this.gazeTarget_[i] + length * eyeVector[i]; 185 this.eye_[i] = this.gazeTarget_[i] + length * eyeVector[i];
185 } 186 }
186 187
187 // If we have some z offset, we need to reposition gazeTarget 188 // If we have some z offset, we need to reposition gazeTarget
188 // to be on the plane z = 0 with normal [0, 0, 1]. 189 // to be on the plane z = 0 with normal [0, 0, 1].
189 if (Math.abs(this.gazeTarget_[2]) > 1e-6) { 190 if (Math.abs(this.gazeTarget_[2]) > 1e-6) {
190 var gazeVector = [-eyeVector[0], -eyeVector[1], -eyeVector[2]]; 191 var gazeVector = [-eyeVector[0], -eyeVector[1], -eyeVector[2]];
191 var newLength = tr.b.clamp( 192 var newLength = tr.b.math.clamp(
192 -this.eye_[2] / gazeVector[2], 193 -this.eye_[2] / gazeVector[2],
193 constants.MINIMUM_DISTANCE, 194 constants.MINIMUM_DISTANCE,
194 constants.MAXIMUM_DISTANCE); 195 constants.MAXIMUM_DISTANCE);
195 196
196 for (var i = 0; i < 3; ++i) 197 for (var i = 0; i < 3; ++i)
197 this.gazeTarget_[i] = this.eye_[i] + newLength * gazeVector[i]; 198 this.gazeTarget_[i] = this.eye_[i] + newLength * gazeVector[i];
198 } 199 }
199 200
200 this.saveCameraToSettings(tr.b.SessionSettings()); 201 this.saveCameraToSettings(tr.b.SessionSettings());
201 this.dispatchRenderEvent_(); 202 this.dispatchRenderEvent_();
202 }, 203 },
203 204
204 updateZoomByDelta: function(delta) { 205 updateZoomByDelta: function(delta) {
205 var deltaY = delta[1]; 206 var deltaY = delta[1];
206 deltaY = tr.b.clamp(deltaY, -50, 50); 207 deltaY = tr.b.math.clamp(deltaY, -50, 50);
207 var scale = 1.0 - deltaY / 100.0; 208 var scale = 1.0 - deltaY / 100.0;
208 209
209 var eyeVector = [0, 0, 0]; 210 var eyeVector = [0, 0, 0];
210 vec3.subtract(eyeVector, this.eye_, this.gazeTarget_); 211 vec3.subtract(eyeVector, this.eye_, this.gazeTarget_);
211 212
212 var length = vec3.length(eyeVector); 213 var length = vec3.length(eyeVector);
213 214
214 // Clamp the length to allowed values by changing the scale. 215 // Clamp the length to allowed values by changing the scale.
215 if (length * scale < constants.MINIMUM_DISTANCE) 216 if (length * scale < constants.MINIMUM_DISTANCE)
216 scale = constants.MINIMUM_DISTANCE / length; 217 scale = constants.MINIMUM_DISTANCE / length;
(...skipping 15 matching lines...) Expand all
232 return; 233 return;
233 if (Math.abs(this.rotation_[1] - delta[0]) > constants.MAXIMUM_TILT) 234 if (Math.abs(this.rotation_[1] - delta[0]) > constants.MAXIMUM_TILT)
234 return; 235 return;
235 236
236 var eyeVector = [0, 0, 0, 0]; 237 var eyeVector = [0, 0, 0, 0];
237 vec3.subtract(eyeVector, this.eye_, this.gazeTarget_); 238 vec3.subtract(eyeVector, this.eye_, this.gazeTarget_);
238 239
239 // Undo the current rotation. 240 // Undo the current rotation.
240 var rotMatrix = mat4.create(); 241 var rotMatrix = mat4.create();
241 mat4.rotate( 242 mat4.rotate(
242 rotMatrix, rotMatrix, -tr.b.deg2rad(this.rotation_[0]), [1, 0, 0]); 243 rotMatrix, rotMatrix, -deg2rad(this.rotation_[0]), [1, 0, 0]);
243 mat4.rotate( 244 mat4.rotate(
244 rotMatrix, rotMatrix, -tr.b.deg2rad(this.rotation_[1]), [0, 1, 0]); 245 rotMatrix, rotMatrix, -deg2rad(this.rotation_[1]), [0, 1, 0]);
245 vec4.transformMat4(eyeVector, eyeVector, rotMatrix); 246 vec4.transformMat4(eyeVector, eyeVector, rotMatrix);
246 247
247 // Update rotation values. 248 // Update rotation values.
248 this.rotation_[0] += delta[1]; 249 this.rotation_[0] += delta[1];
249 this.rotation_[1] -= delta[0]; 250 this.rotation_[1] -= delta[0];
250 251
251 // Redo the new rotation. 252 // Redo the new rotation.
252 mat4.identity(rotMatrix); 253 mat4.identity(rotMatrix);
253 mat4.rotate( 254 mat4.rotate(
254 rotMatrix, rotMatrix, tr.b.deg2rad(this.rotation_[1]), [0, 1, 0]); 255 rotMatrix, rotMatrix, deg2rad(this.rotation_[1]), [0, 1, 0]);
255 mat4.rotate( 256 mat4.rotate(
256 rotMatrix, rotMatrix, tr.b.deg2rad(this.rotation_[0]), [1, 0, 0]); 257 rotMatrix, rotMatrix, deg2rad(this.rotation_[0]), [1, 0, 0]);
257 vec4.transformMat4(eyeVector, eyeVector, rotMatrix); 258 vec4.transformMat4(eyeVector, eyeVector, rotMatrix);
258 259
259 vec3.add(this.eye_, this.gazeTarget_, eyeVector); 260 vec3.add(this.eye_, this.gazeTarget_, eyeVector);
260 261
261 this.saveCameraToSettings(tr.b.SessionSettings()); 262 this.saveCameraToSettings(tr.b.SessionSettings());
262 this.dispatchRenderEvent_(); 263 this.dispatchRenderEvent_();
263 }, 264 },
264 265
265 266
266 // Event callbacks. 267 // Event callbacks.
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
339 dispatchRenderEvent_: function() { 340 dispatchRenderEvent_: function() {
340 tr.b.dispatchSimpleEvent(this, 'renderrequired', false, false); 341 tr.b.dispatchSimpleEvent(this, 'renderrequired', false, false);
341 } 342 }
342 }; 343 };
343 344
344 return { 345 return {
345 Camera, 346 Camera,
346 }; 347 };
347 }); 348 });
348 </script> 349 </script>
OLDNEW
« no previous file with comments | « tracing/tracing/ui/base/bar_chart_test.html ('k') | tracing/tracing/ui/base/camera_test.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698