Skip to content

Commit 655c73c

Browse files
committed
Video360: clean code, don't create the scene at start
1 parent 76469cb commit 655c73c

File tree

7 files changed

+59
-45
lines changed

7 files changed

+59
-45
lines changed

compressed.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dom.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,8 @@ window.dom = {
7777
ctrlTimeDuration: $( ".ctrl .position .duration" ),
7878

7979
// Right
80+
// Video 360
81+
ctrl360Btn: $( ".ctrl .btn.video360" ),
8082
// Frame capture
8183
ctrlCaptureBtn: $( ".ctrl .btn.capture" ),
8284
// Visualisations

event/video360.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
"use strict";
2+
3+
dom.ctrl360Btn.click( ui.video360Toggle );

index.html

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,10 @@
103103
</span>
104104
</div>
105105
<div class="right">
106+
<a class="btn video360 fa"
107+
style="display: none;"
108+
data-jquery-element="tooltip"
109+
data-tooltip-content="Video 360&deg;"></a>
106110
<a class="btn capture fa fa-camera"
107111
data-jquery-element="tooltip"
108112
data-tooltip-content="Frame capture"></a>
@@ -268,6 +272,7 @@
268272
<script src="event/subtitles.js"></script>
269273
<script src="event/thumbnail.js"></script>
270274
<script src="event/video.js"></script>
275+
<script src="event/video360.js"></script>
271276
<script src="event/visualisations.js"></script>
272277
<script src="event/volume.js"></script>
273278
<!-- -->

init.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ api.audio.volume( vol );
4747
api.playlist.repeat( plMode );
4848

4949
ui
50+
.video360Toggle( false )
5051
.visualizerSelect( "Oscilloscope" )
5152
.visualizerToggle( !!window.AudioContext )
5253
.pause()

main.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
var loaded = false;
66

77
window.api = {
8-
version: "0.8.19",
8+
version: "0.8.20",
99
thumbnail: {}
1010
};
1111

ui/video360.js

Lines changed: 45 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -3,81 +3,84 @@
33
(function() {
44

55
var
6-
isReady,
7-
isEnable,
8-
9-
canvas = document.createElement( "canvas" ),
10-
canvasCtx = canvas.getContext( "2d" ),
6+
sceneCreated,
7+
canvas,
8+
canvasCtx,
9+
scene,
10+
renderer,
11+
camera,
12+
texture,
13+
sphere
14+
;
1115

12-
scene = new THREE.Scene(),
16+
function createScene() {
17+
// Scene, renderer:
18+
scene = new THREE.Scene();
1319
renderer = new THREE.WebGLRenderer( {
1420
canvas: ui.canvasWebgl.canvas,
1521
context: ui.canvasWebgl.ctx
16-
}),
17-
camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 0.1, 1000 ),
18-
texture = new THREE.Texture( canvas ),
22+
});
23+
24+
// Camera:
25+
camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, .5, 2 );
26+
camera.rotation.y += -Math.PI / 2;
27+
scene.add( camera );
28+
29+
// Sphere's texture:
30+
canvas = document.createElement( "canvas" );
31+
canvasCtx = canvas.getContext( "2d" );
32+
texture = new THREE.Texture( canvas );
33+
texture.minFilter = THREE.LinearFilter;
34+
35+
// Sphere, texture:
1936
sphere = new THREE.Mesh(
20-
new THREE.SphereGeometry( 100, 32, 32, 0, Math.PI * 2, 0, Math.PI ),
37+
new THREE.SphereGeometry( 1, 32, 32, 0, Math.PI * 2, 0, Math.PI ),
2138
new THREE.MeshBasicMaterial({
2239
map: texture,
2340
overdraw: true,
2441
side: THREE.BackSide
2542
})
26-
)
27-
;
28-
29-
function createScene() {
30-
lg("create scene");
31-
32-
// Camera
33-
// camera.position.set( 60, 60, 60 );
34-
camera.rotation.y += -Math.PI / 2;
35-
// camera.lookAt( scene.position );
36-
scene.add( camera );
37-
38-
// var axes = new THREE.AxisHelper(100);
39-
// scene.add( axes );
40-
41-
// Init Sphere video
42-
// Init video canvas
43-
canvas.width = 854;
44-
canvas.height = 480;
45-
46-
// Init sphere texture ( associate with canvas )
47-
texture.minFilter = THREE.LinearFilter;
48-
49-
// Init sphere mesh
43+
);
5044
scene.add( sphere );
5145
}
5246

5347
function frame( obj ) {
54-
lg("frame");
55-
48+
// Update the renderer's dimensions:
5649
renderer.setSize( window.innerWidth, window.innerHeight );
5750
camera.aspect = window.innerWidth / window.innerHeight;
5851
camera.updateProjectionMatrix();
59-
52+
53+
// Sphere's texture:
54+
canvas.width = api.videoElement.videoWidth;
55+
canvas.height = api.videoElement.videoHeight;
6056
canvasCtx.save();
6157
canvasCtx.scale( -1, 1 );
6258
canvasCtx.drawImage( api.videoElement, -canvas.width, 0, canvas.width, canvas.height );
63-
canvasCtx.restore();
64-
59+
canvasCtx.restore();
6560
texture.needsUpdate = true;
61+
62+
// Render:
6663
renderer.render( scene, camera );
6764
}
6865

66+
ui.video360Enabled = false;
6967
ui.video360Toggle = function( b ) {
7068
if ( typeof b !== "boolean" ) {
71-
b = !isEnable;
69+
b = !ui.video360Enabled;
7270
}
71+
ui.video360Enabled = b;
7372
if ( b ) {
74-
if ( !isReady ) {
73+
if ( !sceneCreated ) {
7574
createScene();
76-
isReady = true;
75+
sceneCreated = true;
7776
}
7877
ui.canvasWebgl.render( frame );
7978
}
8079
ui.canvasWebgl.toggle( b );
80+
dom.ctrl360Btn
81+
.removeClass( "fa-check-circle-o fa-circle-o" )
82+
.addClass( b ? "fa-check-circle-o" : "fa-circle-o" )
83+
;
8184
return ui;
8285
};
8386

0 commit comments

Comments
 (0)