diff --git a/editor/index.html b/editor/index.html
index a9bb35566bcc15f3e2f6091cd97bfe24051d2d86..f2bcf4c5d083e30f20dafd52f622de2e33f0fcaa 100644
--- a/editor/index.html
+++ b/editor/index.html
@@ -34,8 +34,6 @@
-
-
diff --git a/editor/js/Menubar.Edit.js b/editor/js/Menubar.Edit.js
index b63c13ed2ea3cd0f5ff4df84d22f21ff66bb5e2c..0d4e41ac03dbeaac579f30355485e52f3df8bafc 100644
--- a/editor/js/Menubar.Edit.js
+++ b/editor/js/Menubar.Edit.js
@@ -40,6 +40,7 @@ Menubar.Edit = function ( editor ) {
// convert to BufferGeometry
var object = editor.selected;
+
if ( object.geometry instanceof THREE.Geometry ) {
if ( object.parent === undefined ) return; // avoid flattening the camera or scene
@@ -48,9 +49,10 @@ Menubar.Edit = function ( editor ) {
delete object.__webglInit; // TODO: Remove hack (WebGLRenderer refactoring)
- object.geometry = THREE.BufferGeometryUtils.fromGeometry( object.geometry );
+ object.geometry = new THREE.BufferGeometry().fromGeometry( object.geometry );
editor.signals.objectChanged.dispatch( object );
+
}
}
diff --git a/examples/js/utils/BufferGeometryUtils.js b/examples/js/utils/BufferGeometryUtils.js
deleted file mode 100644
index 372ea6530f30bb5ff2c3509578fd7df04beb84f6..0000000000000000000000000000000000000000
--- a/examples/js/utils/BufferGeometryUtils.js
+++ /dev/null
@@ -1,182 +0,0 @@
-/**
- * @author spite / http://www.clicktorelease.com/
- * @author mrdoob / http://mrdoob.com/
- */
-
-THREE.BufferGeometryUtils = {
-
- fromGeometry: function geometryToBufferGeometry( geometry, settings ) {
-
- if ( geometry instanceof THREE.BufferGeometry ) {
-
- return geometry;
-
- }
-
- settings = settings || { 'vertexColors': THREE.NoColors };
-
- var vertices = geometry.vertices;
- var faces = geometry.faces;
- var faceVertexUvs = geometry.faceVertexUvs;
- var vertexColors = settings.vertexColors;
- var hasFaceVertexUv = faceVertexUvs[ 0 ].length > 0;
- var hasFaceVertexNormals = faces[ 0 ].vertexNormals.length == 3;
-
- var bufferGeometry = new THREE.BufferGeometry();
-
- bufferGeometry.attributes = {
-
- position: {
- itemSize: 3,
- array: new Float32Array( faces.length * 3 * 3 )
- },
- normal: {
- itemSize: 3,
- array: new Float32Array( faces.length * 3 * 3 )
- }
-
- }
-
- var positions = bufferGeometry.attributes.position.array;
- var normals = bufferGeometry.attributes.normal.array;
-
- if ( vertexColors !== THREE.NoColors ) {
-
- bufferGeometry.attributes.color = {
- itemSize: 3,
- array: new Float32Array( faces.length * 3 * 3 )
- };
-
- var colors = bufferGeometry.attributes.color.array;
-
- }
-
- if ( hasFaceVertexUv === true ) {
-
- bufferGeometry.attributes.uv = {
- itemSize: 2,
- array: new Float32Array( faces.length * 3 * 2 )
- };
-
- var uvs = bufferGeometry.attributes.uv.array;
-
- }
-
- for ( var i = 0, i2 = 0, i3 = 0; i < faces.length; i ++, i2 += 6, i3 += 9 ) {
-
- var face = faces[ i ];
-
- var a = vertices[ face.a ];
- var b = vertices[ face.b ];
- var c = vertices[ face.c ];
-
- positions[ i3 ] = a.x;
- positions[ i3 + 1 ] = a.y;
- positions[ i3 + 2 ] = a.z;
-
- positions[ i3 + 3 ] = b.x;
- positions[ i3 + 4 ] = b.y;
- positions[ i3 + 5 ] = b.z;
-
- positions[ i3 + 6 ] = c.x;
- positions[ i3 + 7 ] = c.y;
- positions[ i3 + 8 ] = c.z;
-
- if ( hasFaceVertexNormals === true ) {
-
- var na = face.vertexNormals[ 0 ];
- var nb = face.vertexNormals[ 1 ];
- var nc = face.vertexNormals[ 2 ];
-
- normals[ i3 ] = na.x;
- normals[ i3 + 1 ] = na.y;
- normals[ i3 + 2 ] = na.z;
-
- normals[ i3 + 3 ] = nb.x;
- normals[ i3 + 4 ] = nb.y;
- normals[ i3 + 5 ] = nb.z;
-
- normals[ i3 + 6 ] = nc.x;
- normals[ i3 + 7 ] = nc.y;
- normals[ i3 + 8 ] = nc.z;
-
- } else {
-
- var n = face.normal;
-
- normals[ i3 ] = n.x;
- normals[ i3 + 1 ] = n.y;
- normals[ i3 + 2 ] = n.z;
-
- normals[ i3 + 3 ] = n.x;
- normals[ i3 + 4 ] = n.y;
- normals[ i3 + 5 ] = n.z;
-
- normals[ i3 + 6 ] = n.x;
- normals[ i3 + 7 ] = n.y;
- normals[ i3 + 8 ] = n.z;
-
- }
-
- if ( vertexColors === THREE.FaceColors ) {
-
- var fc = face.color;
-
- colors[ i3 ] = fc.r;
- colors[ i3 + 1 ] = fc.g;
- colors[ i3 + 2 ] = fc.b;
-
- colors[ i3 + 3 ] = fc.r;
- colors[ i3 + 4 ] = fc.g;
- colors[ i3 + 5 ] = fc.b;
-
- colors[ i3 + 6 ] = fc.r;
- colors[ i3 + 7 ] = fc.g;
- colors[ i3 + 8 ] = fc.b;
-
- } else if ( vertexColors === THREE.VertexColors ) {
-
- var vca = face.vertexColors[ 0 ];
- var vcb = face.vertexColors[ 1 ];
- var vcc = face.vertexColors[ 2 ];
-
- colors[ i3 ] = vca.r;
- colors[ i3 + 1 ] = vca.g;
- colors[ i3 + 2 ] = vca.b;
-
- colors[ i3 + 3 ] = vcb.r;
- colors[ i3 + 4 ] = vcb.g;
- colors[ i3 + 5 ] = vcb.b;
-
- colors[ i3 + 6 ] = vcc.r;
- colors[ i3 + 7 ] = vcc.g;
- colors[ i3 + 8 ] = vcc.b;
-
- }
-
- if ( hasFaceVertexUv === true ) {
-
- var uva = faceVertexUvs[ 0 ][ i ][ 0 ];
- var uvb = faceVertexUvs[ 0 ][ i ][ 1 ];
- var uvc = faceVertexUvs[ 0 ][ i ][ 2 ];
-
- uvs[ i2 ] = uva.x;
- uvs[ i2 + 1 ] = uva.y;
-
- uvs[ i2 + 2 ] = uvb.x;
- uvs[ i2 + 3 ] = uvb.y;
-
- uvs[ i2 + 4 ] = uvc.x;
- uvs[ i2 + 5 ] = uvc.y;
-
- }
-
- }
-
- bufferGeometry.computeBoundingSphere();
-
- return bufferGeometry;
-
- }
-
-}
diff --git a/src/core/BufferGeometry.js b/src/core/BufferGeometry.js
index dd26f856504d62ec4ba9cad3df21f09729dcd10b..be03bd6afc013de2bb3a2252586d8d7d387250aa 100644
--- a/src/core/BufferGeometry.js
+++ b/src/core/BufferGeometry.js
@@ -80,6 +80,154 @@ THREE.BufferGeometry.prototype = {
},
+ fromGeometry: function ( geometry, settings ) {
+
+ settings = settings || { 'vertexColors': THREE.NoColors };
+
+ var vertices = geometry.vertices;
+ var faces = geometry.faces;
+ var faceVertexUvs = geometry.faceVertexUvs;
+ var vertexColors = settings.vertexColors;
+ var hasFaceVertexUv = faceVertexUvs[ 0 ].length > 0;
+ var hasFaceVertexNormals = faces[ 0 ].vertexNormals.length == 3;
+
+ var positions = new Float32Array( faces.length * 3 * 3 );
+ this.addAttribute( 'position', new THREE.BufferAttribute( positions, 3 ) );
+
+ var normals = new Float32Array( faces.length * 3 * 3 );
+ this.addAttribute( 'normal', new THREE.BufferAttribute( normals, 3 ) );
+
+ if ( vertexColors !== THREE.NoColors ) {
+
+ var colors = new Float32Array( faces.length * 3 * 3 );
+ this.addAttribute( 'color', new THREE.BufferAttribute( colors, 3 ) );
+
+ }
+
+ if ( hasFaceVertexUv === true ) {
+
+ var uvs = new Float32Array( faces.length * 3 * 2 );
+ this.addAttribute( 'uvs', new THREE.BufferAttribute( uvs, 2 ) );
+
+ }
+
+ for ( var i = 0, i2 = 0, i3 = 0; i < faces.length; i ++, i2 += 6, i3 += 9 ) {
+
+ var face = faces[ i ];
+
+ var a = vertices[ face.a ];
+ var b = vertices[ face.b ];
+ var c = vertices[ face.c ];
+
+ positions[ i3 ] = a.x;
+ positions[ i3 + 1 ] = a.y;
+ positions[ i3 + 2 ] = a.z;
+
+ positions[ i3 + 3 ] = b.x;
+ positions[ i3 + 4 ] = b.y;
+ positions[ i3 + 5 ] = b.z;
+
+ positions[ i3 + 6 ] = c.x;
+ positions[ i3 + 7 ] = c.y;
+ positions[ i3 + 8 ] = c.z;
+
+ if ( hasFaceVertexNormals === true ) {
+
+ var na = face.vertexNormals[ 0 ];
+ var nb = face.vertexNormals[ 1 ];
+ var nc = face.vertexNormals[ 2 ];
+
+ normals[ i3 ] = na.x;
+ normals[ i3 + 1 ] = na.y;
+ normals[ i3 + 2 ] = na.z;
+
+ normals[ i3 + 3 ] = nb.x;
+ normals[ i3 + 4 ] = nb.y;
+ normals[ i3 + 5 ] = nb.z;
+
+ normals[ i3 + 6 ] = nc.x;
+ normals[ i3 + 7 ] = nc.y;
+ normals[ i3 + 8 ] = nc.z;
+
+ } else {
+
+ var n = face.normal;
+
+ normals[ i3 ] = n.x;
+ normals[ i3 + 1 ] = n.y;
+ normals[ i3 + 2 ] = n.z;
+
+ normals[ i3 + 3 ] = n.x;
+ normals[ i3 + 4 ] = n.y;
+ normals[ i3 + 5 ] = n.z;
+
+ normals[ i3 + 6 ] = n.x;
+ normals[ i3 + 7 ] = n.y;
+ normals[ i3 + 8 ] = n.z;
+
+ }
+
+ if ( vertexColors === THREE.FaceColors ) {
+
+ var fc = face.color;
+
+ colors[ i3 ] = fc.r;
+ colors[ i3 + 1 ] = fc.g;
+ colors[ i3 + 2 ] = fc.b;
+
+ colors[ i3 + 3 ] = fc.r;
+ colors[ i3 + 4 ] = fc.g;
+ colors[ i3 + 5 ] = fc.b;
+
+ colors[ i3 + 6 ] = fc.r;
+ colors[ i3 + 7 ] = fc.g;
+ colors[ i3 + 8 ] = fc.b;
+
+ } else if ( vertexColors === THREE.VertexColors ) {
+
+ var vca = face.vertexColors[ 0 ];
+ var vcb = face.vertexColors[ 1 ];
+ var vcc = face.vertexColors[ 2 ];
+
+ colors[ i3 ] = vca.r;
+ colors[ i3 + 1 ] = vca.g;
+ colors[ i3 + 2 ] = vca.b;
+
+ colors[ i3 + 3 ] = vcb.r;
+ colors[ i3 + 4 ] = vcb.g;
+ colors[ i3 + 5 ] = vcb.b;
+
+ colors[ i3 + 6 ] = vcc.r;
+ colors[ i3 + 7 ] = vcc.g;
+ colors[ i3 + 8 ] = vcc.b;
+
+ }
+
+ if ( hasFaceVertexUv === true ) {
+
+ var uva = faceVertexUvs[ 0 ][ i ][ 0 ];
+ var uvb = faceVertexUvs[ 0 ][ i ][ 1 ];
+ var uvc = faceVertexUvs[ 0 ][ i ][ 2 ];
+
+ uvs[ i2 ] = uva.x;
+ uvs[ i2 + 1 ] = uva.y;
+
+ uvs[ i2 + 2 ] = uvb.x;
+ uvs[ i2 + 3 ] = uvb.y;
+
+ uvs[ i2 + 4 ] = uvc.x;
+ uvs[ i2 + 5 ] = uvc.y;
+
+ }
+
+ }
+
+ this.computeBoundingSphere()
+
+ return this;
+
+ },
+
computeBoundingBox: function () {
if ( this.boundingBox === null ) {