|
@@ -216,6 +216,15 @@ THREE.OBJLoader = ( function () {
|
|
|
|
|
|
},
|
|
|
|
|
|
+ addVertexPoint: function ( a ) {
|
|
|
+
|
|
|
+ var src = this.vertices;
|
|
|
+ var dst = this.object.geometry.vertices;
|
|
|
+
|
|
|
+ dst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );
|
|
|
+
|
|
|
+ },
|
|
|
+
|
|
|
addVertexLine: function ( a ) {
|
|
|
|
|
|
var src = this.vertices;
|
|
@@ -310,6 +319,20 @@ THREE.OBJLoader = ( function () {
|
|
|
|
|
|
},
|
|
|
|
|
|
+ addPointGeometry: function ( vertices ) {
|
|
|
+
|
|
|
+ this.object.geometry.type = 'Points';
|
|
|
+
|
|
|
+ var vLen = this.vertices.length;
|
|
|
+
|
|
|
+ for ( var vi = 0, l = vertices.length; vi < l; vi ++ ) {
|
|
|
+
|
|
|
+ this.addVertexPoint( this.parseVertexIndex( vertices[ vi ], vLen ) );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ },
|
|
|
+
|
|
|
addLineGeometry: function ( vertices, uvs ) {
|
|
|
|
|
|
this.object.geometry.type = 'Line';
|
|
@@ -524,6 +547,13 @@ THREE.OBJLoader = ( function () {
|
|
|
}
|
|
|
state.addLineGeometry( lineVertices, lineUVs );
|
|
|
|
|
|
+ } else if ( lineFirstChar === 'p' ) {
|
|
|
+
|
|
|
+ var lineData = line.substr( 1 ).trim();
|
|
|
+ var pointData = lineData.split( " " );
|
|
|
+
|
|
|
+ state.addPointGeometry( pointData );
|
|
|
+
|
|
|
} else if ( ( result = object_pattern.exec( line ) ) !== null ) {
|
|
|
|
|
|
// o object_name
|
|
@@ -608,6 +638,7 @@ THREE.OBJLoader = ( function () {
|
|
|
var geometry = object.geometry;
|
|
|
var materials = object.materials;
|
|
|
var isLine = ( geometry.type === 'Line' );
|
|
|
+ var isPoints = ( geometry.type === 'Points' );
|
|
|
var hasVertexColors = false;
|
|
|
|
|
|
// Skip o/g line declarations that did not follow with any faces
|
|
@@ -661,13 +692,32 @@ THREE.OBJLoader = ( function () {
|
|
|
materialLine.lights = false; // TOFIX
|
|
|
material = materialLine;
|
|
|
|
|
|
+ } else if ( isPoints && material && ! ( material instanceof THREE.PointsMaterial ) ) {
|
|
|
+
|
|
|
+ var materialPoints = new THREE.PointsMaterial( { size: 10, sizeAttenuation: false } );
|
|
|
+ materialLine.copy( material );
|
|
|
+ material = materialPoints;
|
|
|
+
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
if ( ! material ) {
|
|
|
|
|
|
- material = ( ! isLine ? new THREE.MeshPhongMaterial() : new THREE.LineBasicMaterial() );
|
|
|
+ if ( isLine ) {
|
|
|
+
|
|
|
+ material = new THREE.LineBasicMaterial();
|
|
|
+
|
|
|
+ } else if ( isPoints ) {
|
|
|
+
|
|
|
+ material = new THREE.PointsMaterial( { size: 1, sizeAttenuation: false } );
|
|
|
+
|
|
|
+ } else {
|
|
|
+
|
|
|
+ material = new THREE.MeshPhongMaterial();
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
material.name = sourceMaterial.name;
|
|
|
|
|
|
}
|
|
@@ -692,11 +742,35 @@ THREE.OBJLoader = ( function () {
|
|
|
|
|
|
}
|
|
|
|
|
|
- mesh = ( ! isLine ? new THREE.Mesh( buffergeometry, createdMaterials ) : new THREE.LineSegments( buffergeometry, createdMaterials ) );
|
|
|
+ if ( isLine ) {
|
|
|
+
|
|
|
+ mesh = new THREE.LineSegments( buffergeometry, createdMaterials );
|
|
|
+
|
|
|
+ } else if ( isPoints ) {
|
|
|
+
|
|
|
+ mesh = new THREE.Points( buffergeometry, createdMaterials );
|
|
|
+
|
|
|
+ } else {
|
|
|
+
|
|
|
+ mesh = new THREE.Mesh( buffergeometry, createdMaterials );
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
} else {
|
|
|
|
|
|
- mesh = ( ! isLine ? new THREE.Mesh( buffergeometry, createdMaterials[ 0 ] ) : new THREE.LineSegments( buffergeometry, createdMaterials[ 0 ] ) );
|
|
|
+ if ( isLine ) {
|
|
|
+
|
|
|
+ mesh = new THREE.LineSegments( buffergeometry, createdMaterials[ 0 ] );
|
|
|
+
|
|
|
+ } else if ( isPoints ) {
|
|
|
+
|
|
|
+ mesh = new THREE.Points( buffergeometry, createdMaterials[ 0 ] );
|
|
|
+
|
|
|
+ } else {
|
|
|
+
|
|
|
+ mesh = new THREE.Mesh( buffergeometry, createdMaterials[ 0 ] );
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
}
|
|
|
|