UNPKG

6.25 kBJavaScriptView Raw
1'use strict';
2
3import FluxCameras from '../src/FluxCameras.js';
4import CameraControls from '../src/controls/CameraControls.js';
5import * as THREE from 'three';
6
7export function initCameras(t) {
8 var cameras = new FluxCameras();
9 t.equal(cameras._view, FluxCameras.VIEWS.perspective, 'Default view should be perspective');
10 t.ok(cameras.getCamera(), 'Camera should be set');
11 t.end();
12} // end it
13
14
15export function serializeCameras(t) {
16 var cameras = new FluxCameras();
17 var cameraJson = JSON.stringify(cameras.toJSON());
18 var keywords = ['perspective','orthographic','px','py','pz','rx','ry','rz','near','far'];
19 for (var i=0;i<keywords.length;i++) {
20 t.ok(cameraJson.indexOf(keywords[i])!==-1, 'JSON should contain '+keywords[i]);
21 }
22 // console.log(cameraJson);
23 var cameraStates = JSON.parse(cameraJson);
24 cameraStates.perspective.px = 5;
25 cameras.fromJSON(cameraStates);
26 t.equal(cameras._perspCamera.position.x, 5, 'Deserialize should set values on cameras');
27 t.end();
28} // end it
29
30export function testCameraFocus(t) {
31 var camera = new THREE.PerspectiveCamera(30, 1.33, 0.1, 100000);
32 camera.position.set(25, 100, 130);
33
34 var geometry = new THREE.SphereBufferGeometry( 5000, 32, 32 );
35 var material = new THREE.MeshBasicMaterial( {color: 0xffff00} );
36 var sphere = new THREE.Mesh( geometry, material );
37 sphere.position.set(25, 10000, 130);
38
39 var domElement = document.createElement();
40 var controls = new CameraControls(camera, null, domElement);
41 controls.focus(sphere);
42 t.ok(camera.position.y > 0, 'Camera stays above ground');
43
44 // zoom
45 document.listeners.mousedown(_eventFactory(5,5,1));
46 document.listeners.mousemove(_eventFactory(50,50,1));
47 document.listeners.mouseup(_eventFactory(50,50,1));
48 var x = camera.position.x;
49 var y = camera.position.y;
50 var z = camera.position.z;
51 controls.focus(sphere);
52 // Make sure that frame is on by default so camera will move when focusing after a zoom
53 t.ok(camera.position.x !== x, 'Camera x moves');
54 t.ok(camera.position.y !== y, 'Camera y moves');
55 t.ok(camera.position.z !== z, 'Camera z moves');
56 t.end();
57}
58
59// Create a mock mouse event for use with controls
60function _eventFactory(x, y, button) {
61 return {
62 button: button,
63 target: {
64 getBoundingClientRect: function () {
65 return {
66 left: 0,
67 top: 0,
68 width:100,
69 height:100
70 };
71 }
72 },
73 preventDefault: function () {},
74 pageX: x,
75 pageY: y
76 };
77}
78
79// Add properties to a mock MouseEvent that mock a TouchEvent
80function _touch(event) {
81 event.touches = [{pageX: event.pageX, pageY: event.pageY, target: event.target}];
82 return event;
83}
84
85export function testCameraRotate(t) {
86 var camera = new THREE.PerspectiveCamera(30, 1.33, 0.1, 100000);
87 camera.position.set(25, 100, 130);
88 var domElement = document.createElement();
89 var x = camera.position.x;
90 var y = camera.position.y;
91 var z = camera.position.z;
92 new CameraControls(camera, null, domElement);
93 document.listeners.mousedown(_eventFactory(5,5,0));
94 document.listeners.mousemove(_eventFactory(50,50,0));
95 document.listeners.mouseup(_eventFactory(50,50,0));
96 t.ok(camera.position.x !== x, 'Camera x moves');
97 t.ok(camera.position.y !== y, 'Camera y moves');
98 t.ok(camera.position.z !== z, 'Camera z moves');
99 t.end();
100}
101
102export function testCameraTouchRotate(t) {
103 var camera = new THREE.PerspectiveCamera(30, 1.33, 0.1, 100000);
104 camera.position.set(25, 100, 130);
105 var domElement = document.createElement();
106 var x = camera.position.x;
107 var y = camera.position.y;
108 var z = camera.position.z;
109 new CameraControls(camera, null, domElement);
110 document.listeners.touchstart(_touch(_eventFactory(5,5,0)));
111 document.listeners.touchmove(_touch(_eventFactory(50,50,0)));
112 document.listeners.touchend(_touch(_eventFactory(50,50,0)));
113 t.ok(camera.position.x !== x, 'Camera x moves');
114 t.ok(camera.position.y !== y, 'Camera y moves');
115 t.ok(camera.position.z !== z, 'Camera z moves');
116 t.end();
117}
118
119export function testCameraZoom(t) {
120 var camera = new THREE.PerspectiveCamera(30, 1.33, 0.1, 100000);
121 camera.position.set(25, 100, 130);
122 var domElement = document.createElement();
123 var x = camera.position.x;
124 var y = camera.position.y;
125 var z = camera.position.z;
126 new CameraControls(camera, null, domElement);
127 document.listeners.mousedown(_eventFactory(5,5,1));
128 document.listeners.mousemove(_eventFactory(50,50,1));
129 document.listeners.mouseup(_eventFactory(50,50,1));
130 t.ok(camera.position.x === x, 'Camera x stays the same');
131 t.ok(camera.position.y === y, 'Camera y stays the same');
132 t.ok(camera.position.z !== z, 'Camera z moves');
133 t.end();
134}
135
136export function testCameraPan(t) {
137 var camera = new THREE.PerspectiveCamera(30, 1.33, 0.1, 100000);
138 camera.position.set(25, 100, 130);
139 var domElement = document.createElement();
140 var x = camera.position.x;
141 var y = camera.position.y;
142 var z = camera.position.z;
143 new CameraControls(camera, null, domElement);
144 document.listeners.mousedown(_eventFactory(5,5,2));
145 document.listeners.mousemove(_eventFactory(50,50,2));
146 document.listeners.mouseup(_eventFactory(50,50,2));
147 t.ok(camera.position.x !== x, 'Camera x moves');
148 t.ok(camera.position.y !== y, 'Camera y moves');
149 t.ok(camera.position.z === z, 'Camera z stays the same');
150 t.end();
151}
152
153export function testCameraDeactivate(t) {
154 var camera = new THREE.PerspectiveCamera(30, 1.33, 0.1, 100000);
155 camera.position.set(25, 100, 130);
156 var domElement = document.createElement();
157 var x = camera.position.x;
158 var z = camera.position.z;
159 var controls = new CameraControls(camera, null, domElement);
160 controls.deactivate();
161 document.listeners.mousedown(_eventFactory(5,5,2));
162 t.ok(!document.listeners.mousemove, 'Dynamic listeners not added');
163 t.ok(camera.position.x === x, 'Camera x stays the same');
164 t.ok(camera.position.z === z, 'Camera z stays the same');
165 t.end();
166}