diff --git a/docs/api/objects/LineLoop.html b/docs/api/objects/LineLoop.html new file mode 100644 index 0000000000000000000000000000000000000000..a5410919c169bc0d1b78cf6028066b9ac79dfe50 --- /dev/null +++ b/docs/api/objects/LineLoop.html @@ -0,0 +1,55 @@ + + + + + + + + + + + [page:Object3D] → [page:Line] → + +

[name]

+ +
+ A continuous line that connects back to the start.

+ + This is nearly the same as [page:Line]; the only difference is that it is rendered using + [link:https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/drawElements gl.LINE_LOOP] + instead of [link:https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/drawElements gl.LINE_STRIP], + which draws a straight line to the next vertex, and connects the last vertex back to the first. +
+ + +

Constructor

+ +

[name]( [page:Geometry geometry], [page:Material material] )

+ +
+ [page:Geometry geometry] — List of vertices representing points on the line loop.
+ [page:Material material] — Material for the line. Default is [page:LineBasicMaterial LineBasicMaterial]. +
+ +
If no material is supplied, a randomized line material will be created and assigned to the object.
+ + +

Properties

+
See the base [page:Line] class for common properties.
+ +

[property:Boolean isLineLoop]

+
+ Used to check whether this or derived classes are line loops. Default is *true*.

+ + You should not change this, as it used internally for optimisation. +
+ + +

Methods

+
See the base [page:Line] class for common methods.
+ +

Source

+ + [link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js] + + diff --git a/docs/list.js b/docs/list.js index 8d7680de5a2c3cffc470449e0243aadcae0aeb98..3fa4ff941e1ecb2b6eb02216d2a1df8429c6e5cd 100644 --- a/docs/list.js +++ b/docs/list.js @@ -286,6 +286,7 @@ var list = { [ "Group", "api/objects/Group" ], [ "LensFlare", "api/objects/LensFlare" ], [ "Line", "api/objects/Line" ], + [ "LineLoop", "api/objects/LineLoop" ], [ "LineSegments", "api/objects/LineSegments" ], [ "LOD", "api/objects/LOD" ], [ "Mesh", "api/objects/Mesh" ], diff --git a/examples/js/loaders/GLTFLoader.js b/examples/js/loaders/GLTFLoader.js index 10fd5cd486c672497ca52acc46c54d37ef9518a3..7d9d162e6fc99114a445ce0675cd2fa89937898a 100644 --- a/examples/js/loaders/GLTFLoader.js +++ b/examples/js/loaders/GLTFLoader.js @@ -1940,6 +1940,10 @@ THREE.GLTFLoader = ( function () { child = new THREE.LineSegments( originalGeometry, material ); break; + case 'LineLoop': + child = new THREE.LineLoop( originalGeometry, material ); + break; + case 'Line': child = new THREE.Line( originalGeometry, material ); break; diff --git a/src/Three.js b/src/Three.js index c460001ce9880451201c6e48b5bd802910080e41..c3f572e76ee4c88a397880574d4dfbcfc14d5fa6 100644 --- a/src/Three.js +++ b/src/Three.js @@ -19,6 +19,7 @@ export { Skeleton } from './objects/Skeleton.js'; export { Bone } from './objects/Bone.js'; export { Mesh } from './objects/Mesh.js'; export { LineSegments } from './objects/LineSegments.js'; +export { LineLoop } from './objects/LineLoop.js'; export { Line } from './objects/Line.js'; export { Points } from './objects/Points.js'; export { Group } from './objects/Group.js'; diff --git a/src/loaders/ObjectLoader.js b/src/loaders/ObjectLoader.js index e89e0a048919a5f0008c8684af5497897dcd3cb1..8f49850c3850e98aef5e74970d014bb813e9e6ff 100644 --- a/src/loaders/ObjectLoader.js +++ b/src/loaders/ObjectLoader.js @@ -666,6 +666,12 @@ Object.assign( ObjectLoader.prototype, { break; + case 'LineLoop': + + object = new LineLoop( getGeometry( data.geometry ), getMaterial( data.material ) ); + + break; + case 'LineSegments': object = new LineSegments( getGeometry( data.geometry ), getMaterial( data.material ) ); diff --git a/src/objects/LineLoop.js b/src/objects/LineLoop.js new file mode 100644 index 0000000000000000000000000000000000000000..5ff3711f602d5469182e413e5a6242ff24eb61df --- /dev/null +++ b/src/objects/LineLoop.js @@ -0,0 +1,24 @@ +import { Line } from './Line'; + +/** + * @author mgreter / http://github.com/mgreter + */ + +function LineLoop( geometry, material ) { + + Line.call( this, geometry, material ); + + this.type = 'LineLoop'; + +} + +LineLoop.prototype = Object.assign( Object.create( Line.prototype ), { + + constructor: LineLoop, + + isLineLoop: true, + +} ); + + +export { LineLoop }; diff --git a/src/renderers/WebGLRenderer.js b/src/renderers/WebGLRenderer.js index 4b38db7525e7d059801c0a2c512b07af8ffcc547..d080306180a43569c04182909d76b780bdee3f7e 100644 --- a/src/renderers/WebGLRenderer.js +++ b/src/renderers/WebGLRenderer.js @@ -855,6 +855,10 @@ function WebGLRenderer( parameters ) { renderer.setMode( _gl.LINES ); + } else if ( object.isLineLoop ) { + + renderer.setMode( _gl.LINE_LOOP ); + } else { renderer.setMode( _gl.LINE_STRIP );