diff --git a/examples/canvas_geometry_birds.html b/examples/canvas_geometry_birds.html index b5e12264313546ef70068d712eb65aeef6201030..7ccd998f2e6744a5b0f79366dbd13c4f0e3461d1 100644 --- a/examples/canvas_geometry_birds.html +++ b/examples/canvas_geometry_birds.html @@ -357,11 +357,9 @@ boid.setAvoidWalls( true ); boid.setWorldSize( 500, 500, 400 ); - bird = birds[ i ] = new THREE.Mesh( new Bird(), new THREE.MeshBasicMaterial( { color:Math.random() * 0xffffff } ) ); + bird = birds[ i ] = new THREE.Mesh( new Bird(), new THREE.MeshBasicMaterial( { color:Math.random() * 0xffffff, doubleSided: true } ) ); bird.phase = Math.floor( Math.random() * 62.83 ); bird.position = boids[ i ].position; - bird.doubleSided = true; - // bird.scale.x = bird.scale.y = bird.scale.z = 10; scene.add( bird ); diff --git a/examples/canvas_geometry_text.html b/examples/canvas_geometry_text.html index 7ee5f04ca980ede405f7619fb1c7a52eebc1307d..bf7098ddfe576cd7bc08f443d5faeb2bc5c5dc14 100644 --- a/examples/canvas_geometry_text.html +++ b/examples/canvas_geometry_text.html @@ -90,8 +90,6 @@ var textMaterial = new THREE.MeshBasicMaterial( { color: Math.random() * 0xffffff, overdraw: true } ); text = new THREE.Mesh( text3d, textMaterial ); - text.doubleSided = false; - text.position.x = centerOffset; text.position.y = 100; text.position.z = 0; diff --git a/examples/canvas_materials.html b/examples/canvas_materials.html index eaeac1a45fbf0ef3044f904997e29d7ddbb4244f..d5fa66fafa00f8d55a49ab0a3eb8775593d82784 100644 --- a/examples/canvas_materials.html +++ b/examples/canvas_materials.html @@ -68,14 +68,14 @@ var materials = [ - { material: new THREE.MeshBasicMaterial( { color: 0x00ffff, wireframe: true } ), doubleSided: true }, - { material: new THREE.MeshBasicMaterial( { color: 0xff0000, blending: THREE.AdditiveBlending } ), doubleSided: true }, - { material: new THREE.MeshLambertMaterial( { color: 0xffffff, shading: THREE.FlatShading, overdraw: true } ), doubleSided: false }, - { material: new THREE.MeshLambertMaterial( { color: 0xffffff, shading: THREE.SmoothShading, overdraw: true } ), doubleSided: false }, - { material: new THREE.MeshDepthMaterial( { overdraw: true } ), doubleSided: false }, - { material: new THREE.MeshNormalMaterial( { overdraw: true } ), doubleSided: false }, - { material: new THREE.MeshBasicMaterial( { map: THREE.ImageUtils.loadTexture( 'textures/land_ocean_ice_cloud_2048.jpg' ) } ), doubleSided: false }, - { material: new THREE.MeshBasicMaterial( { envMap: THREE.ImageUtils.loadTexture( 'textures/envmap.png', new THREE.SphericalReflectionMapping() ) } ), doubleSided: false } + { material: new THREE.MeshBasicMaterial( { color: 0x00ffff, wireframe: true, oubleSided: true } ) }, + { material: new THREE.MeshBasicMaterial( { color: 0xff0000, blending: THREE.AdditiveBlending, doubleSided: true } ) }, + { material: new THREE.MeshLambertMaterial( { color: 0xffffff, shading: THREE.FlatShading, doubleSided: false, overdraw: true } ) }, + { material: new THREE.MeshLambertMaterial( { color: 0xffffff, shading: THREE.SmoothShading, doubleSided: false, overdraw: true } ) }, + { material: new THREE.MeshDepthMaterial( { doubleSided: false, overdraw: true } ) }, + { material: new THREE.MeshNormalMaterial( { doubleSided: false, overdraw: true } ) }, + { material: new THREE.MeshBasicMaterial( { map: THREE.ImageUtils.loadTexture( 'textures/land_ocean_ice_cloud_2048.jpg' ), doubleSided: false } ) }, + { material: new THREE.MeshBasicMaterial( { envMap: THREE.ImageUtils.loadTexture( 'textures/envmap.png', new THREE.SphericalReflectionMapping() ), doubleSided: false } ) } ]; @@ -93,7 +93,6 @@ for ( var i = 0, l = materials.length; i < l; i ++ ) { var sphere = new THREE.Mesh( geometry, materials[ i ].material ); - sphere.doubleSided = materials[ i ].doubleSided; sphere.position.x = ( i % 5 ) * 200 - 400; sphere.position.z = Math.floor( i / 5 ) * 200 - 200; diff --git a/examples/canvas_materials_depth.html b/examples/canvas_materials_depth.html index bf4d2597a7ac0f6a27a8da2ce363e1802b8c27b2..2c8f27251185f4030b439be41759a80d5eb5c05a 100644 --- a/examples/canvas_materials_depth.html +++ b/examples/canvas_materials_depth.html @@ -61,12 +61,11 @@ // Plane - var material = new THREE.MeshDepthMaterial( { overdraw: true } ); + var material = new THREE.MeshDepthMaterial( { doubleSided: true, overdraw: true } ); plane = new THREE.Mesh( new THREE.PlaneGeometry( 1000, 1000, 10, 10 ), material ); plane.position.y = - 100; plane.rotation.x = - Math.PI / 2; - plane.doubleSided = true; scene.add( plane ); // Cubes diff --git a/examples/canvas_materials_video.html b/examples/canvas_materials_video.html index 8f38d1c203569f064561c29957ecd36e96b3e090..0e6570013bb00e88b3651d4269c2f3eeceb51d20 100644 --- a/examples/canvas_materials_video.html +++ b/examples/canvas_materials_video.html @@ -99,7 +99,7 @@ textureReflection.minFilter = THREE.LinearFilter; textureReflection.magFilter = THREE.LinearFilter; - var materialReflection = new THREE.MeshBasicMaterial( { map: textureReflection, overdraw: true } ); + var materialReflection = new THREE.MeshBasicMaterial( { map: textureReflection, flipSided: true, overdraw: true } ); // @@ -113,7 +113,6 @@ mesh.position.y = -306; mesh.rotation.x = - Math.PI; mesh.scale.x = mesh.scale.y = mesh.scale.z = 1.5; - mesh.doubleSided = true; scene.add( mesh ); // diff --git a/examples/canvas_particles_shapes.html b/examples/canvas_particles_shapes.html index 64235e1903e9bf0fb4741a265f1570b9c3b8830d..1edee2b091113ecb6f0309864edbd53b1de67bbd 100644 --- a/examples/canvas_particles_shapes.html +++ b/examples/canvas_particles_shapes.html @@ -99,8 +99,6 @@ // Potentially, we can extract the vertices or faces of the text to generate particles too. // Geo > Vertices > Position - text.doubleSided = false; - text.position.x = centerOffset; text.position.y = 100; text.position.z = 0; diff --git a/src/core/Projector.js b/src/core/Projector.js index 522d315edfdcbfc060ce525b9f43f06ae0695010..772131ff652f0447f1382f5ead2a6729af190017 100644 --- a/src/core/Projector.js +++ b/src/core/Projector.js @@ -128,10 +128,10 @@ THREE.Projector = function() { var near = camera.near, far = camera.far, visible = false, o, ol, v, vl, f, fl, n, nl, c, cl, u, ul, object, - modelMatrix, normalMatrix, + modelMatrix, rotationMatrix, geometry, geometryMaterials, vertices, vertex, vertexPositionScreen, faces, face, faceVertexNormals, normal, faceVertexUvs, uvs, - v1, v2, v3, v4; + v1, v2, v3, v4, flipSided, doubleSided; _face3Count = 0; _face4Count = 0; @@ -168,7 +168,10 @@ THREE.Projector = function() { faces = geometry.faces; faceVertexUvs = geometry.faceVertexUvs; - normalMatrix = object.matrixRotationWorld.extractRotation( modelMatrix ); + rotationMatrix = object.matrixRotationWorld.extractRotation( modelMatrix ); + + flipSided = object.material.flipSided; + doubleSided = object.material.doubleSided; for ( v = 0, vl = vertices.length; v < vl; v ++ ) { @@ -187,6 +190,7 @@ THREE.Projector = function() { } + for ( f = 0, fl = faces.length; f < fl; f ++ ) { face = faces[ f ]; @@ -202,7 +206,7 @@ THREE.Projector = function() { visible = ( ( v3.positionScreen.x - v1.positionScreen.x ) * ( v2.positionScreen.y - v1.positionScreen.y ) - ( v3.positionScreen.y - v1.positionScreen.y ) * ( v2.positionScreen.x - v1.positionScreen.x ) ) < 0; - if ( object.doubleSided === true || visible !== object.flipSided ) { + if ( doubleSided === true || visible !== flipSided ) { _face = getNextFace3InPool(); @@ -237,7 +241,7 @@ THREE.Projector = function() { ( v2.positionScreen.y - v3.positionScreen.y ) * ( v4.positionScreen.x - v3.positionScreen.x ) < 0; - if ( object.doubleSided === true || visible !== object.flipSided ) { + if ( doubleSided === true || visible !== flipSided ) { _face = getNextFace4InPool(); @@ -261,8 +265,9 @@ THREE.Projector = function() { } _face.normalWorld.copy( face.normal ); - if ( visible === false && ( object.flipSided === true || object.doubleSided === true ) ) _face.normalWorld.negate(); - normalMatrix.multiplyVector3( _face.normalWorld ); + + if ( visible === false && ( flipSided === true || doubleSided === true ) ) _face.normalWorld.negate(); + rotationMatrix.multiplyVector3( _face.normalWorld ); _face.centroidWorld.copy( face.centroid ); modelMatrix.multiplyVector3( _face.centroidWorld ); @@ -277,9 +282,9 @@ THREE.Projector = function() { normal = _face.vertexNormalsWorld[ n ]; normal.copy( faceVertexNormals[ n ] ); - if ( visible === false && ( object.flipSided === true || object.doubleSided === true ) ) normal.negate(); + if ( visible === false && ( flipSided === true || doubleSided === true ) ) normal.negate(); - normalMatrix.multiplyVector3( normal ); + rotationMatrix.multiplyVector3( normal ); } diff --git a/src/materials/MeshFaceMaterial.js b/src/materials/MeshFaceMaterial.js index 5cdcd61996025fb86452f66c4265a19fa5a79ebb..a9d752f5720e86238131dde95115562fd45f739d 100644 --- a/src/materials/MeshFaceMaterial.js +++ b/src/materials/MeshFaceMaterial.js @@ -2,4 +2,8 @@ * @author mr.doob / http://mrdoob.com/ */ -THREE.MeshFaceMaterial = function () {}; +THREE.MeshFaceMaterial = function ( parameters ) { + + THREE.Material.call( this, parameters ); + +};