提交 4b82ecc0 编写于 作者: M Mugen87

Geometry: Move computeLineDistance() to Line

上级 efe24f89
......@@ -107,8 +107,7 @@
<h3>[property:array lineDistances]</h3>
<div>
An array containing distances between vertices for Line geometries.
This is required for [page:LineSegments] / [page:LineDashedMaterial] to render correctly.
Line distances can be generated automatically with [page:.computeLineDistances].
This is required for [page:LineDashedMaterial] to render correctly.
</div>
<h3>[property:Array morphTargets]</h3>
......@@ -242,9 +241,6 @@
<h3>[method:null computeFlatVertexNormals]()</h3>
<div>Computes flat [page:Face3.vertexNormals vertex normals]. Sets the vertex normal of each vertex of each face to be the same as the face's normal.</div>
<h3>[method:null computeLineDistances]()</h3>
<div>Compute [page:.lineDistances].</div>
<h3>[method:null computeMorphNormals]()</h3>
<div>Computes [page:.morphNormals].</div>
......
......@@ -153,6 +153,12 @@
<h2>Geometry</h2>
<div>
Geometry.computeTangents() has been removed.<br /><br />
Geometry.computeLineDistances() has been removed. Use [page:Line.computeLineDistances] instead.<br /><br />
</div>
<h3>[page:BufferGeometry]</h3>
<div>
BufferGeometry.addIndex has been renamed to [page:BufferGeometry.setIndex].<br /><br />
......
......@@ -74,6 +74,11 @@
<h2>Methods</h2>
<div>See the base [page:Object3D] class for common methods.</div>
<h3>[method:Line computeLineDistances]()</h3>
<div>
Computes an array of distance values which are necessary for [page:LineDashedMaterial]. The method calculates for each point in the geometry the distance to the very beginning of the line.
</div>
<h3>[method:Array raycast]( [page:Raycaster raycaster], [page:Array intersects] )</h3>
<div>
Get intersections between a casted [page:Ray] and this Line.
......
......@@ -49,8 +49,7 @@
var objects = [];
var WIDTH = window.innerWidth,
HEIGHT = window.innerHeight;
var WIDTH = window.innerWidth, HEIGHT = window.innerHeight;
init();
animate();
......@@ -63,28 +62,17 @@
scene = new THREE.Scene();
scene.background = new THREE.Color( 0x111111 );
root = new THREE.Object3D();
var subdivisions = 6;
var recursion = 1;
var points = hilbert3D( new THREE.Vector3( 0,0,0 ), 25.0, recursion, 0, 1, 2, 3, 4, 5, 6, 7 );
var spline = new THREE.CatmullRomCurve3( points );
var geometrySpline = new THREE.Geometry();
for ( var i = 0; i < points.length * subdivisions; i ++ ) {
var t = i / ( points.length * subdivisions );
geometrySpline.vertices[ i ] = spline.getPoint( t );
}
var samples = spline.getPoints( points.length * subdivisions );
var geometrySpline = new THREE.BufferGeometry().setFromPoints( samples );
var geometryCube = cube( 50 );
geometryCube.computeLineDistances();
geometrySpline.computeLineDistances();
var object = new THREE.Line( geometrySpline, new THREE.LineDashedMaterial( { color: 0xffffff, dashSize: 1, gapSize: 0.5 } ) );
objects.push( object );
......@@ -186,7 +174,6 @@
var object = objects[ i ];
//object.rotation.x = 0.25 * time * ( i%2 == 1 ? 1 : -1);
object.rotation.x = 0.25 * time;
object.rotation.y = 0.25 * time;
......
......@@ -45,9 +45,7 @@
var renderer, scene, camera, stats;
var objects = [];
var WIDTH = window.innerWidth,
HEIGHT = window.innerHeight;
var WIDTH = window.innerWidth, HEIGHT = window.innerHeight;
init();
animate();
......@@ -61,37 +59,28 @@
scene.background = new THREE.Color( 0x111111 );
scene.fog = new THREE.Fog( 0x111111, 150, 200 );
root = new THREE.Object3D();
var subdivisions = 6;
var recursion = 1;
var points = hilbert3D( new THREE.Vector3( 0,0,0 ), 25.0, recursion, 0, 1, 2, 3, 4, 5, 6, 7 );
var points = hilbert3D( new THREE.Vector3( 0, 0, 0 ), 25.0, recursion, 0, 1, 2, 3, 4, 5, 6, 7 );
var spline = new THREE.CatmullRomCurve3( points );
var geometrySpline = new THREE.Geometry();
for ( var i = 0; i < points.length * subdivisions; i ++ ) {
var samples = spline.getPoints( points.length * subdivisions );
var geometrySpline = new THREE.BufferGeometry().setFromPoints( samples );
var t = i / ( points.length * subdivisions );
geometrySpline.vertices[ i ] = spline.getPoint( t );
var line = new THREE.Line( geometrySpline, new THREE.LineDashedMaterial( { color: 0xffffff, dashSize: 1, gapSize: 0.5 } ) );
line.computeLineDistances();
}
objects.push( line );
scene.add( line );
var geometryCube = cube( 50 );
geometryCube.computeLineDistances();
geometrySpline.computeLineDistances();
var object = new THREE.Line( geometrySpline, new THREE.LineDashedMaterial( { color: 0xffffff, dashSize: 1, gapSize: 0.5 } ) );
var lineSegments = new THREE.LineSegments( geometryCube, new THREE.LineDashedMaterial( { color: 0xffaa00, dashSize: 3, gapSize: 1, linewidth: 2 } ) );
lineSegments.computeLineDistances();
objects.push( object );
scene.add( object );
var object = new THREE.LineSegments( geometryCube, new THREE.LineDashedMaterial( { color: 0xffaa00, dashSize: 3, gapSize: 1, linewidth: 2 } ) );
objects.push( object );
scene.add( object );
objects.push( lineSegments );
scene.add( lineSegments );
renderer = new THREE.WebGLRenderer( { antialias: true } );
renderer.setPixelRatio( window.devicePixelRatio );
......@@ -113,47 +102,49 @@
var h = size * 0.5;
var geometry = new THREE.Geometry();
geometry.vertices.push(
new THREE.Vector3( -h, -h, -h ),
new THREE.Vector3( -h, h, -h ),
var geometry = new THREE.BufferGeometry();
var position = [];
new THREE.Vector3( -h, h, -h ),
new THREE.Vector3( h, h, -h ),
position.push(
-h, -h, -h,
-h, h, -h,
new THREE.Vector3( h, h, -h ),
new THREE.Vector3( h, -h, -h ),
-h, h, -h,
h, h, -h,
new THREE.Vector3( h, -h, -h ),
new THREE.Vector3( -h, -h, -h ),
h, h, -h,
h, -h, -h,
h, -h, -h,
-h, -h, -h,
new THREE.Vector3( -h, -h, h ),
new THREE.Vector3( -h, h, h ),
-h, -h, h,
-h, h, h,
new THREE.Vector3( -h, h, h ),
new THREE.Vector3( h, h, h ),
-h, h, h,
h, h, h,
new THREE.Vector3( h, h, h ),
new THREE.Vector3( h, -h, h ),
h, h, h,
h, -h, h,
new THREE.Vector3( h, -h, h ),
new THREE.Vector3( -h, -h, h ),
h, -h, h,
-h, -h, h,
new THREE.Vector3( -h, -h, -h ),
new THREE.Vector3( -h, -h, h ),
-h, -h, -h,
-h, -h, h,
new THREE.Vector3( -h, h, -h ),
new THREE.Vector3( -h, h, h ),
-h, h, -h,
-h, h, h,
new THREE.Vector3( h, h, -h ),
new THREE.Vector3( h, h, h ),
h, h, -h,
h, h, h,
new THREE.Vector3( h, -h, -h ),
new THREE.Vector3( h, -h, h )
h, -h, -h,
h, -h, h
);
geometry.addAttribute( 'position', new THREE.Float32BufferAttribute( position, 3 ) );
return geometry;
}
......@@ -180,15 +171,17 @@
var time = Date.now() * 0.001;
for ( var i = 0; i < objects.length; i ++ ) {
scene.traverse( function( object ) {
var object = objects[ i ];
if ( object.isLine ) {
object.rotation.x = 0.25 * time;
object.rotation.y = 0.25 * time;
}
} );
renderer.render( scene, camera );
}
......
......@@ -832,11 +832,20 @@ Object.assign( Vector4.prototype, {
//
Geometry.prototype.computeTangents = function () {
Object.assign( Geometry.prototype, {
console.warn( 'THREE.Geometry: .computeTangents() has been removed.' );
computeTangents: function () {
};
console.error( 'THREE.Geometry: .computeTangents() has been removed.' );
},
computeLineDistances: function () {
console.error( 'THREE.Geometry: .computeLineDistances() has been removed. Use THREE.Line.computeLineDistances() instead.' );
}
} );
Object.assign( Object3D.prototype, {
......
......@@ -656,25 +656,6 @@ Geometry.prototype = Object.assign( Object.create( EventDispatcher.prototype ),
},
computeLineDistances: function () {
var d = 0;
var vertices = this.vertices;
for ( var i = 0, il = vertices.length; i < il; i ++ ) {
if ( i > 0 ) {
d += vertices[ i ].distanceTo( vertices[ i - 1 ] );
}
this.lineDistances[ i ] = d;
}
},
computeBoundingBox: function () {
if ( this.boundingBox === null ) {
......
......@@ -35,6 +35,67 @@ Line.prototype = Object.assign( Object.create( Object3D.prototype ), {
isLine: true,
computeLineDistances: ( function () {
var start = new Vector3();
var end = new Vector3();
return function computeLineDistances() {
var distance = 0;
var geometry = this.geometry;
if ( geometry.isBufferGeometry ) {
// we assume non-indexed geometry
var positionAttribute = geometry.attributes.position;
var lineDistances = [];
for ( var i = 0, l = positionAttribute.count; i < l; i ++ ) {
if ( i > 0 ) {
start.fromBufferAttribute( positionAttribute, i - 1 );
end.fromBufferAttribute( positionAttribute, i );
distance += start.distanceTo( end );
}
lineDistances.push( distance );
}
geometry.addAttribute( 'lineDistance', new THREE.Float32BufferAttribute( lineDistances, 1 ) );
} else if ( geometry.isGeometry ) {
var vertices = geometry.vertices;
for ( var i = 0, l = vertices.length; i < l; i ++ ) {
if ( i > 0 ) {
start.copy( vertices[ i - 1 ] );
end.copy( vertices[ i ] );
distance += start.distanceTo( end );
}
geometry.lineDistances[ i ] = distance;
}
}
return this;
};
}() ),
raycast: ( function () {
var inverseMatrix = new Matrix4();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册