Skip to content

Commit d36df79

Browse files
committed
Basic Channels implementation. See mrdoob#5180 and mrdoob#5931.
1 parent e1dc0bd commit d36df79

File tree

4 files changed

+90
-39
lines changed

4 files changed

+90
-39
lines changed

src/core/Channels.js

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
/**
2+
* @author mrdoob / http://mrdoob.com/
3+
*/
4+
5+
THREE.Channels = function () {
6+
7+
this.mask = 1;
8+
9+
};
10+
11+
THREE.Channels.prototype = {
12+
13+
constructor: THREE.Channels,
14+
15+
set: function ( channel ) {
16+
17+
this.mask = 1 << channel;
18+
19+
},
20+
21+
enable: function ( channel ) {
22+
23+
this.mask |= 1 << channel;
24+
25+
},
26+
27+
toggle: function ( channel ) {
28+
29+
this.mask ^= 1 << channel;
30+
31+
},
32+
33+
disable: function ( channel ) {
34+
35+
this.mask &= ~ ( 1 << channel );
36+
37+
},
38+
39+
clear: function () {
40+
41+
this.mask = 1;
42+
43+
}
44+
45+
};

src/core/Object3D.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ THREE.Object3D = function () {
1616
this.type = 'Object3D';
1717

1818
this.parent = null;
19+
this.channels = new THREE.Channels();
1920
this.children = [];
2021

2122
this.up = THREE.Object3D.DefaultUp.clone();

src/renderers/WebGLRenderer.js

Lines changed: 43 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1105,7 +1105,7 @@ THREE.WebGLRenderer = function ( parameters ) {
11051105
sprites.length = 0;
11061106
lensFlares.length = 0;
11071107

1108-
projectObject( scene );
1108+
projectObject( scene, camera );
11091109

11101110
opaqueObjects.length = opaqueObjectsLastIndex + 1;
11111111
transparentObjects.length = transparentObjectsLastIndex + 1;
@@ -1236,77 +1236,81 @@ THREE.WebGLRenderer = function ( parameters ) {
12361236

12371237
}
12381238

1239-
function projectObject( object ) {
1239+
function projectObject( object, camera ) {
12401240

12411241
if ( object.visible === false ) return;
12421242

1243-
if ( object instanceof THREE.Light ) {
1243+
if ( ( object.channels.mask & camera.channels.mask ) !== 0 ) {
12441244

1245-
lights.push( object );
1245+
if ( object instanceof THREE.Light ) {
12461246

1247-
} else if ( object instanceof THREE.Sprite ) {
1247+
lights.push( object );
12481248

1249-
sprites.push( object );
1249+
} else if ( object instanceof THREE.Sprite ) {
12501250

1251-
} else if ( object instanceof THREE.LensFlare ) {
1251+
sprites.push( object );
12521252

1253-
lensFlares.push( object );
1253+
} else if ( object instanceof THREE.LensFlare ) {
12541254

1255-
} else if ( object instanceof THREE.ImmediateRenderObject ) {
1255+
lensFlares.push( object );
12561256

1257-
if ( _this.sortObjects === true ) {
1257+
} else if ( object instanceof THREE.ImmediateRenderObject ) {
12581258

1259-
_vector3.setFromMatrixPosition( object.matrixWorld );
1260-
_vector3.applyProjection( _projScreenMatrix );
1259+
if ( _this.sortObjects === true ) {
12611260

1262-
}
1261+
_vector3.setFromMatrixPosition( object.matrixWorld );
1262+
_vector3.applyProjection( _projScreenMatrix );
12631263

1264-
pushRenderItem( object, null, object.material, _vector3.z, null );
1264+
}
12651265

1266-
} else if ( object instanceof THREE.Mesh || object instanceof THREE.Line || object instanceof THREE.Points ) {
1266+
pushRenderItem( object, null, object.material, _vector3.z, null );
12671267

1268-
if ( object instanceof THREE.SkinnedMesh ) {
1268+
} else if ( object instanceof THREE.Mesh || object instanceof THREE.Line || object instanceof THREE.Points ) {
12691269

1270-
object.skeleton.update();
1270+
if ( object instanceof THREE.SkinnedMesh ) {
12711271

1272-
}
1272+
object.skeleton.update();
12731273

1274-
if ( object.frustumCulled === false || _frustum.intersectsObject( object ) === true ) {
1274+
}
12751275

1276-
var material = object.material;
1276+
if ( object.frustumCulled === false || _frustum.intersectsObject( object ) === true ) {
12771277

1278-
if ( material.visible === true ) {
1278+
var material = object.material;
12791279

1280-
if ( _this.sortObjects === true ) {
1280+
if ( material.visible === true ) {
12811281

1282-
_vector3.setFromMatrixPosition( object.matrixWorld );
1283-
_vector3.applyProjection( _projScreenMatrix );
1282+
if ( _this.sortObjects === true ) {
12841283

1285-
}
1284+
_vector3.setFromMatrixPosition( object.matrixWorld );
1285+
_vector3.applyProjection( _projScreenMatrix );
1286+
1287+
}
12861288

1287-
var geometry = objects.update( object );
1289+
var geometry = objects.update( object );
12881290

1289-
if ( material instanceof THREE.MeshFaceMaterial ) {
1291+
if ( material instanceof THREE.MeshFaceMaterial ) {
12901292

1291-
var groups = geometry.groups;
1292-
var materials = material.materials;
1293+
var groups = geometry.groups;
1294+
var materials = material.materials;
12931295

1294-
for ( var i = 0, l = groups.length; i < l; i ++ ) {
1296+
for ( var i = 0, l = groups.length; i < l; i ++ ) {
12951297

1296-
var group = groups[ i ];
1297-
var groupMaterial = materials[ group.materialIndex ];
1298+
var group = groups[ i ];
1299+
var groupMaterial = materials[ group.materialIndex ];
12981300

1299-
if ( groupMaterial.visible === true ) {
1301+
if ( groupMaterial.visible === true ) {
13001302

1301-
pushRenderItem( object, geometry, groupMaterial, _vector3.z, group );
1303+
pushRenderItem( object, geometry, groupMaterial, _vector3.z, group );
1304+
1305+
}
13021306

13031307
}
13041308

1305-
}
1309+
} else {
13061310

1307-
} else {
1311+
pushRenderItem( object, geometry, material, _vector3.z, null );
13081312

1309-
pushRenderItem( object, geometry, material, _vector3.z, null );
1313+
}
13101314

13111315
}
13121316

@@ -1320,7 +1324,7 @@ THREE.WebGLRenderer = function ( parameters ) {
13201324

13211325
for ( var i = 0, l = children.length; i < l; i ++ ) {
13221326

1323-
projectObject( children[ i ] );
1327+
projectObject( children[ i ], camera );
13241328

13251329
}
13261330

@@ -2846,7 +2850,7 @@ THREE.WebGLRenderer = function ( parameters ) {
28462850
}
28472851

28482852
uploadTexture( textureProperties, texture, slot );
2849-
2853+
28502854
return;
28512855

28522856
}

utils/build/includes/common.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
"src/math/Math.js",
1919
"src/math/Spline.js",
2020
"src/math/Triangle.js",
21+
"src/core/Channels.js",
2122
"src/core/Clock.js",
2223
"src/core/EventDispatcher.js",
2324
"src/core/Raycaster.js",

0 commit comments

Comments
 (0)