Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
车家大少爷
three.js
提交
59111f17
T
three.js
项目概览
车家大少爷
/
three.js
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
three.js
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
59111f17
编写于
10月 31, 2017
作者:
T
Tristan VALCKE
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Build unit tests
上级
c7a174ea
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
448 addition
and
180 deletion
+448
-180
test/unit/three.editor.unit.js
test/unit/three.editor.unit.js
+50
-57
test/unit/three.source.unit.js
test/unit/three.source.unit.js
+398
-123
未找到文件。
test/unit/three.editor.unit.js
浏览文件 @
59111f17
...
...
@@ -1167,7 +1167,7 @@
option
.
setTextContent
(
'
Plane
'
);
option
.
onClick
(
function
()
{
var
geometry
=
new
THREE
.
PlaneBufferGeometry
(
2
,
2
);
var
geometry
=
new
THREE
.
PlaneBufferGeometry
(
1
,
1
,
1
,
1
);
var
material
=
new
THREE
.
MeshStandardMaterial
();
var
mesh
=
new
THREE
.
Mesh
(
geometry
,
material
);
mesh
.
name
=
'
Plane
'
+
(
++
meshCount
);
...
...
@@ -1184,7 +1184,7 @@
option
.
setTextContent
(
'
Box
'
);
option
.
onClick
(
function
()
{
var
geometry
=
new
THREE
.
BoxBufferGeometry
(
1
,
1
,
1
);
var
geometry
=
new
THREE
.
BoxBufferGeometry
(
1
,
1
,
1
,
1
,
1
,
1
);
var
mesh
=
new
THREE
.
Mesh
(
geometry
,
new
THREE
.
MeshStandardMaterial
()
);
mesh
.
name
=
'
Box
'
+
(
++
meshCount
);
...
...
@@ -1200,10 +1200,7 @@
option
.
setTextContent
(
'
Circle
'
);
option
.
onClick
(
function
()
{
var
radius
=
1
;
var
segments
=
32
;
var
geometry
=
new
THREE
.
CircleBufferGeometry
(
radius
,
segments
);
var
geometry
=
new
THREE
.
CircleBufferGeometry
(
1
,
8
,
0
,
Math
.
PI
*
2
);
var
mesh
=
new
THREE
.
Mesh
(
geometry
,
new
THREE
.
MeshStandardMaterial
()
);
mesh
.
name
=
'
Circle
'
+
(
++
meshCount
);
...
...
@@ -1219,14 +1216,7 @@
option
.
setTextContent
(
'
Cylinder
'
);
option
.
onClick
(
function
()
{
var
radiusTop
=
1
;
var
radiusBottom
=
1
;
var
height
=
2
;
var
radiusSegments
=
32
;
var
heightSegments
=
1
;
var
openEnded
=
false
;
var
geometry
=
new
THREE
.
CylinderBufferGeometry
(
radiusTop
,
radiusBottom
,
height
,
radiusSegments
,
heightSegments
,
openEnded
);
var
geometry
=
new
THREE
.
CylinderBufferGeometry
(
1
,
1
,
1
,
8
,
1
,
false
,
0
,
Math
.
PI
*
2
);
var
mesh
=
new
THREE
.
Mesh
(
geometry
,
new
THREE
.
MeshStandardMaterial
()
);
mesh
.
name
=
'
Cylinder
'
+
(
++
meshCount
);
...
...
@@ -1242,15 +1232,7 @@
option
.
setTextContent
(
'
Sphere
'
);
option
.
onClick
(
function
()
{
var
radius
=
1
;
var
widthSegments
=
32
;
var
heightSegments
=
16
;
var
phiStart
=
0
;
var
phiLength
=
Math
.
PI
*
2
;
var
thetaStart
=
0
;
var
thetaLength
=
Math
.
PI
;
var
geometry
=
new
THREE
.
SphereBufferGeometry
(
radius
,
widthSegments
,
heightSegments
,
phiStart
,
phiLength
,
thetaStart
,
thetaLength
);
var
geometry
=
new
THREE
.
SphereBufferGeometry
(
1
,
8
,
6
,
0
,
Math
.
PI
*
2
,
0
,
Math
.
PI
);
var
mesh
=
new
THREE
.
Mesh
(
geometry
,
new
THREE
.
MeshStandardMaterial
()
);
mesh
.
name
=
'
Sphere
'
+
(
++
meshCount
);
...
...
@@ -1266,10 +1248,7 @@
option
.
setTextContent
(
'
Icosahedron
'
);
option
.
onClick
(
function
()
{
var
radius
=
1
;
var
detail
=
2
;
var
geometry
=
new
THREE
.
IcosahedronGeometry
(
radius
,
detail
);
var
geometry
=
new
THREE
.
IcosahedronGeometry
(
1
,
0
);
var
mesh
=
new
THREE
.
Mesh
(
geometry
,
new
THREE
.
MeshStandardMaterial
()
);
mesh
.
name
=
'
Icosahedron
'
+
(
++
meshCount
);
...
...
@@ -1285,13 +1264,7 @@
option
.
setTextContent
(
'
Torus
'
);
option
.
onClick
(
function
()
{
var
radius
=
2
;
var
tube
=
1
;
var
radialSegments
=
32
;
var
tubularSegments
=
12
;
var
arc
=
Math
.
PI
*
2
;
var
geometry
=
new
THREE
.
TorusBufferGeometry
(
radius
,
tube
,
radialSegments
,
tubularSegments
,
arc
);
var
geometry
=
new
THREE
.
TorusBufferGeometry
(
1
,
0.4
,
8
,
6
,
Math
.
PI
*
2
);
var
mesh
=
new
THREE
.
Mesh
(
geometry
,
new
THREE
.
MeshStandardMaterial
()
);
mesh
.
name
=
'
Torus
'
+
(
++
meshCount
);
...
...
@@ -1307,14 +1280,7 @@
option
.
setTextContent
(
'
TorusKnot
'
);
option
.
onClick
(
function
()
{
var
radius
=
2
;
var
tube
=
0.8
;
var
tubularSegments
=
64
;
var
radialSegments
=
12
;
var
p
=
2
;
var
q
=
3
;
var
geometry
=
new
THREE
.
TorusKnotBufferGeometry
(
radius
,
tube
,
tubularSegments
,
radialSegments
,
p
,
q
);
var
geometry
=
new
THREE
.
TorusKnotBufferGeometry
(
1
,
0.4
,
64
,
8
,
2
,
3
);
var
mesh
=
new
THREE
.
Mesh
(
geometry
,
new
THREE
.
MeshStandardMaterial
()
);
mesh
.
name
=
'
TorusKnot
'
+
(
++
meshCount
);
...
...
@@ -1361,22 +1327,19 @@
var
points
=
[
new
THREE
.
Vector2
(
0
,
0
),
new
THREE
.
Vector2
(
4
,
0
),
new
THREE
.
Vector2
(
3.5
,
0.
5
),
new
THREE
.
Vector2
(
1
,
0.
75
),
new
THREE
.
Vector2
(
0.
8
,
1
),
new
THREE
.
Vector2
(
0.
8
,
4
),
new
THREE
.
Vector2
(
1
,
4.
2
),
new
THREE
.
Vector2
(
1.4
,
4.
8
),
new
THREE
.
Vector2
(
2
,
5
),
new
THREE
.
Vector2
(
2.5
,
5.
4
),
new
THREE
.
Vector2
(
3
,
1
2
)
new
THREE
.
Vector2
(
0.
4
,
0
),
new
THREE
.
Vector2
(
0.35
,
0.0
5
),
new
THREE
.
Vector2
(
0.1
,
0.0
75
),
new
THREE
.
Vector2
(
0.
08
,
0.
1
),
new
THREE
.
Vector2
(
0.
08
,
0.
4
),
new
THREE
.
Vector2
(
0.1
,
0.4
2
),
new
THREE
.
Vector2
(
0.14
,
0.4
8
),
new
THREE
.
Vector2
(
0.2
,
0.
5
),
new
THREE
.
Vector2
(
0.25
,
0.5
4
),
new
THREE
.
Vector2
(
0.3
,
1.
2
)
];
var
segments
=
20
;
var
phiStart
=
0
;
var
phiLength
=
2
*
Math
.
PI
;
var
geometry
=
new
THREE
.
LatheBufferGeometry
(
points
,
segments
,
phiStart
,
phiLength
);
var
geometry
=
new
THREE
.
LatheBufferGeometry
(
points
,
12
,
0
,
Math
.
PI
*
2
);
var
mesh
=
new
THREE
.
Mesh
(
geometry
,
new
THREE
.
MeshStandardMaterial
(
{
side
:
THREE
.
DoubleSide
}
)
);
mesh
.
name
=
'
Lathe
'
+
(
++
meshCount
);
...
...
@@ -2142,6 +2105,23 @@
content
=
content
.
replace
(
'
<!-- includes -->
'
,
includes
.
join
(
'
\n\t\t
'
)
);
var
editButton
=
''
;
if
(
editor
.
config
.
getKey
(
'
project/editable
'
)
)
{
editButton
=
`
var button = document.createElement( 'a' );
button.href = 'https://threejs.org/editor/#file=' + location.href.split( '/' ).slice( 0, - 1 ).join( '/' ) + '/app.json';
button.style.cssText = 'position: absolute; bottom: 20px; right: 20px; padding: 7px 10px 6px 10px; color: #fff; border: 1px solid #fff; text-decoration: none;';
button.target = '_blank';
button.textContent = 'EDIT';
document.body.appendChild( button );
`
;
}
content
=
content
.
replace
(
'
/* edit button */
'
,
editButton
);
zip
.
file
(
'
index.html
'
,
content
);
}
);
...
...
@@ -6381,13 +6361,26 @@
container
.
add
(
rendererPropertiesRow
);
// Editable
var
editableRow
=
new
UI
.
Row
();
var
editable
=
new
UI
.
Checkbox
(
config
.
getKey
(
'
project/editable
'
)
).
setLeft
(
'
100px
'
).
onChange
(
function
()
{
config
.
setKey
(
'
project/editable
'
,
this
.
getValue
()
);
}
);
editableRow
.
add
(
new
UI
.
Text
(
'
Editable
'
).
setWidth
(
'
90px
'
)
);
editableRow
.
add
(
editable
);
container
.
add
(
editableRow
);
// VR
var
vrRow
=
new
UI
.
Row
();
var
vr
=
new
UI
.
Checkbox
(
config
.
getKey
(
'
project/vr
'
)
).
setLeft
(
'
100px
'
).
onChange
(
function
()
{
config
.
setKey
(
'
project/vr
'
,
this
.
getValue
()
);
// updateRenderer();
}
);
...
...
test/unit/three.source.unit.js
浏览文件 @
59111f17
...
...
@@ -4,8 +4,6 @@
(factory());
}(this, (function () { 'use strict';
console.log("TADA");
QUnit.module( "Source", () => {
var REVISION = '88dev';
...
...
@@ -384,35 +382,37 @@
generateUUID: function () {
// http://www.broofa.com/Tools/Math.uuid.htm
// Replaced .join with string concatenation (@takahirox)
var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split( '' );
var uuid = new Array( 36 );
var rnd = 0, r;
return function generateUUID() {
var uuid = '';
for ( var i = 0; i < 36; i ++ ) {
if ( i === 8 || i === 13 || i === 18 || i === 23 ) {
uuid
[ i ]
= '-';
uuid
+
= '-';
} else if ( i === 14 ) {
uuid
[ i ]
= '4';
uuid
+
= '4';
} else {
if ( rnd <= 0x02 ) rnd = 0x2000000 + ( Math.random() * 0x1000000 ) | 0;
r = rnd & 0xf;
rnd = rnd >> 4;
uuid
[ i ]
= chars[ ( i === 19 ) ? ( r & 0x3 ) | 0x8 : r ];
uuid
+
= chars[ ( i === 19 ) ? ( r & 0x3 ) | 0x8 : r ];
}
}
return uuid
.join( '' )
;
return uuid;
};
...
...
@@ -2594,13 +2594,7 @@
}
var x = this.x, y = this.y, z = this.z;
this.x = y * v.z - z * v.y;
this.y = z * v.x - x * v.z;
this.z = x * v.y - y * v.x;
return this;
return this.crossVectors( this, v );
},
...
...
@@ -8883,23 +8877,23 @@
}(),
rotateOnWorldAxis: function () {
// rotate object on axis in world space
// axis is assumed to be normalized
// method assumes no rotated parent
var q1 = new Quaternion();
return function rotateOnWorldAxis( axis, angle ) {
q1.setFromAxisAngle( axis, angle );
this.quaternion.premultiply( q1 );
return this;
};
}(),
rotateX: function () {
...
...
@@ -12469,6 +12463,21 @@
},
setFromPoints: function ( points ) {
this.vertices = [];
for ( var i = 0, l = points.length; i < l; i ++ ) {
var point = points[ i ];
this.vertices.push( new Vector3( point.x, point.y, point.z || 0 ) );
}
return this;
},
sortFacesByMaterialIndex: function () {
var faces = this.faces;
...
...
@@ -14556,6 +14565,23 @@
},
setFromPoints: function ( points ) {
var position = [];
for ( var i = 0, l = points.length; i < l; i ++ ) {
var point = points[ i ];
position.push( point.x, point.y, point.z || 0 );
}
this.addAttribute( 'position', new Float32BufferAttribute( position, 3 ) );
return this;
},
updateFromObject: function ( object ) {
var geometry = object.geometry;
...
...
@@ -20902,7 +20928,10 @@
var scope = this;
var isLoading = false, itemsLoaded = 0, itemsTotal = 0;
var isLoading = false;
var itemsLoaded = 0;
var itemsTotal = 0;
var urlModifier = undefined;
this.onStart = undefined;
this.onLoad = onLoad;
...
...
@@ -20961,6 +20990,24 @@
};
this.resolveURL = function ( url ) {
if ( urlModifier ) {
return urlModifier( url );
}
return url;
};
this.setURLModifier = function ( transform ) {
urlModifier = transform;
};
}
var DefaultLoadingManager = new LoadingManager();
...
...
@@ -20969,6 +21016,8 @@
* @author mrdoob / http://mrdoob.com/
*/
var loading = {};
function FileLoader( manager ) {
this.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;
...
...
@@ -20983,6 +21032,8 @@
if ( this.path !== undefined ) url = this.path + url;
url = this.manager.resolveURL( url );
var scope = this;
var cached = Cache.get( url );
...
...
@@ -21003,6 +21054,22 @@
}
// Check if request is duplicate
if ( loading[ url ] !== undefined ) {
loading[ url ].push( {
onLoad: onLoad,
onProgress: onProgress,
onError: onError
} );
return;
}
// Check for data: URI
var dataUriRegex = /^data:(.*?)(;base64)?,(.*)$/;
var dataUriRegexResult = url.match( dataUriRegex );
...
...
@@ -21094,7 +21161,20 @@
} else {
// Initialise array for duplicate requests
loading[ url ] = [];
loading[ url ].push( {
onLoad: onLoad,
onProgress: onProgress,
onError: onError
} );
var request = new XMLHttpRequest();
request.open( 'GET', url, true );
request.addEventListener( 'load', function ( event ) {
...
...
@@ -21103,9 +21183,18 @@
Cache.add( url, response );
var callbacks = loading[ url ];
delete loading[ url ];
if ( this.status === 200 ) {
if ( onLoad ) onLoad( response );
for ( var i = 0, il = callbacks.length; i < il; i ++ ) {
var callback = callbacks[ i ];
if ( callback.onLoad ) callback.onLoad( response );
}
scope.manager.itemEnd( url );
...
...
@@ -21116,13 +21205,23 @@
console.warn( 'THREE.FileLoader: HTTP Status 0 received.' );
if ( onLoad ) onLoad( response );
for ( var i = 0, il = callbacks.length; i < il; i ++ ) {
var callback = callbacks[ i ];
if ( callback.onLoad ) callback.onLoad( response );
}
scope.manager.itemEnd( url );
} else {
if ( onError ) onError( event );
for ( var i = 0, il = callbacks.length; i < il; i ++ ) {
var callback = callbacks[ i ];
if ( callback.onError ) callback.onError( event );
}
scope.manager.itemEnd( url );
scope.manager.itemError( url );
...
...
@@ -21131,19 +21230,31 @@
}, false );
if ( onProgress !== undefined
) {
request.addEventListener( 'progress', function ( event
) {
request.addEventListener( 'progress', function ( event ) {
var callbacks = loading[ url ];
onProgress( event );
for ( var i = 0, il = callbacks.length; i < il; i ++ ) {
}, false );
var callback = callbacks[ i ];
if ( callback.onProgress ) callback.onProgress( event );
}
}
}, false );
request.addEventListener( 'error', function ( event ) {
if ( onError ) onError( event );
var callbacks = loading[ url ];
delete loading[ url ];
for ( var i = 0, il = callbacks.length; i < il; i ++ ) {
var callback = callbacks[ i ];
if ( callback.onError ) callback.onError( event );
}
scope.manager.itemEnd( url );
scope.manager.itemError( url );
...
...
@@ -22629,6 +22740,8 @@
if ( this.path !== undefined ) url = this.path + url;
url = this.manager.resolveURL( url );
var scope = this;
var cached = Cache.get( url );
...
...
@@ -28010,7 +28123,7 @@
thetaLength: thetaLength
};
radius = radius ||
50
;
radius = radius ||
1
;
widthSegments = Math.max( 3, Math.floor( widthSegments ) || 8 );
heightSegments = Math.max( 2, Math.floor( heightSegments ) || 6 );
...
...
@@ -29182,6 +29295,8 @@
function Curve() {
this.type = 'Curve';
this.arcLengthDivisions = 200;
}
...
...
@@ -29519,6 +29634,20 @@
binormals: binormals
};
},
clone: function () {
return new this.constructor().copy( this );
},
copy: function ( source ) {
this.arcLengthDivisions = source.arcLengthDivisions;
return this;
}
} );
...
...
@@ -29618,8 +29747,10 @@
Curve.call( this );
this.v1 = v1;
this.v2 = v2;
this.type = 'LineCurve';
this.v1 = v1 || new Vector2();
this.v2 = v2 || new Vector2();
}
...
...
@@ -29663,6 +29794,17 @@
};
LineCurve.prototype.copy = function ( source ) {
Curve.prototype.copy.call( this, source );
this.v1.copy( source.v1 );
this.v2.copy( source.v2 );
return this;
};
/**
* @author zz85 / http://www.lab4games.net/zz85/blog
*
...
...
@@ -29677,8 +29819,9 @@
Curve.call( this );
this.
curves = []
;
this.
type = 'CurvePath'
;
this.curves = [];
this.autoClose = false; // Automatically closes the path
}
...
...
@@ -29858,43 +30001,6 @@
return points;
},
/**************************************************************
* Create Geometries Helpers
**************************************************************/
/// Generate geometry from path points (for Line or Points objects)
createPointsGeometry: function ( divisions ) {
var pts = this.getPoints( divisions );
return this.createGeometry( pts );
},
// Generate geometry from equidistant sampling along the path
createSpacedPointsGeometry: function ( divisions ) {
var pts = this.getSpacedPoints( divisions );
return this.createGeometry( pts );
},
createGeometry: function ( points ) {
var geometry = new Geometry();
for ( var i = 0, l = points.length; i < l; i ++ ) {
var point = points[ i ];
geometry.vertices.push( new Vector3( point.x, point.y, point.z || 0 ) );
}
return geometry;
}
} );
...
...
@@ -30081,16 +30187,18 @@
Curve.call( this );
this.aX = aX;
this.aY = aY;
this.type = 'EllipseCurve';
this.aX = aX || 0;
this.aY = aY || 0;
this.xRadius = xRadius;
this.yRadius = yRadius;
this.xRadius = xRadius
|| 1
;
this.yRadius = yRadius
|| 1
;
this.aStartAngle = aStartAngle;
this.aEndAngle = aEndAngle;
this.aStartAngle = aStartAngle
|| 0
;
this.aEndAngle = aEndAngle
|| 2 * Math.PI
;
this.aClockwise = aClockwise;
this.aClockwise = aClockwise
|| false
;
this.aRotation = aRotation || 0;
...
...
@@ -30163,11 +30271,34 @@
};
EllipseCurve.prototype.copy = function ( source ) {
Curve.prototype.copy.call( this, source );
this.aX = source.aX;
this.aY = source.aY;
this.xRadius = source.xRadius;
this.yRadius = source.yRadius;
this.aStartAngle = source.aStartAngle;
this.aEndAngle = source.aEndAngle;
this.aClockwise = source.aClockwise;
this.aRotation = source.aRotation;
return this;
};
function SplineCurve( points /* array of Vector2 */ ) {
Curve.call( this );
this.points = ( points === undefined ) ? [] : points;
this.type = 'SplineCurve';
this.points = points || [];
}
...
...
@@ -30200,14 +30331,34 @@
};
SplineCurve.prototype.copy = function ( source ) {
Curve.prototype.copy.call( this, source );
this.points = [];
for ( var i = 0, l = source.points.length; i < l; i ++ ) {
var point = source.points[ i ];
this.points.push( point.clone() );
}
return this;
};
function CubicBezierCurve( v0, v1, v2, v3 ) {
Curve.call( this );
this.v0 = v0;
this.v1 = v1;
this.v2 = v2;
this.v3 = v3;
this.type = 'CubicBezierCurve';
this.v0 = v0 || new Vector2();
this.v1 = v1 || new Vector2();
this.v2 = v2 || new Vector2();
this.v3 = v3 || new Vector2();
}
...
...
@@ -30231,13 +30382,28 @@
};
CubicBezierCurve.prototype.copy = function ( source ) {
Curve.prototype.copy.call( this, source );
this.v0.copy( source.v0 );
this.v1.copy( source.v1 );
this.v2.copy( source.v2 );
this.v3.copy( source.v3 );
return this;
};
function QuadraticBezierCurve( v0, v1, v2 ) {
Curve.call( this );
this.v0 = v0;
this.v1 = v1;
this.v2 = v2;
this.type = 'QuadraticBezierCurve';
this.v0 = v0 || new Vector2();
this.v1 = v1 || new Vector2();
this.v2 = v2 || new Vector2();
}
...
...
@@ -30261,6 +30427,18 @@
};
QuadraticBezierCurve.prototype.copy = function ( source ) {
Curve.prototype.copy.call( this, source );
this.v0.copy( source.v0 );
this.v1.copy( source.v1 );
this.v2.copy( source.v2 );
return this;
};
var PathPrototype = Object.assign( Object.create( CurvePath.prototype ), {
fromPoints: function ( vectors ) {
...
...
@@ -30389,6 +30567,9 @@
function Path( points ) {
CurvePath.call( this );
this.type = 'Path';
this.currentPoint = new Vector2();
if ( points ) {
...
...
@@ -30417,6 +30598,8 @@
Path.apply( this, arguments );
this.type = 'Shape';
this.holes = [];
}
...
...
@@ -30467,6 +30650,8 @@
function ShapePath() {
this.type = 'ShapePath';
this.subPaths = [];
this.currentPath = null;
...
...
@@ -30742,6 +30927,8 @@
function Font( data ) {
this.type = 'Font';
this.data = data;
}
...
...
@@ -31329,14 +31516,16 @@
var py = new CubicPoly();
var pz = new CubicPoly();
function CatmullRomCurve3( points ) {
function CatmullRomCurve3( points
, closed, curveType, tension
) {
Curve.call( this );
if ( points.length < 2 ) console.warn( 'THREE.CatmullRomCurve3: Points array needs at least two entries.' )
;
this.type = 'CatmullRomCurve3'
;
this.points = points || [];
this.closed = false;
this.closed = closed || false;
this.curveType = curveType || 'centripetal';
this.tension = tension || 0.5;
}
...
...
@@ -31396,10 +31585,10 @@
}
if ( this.
type === undefined || this.type === 'centripetal' || this.t
ype === 'chordal' ) {
if ( this.
curveType === 'centripetal' || this.curveT
ype === 'chordal' ) {
// init Centripetal / Chordal Catmull-Rom
var pow = this.
t
ype === 'chordal' ? 0.5 : 0.25;
var pow = this.
curveT
ype === 'chordal' ? 0.5 : 0.25;
var dt0 = Math.pow( p0.distanceToSquared( p1 ), pow );
var dt1 = Math.pow( p1.distanceToSquared( p2 ), pow );
var dt2 = Math.pow( p2.distanceToSquared( p3 ), pow );
...
...
@@ -31413,12 +31602,11 @@
py.initNonuniformCatmullRom( p0.y, p1.y, p2.y, p3.y, dt0, dt1, dt2 );
pz.initNonuniformCatmullRom( p0.z, p1.z, p2.z, p3.z, dt0, dt1, dt2 );
} else if ( this.
t
ype === 'catmullrom' ) {
} else if ( this.
curveT
ype === 'catmullrom' ) {
var tension = this.tension !== undefined ? this.tension : 0.5;
px.initCatmullRom( p0.x, p1.x, p2.x, p3.x, tension );
py.initCatmullRom( p0.y, p1.y, p2.y, p3.y, tension );
pz.initCatmullRom( p0.z, p1.z, p2.z, p3.z, tension );
px.initCatmullRom( p0.x, p1.x, p2.x, p3.x, this.tension );
py.initCatmullRom( p0.y, p1.y, p2.y, p3.y, this.tension );
pz.initCatmullRom( p0.z, p1.z, p2.z, p3.z, this.tension );
}
...
...
@@ -31432,6 +31620,28 @@
};
CatmullRomCurve3.prototype.copy = function ( source ) {
Curve.prototype.copy.call( this, source );
this.points = [];
for ( var i = 0, l = source.points.length; i < l; i ++ ) {
var point = source.points[ i ];
this.points.push( point.clone() );
}
this.closed = source.closed;
this.curveType = source.curveType;
this.tension = source.tension;
return this;
};
/**
* @author zz85 / http://joshuakoo.com
* @author TristanVALCKE / https://github.com/Itee
...
...
@@ -32038,10 +32248,12 @@
Curve.call( this );
this.v0 = v0;
this.v1 = v1;
this.v2 = v2;
this.v3 = v3;
this.type = 'CubicBezierCurve3';
this.v0 = v0 || new Vector3();
this.v1 = v1 || new Vector3();
this.v2 = v2 || new Vector3();
this.v3 = v3 || new Vector3();
}
...
...
@@ -32066,6 +32278,19 @@
};
CubicBezierCurve3.prototype.copy = function ( source ) {
Curve.prototype.copy.call( this, source );
this.v0.copy( source.v0 );
this.v1.copy( source.v1 );
this.v2.copy( source.v2 );
this.v3.copy( source.v3 );
return this;
};
/**
* @author TristanVALCKE / https://github.com/Itee
* @author moraxy / https://github.com/moraxy
...
...
@@ -32716,8 +32941,10 @@
Curve.call( this );
this.v1 = v1;
this.v2 = v2;
this.type = 'LineCurve3';
this.v1 = v1 || new Vector3();
this.v2 = v2 || new Vector3();
}
...
...
@@ -32753,6 +32980,17 @@
};
LineCurve3.prototype.copy = function ( source ) {
Curve.prototype.copy.call( this, source );
this.v1.copy( source.v1 );
this.v2.copy( source.v2 );
return this;
};
/**
* @author TristanVALCKE / https://github.com/Itee
*/
...
...
@@ -33207,9 +33445,11 @@
Curve.call( this );
this.v0 = v0;
this.v1 = v1;
this.v2 = v2;
this.type = 'QuadraticBezierCurve3';
this.v0 = v0 || new Vector3();
this.v1 = v1 || new Vector3();
this.v2 = v2 || new Vector3();
}
...
...
@@ -33234,6 +33474,18 @@
};
QuadraticBezierCurve3.prototype.copy = function ( source ) {
Curve.prototype.copy.call( this, source );
this.v0.copy( source.v0 );
this.v1.copy( source.v1 );
this.v2.copy( source.v2 );
return this;
};
/**
* @author TristanVALCKE / https://github.com/Itee
*/
...
...
@@ -33873,7 +34125,7 @@
thetaLength: thetaLength
};
radius = radius ||
50
;
radius = radius ||
1
;
segments = segments !== undefined ? Math.max( 3, segments ) : 8;
thetaStart = thetaStart !== undefined ? thetaStart : 0;
...
...
@@ -34095,16 +34347,16 @@
var scope = this;
radiusTop = radiusTop !== undefined ? radiusTop :
20
;
radiusBottom = radiusBottom !== undefined ? radiusBottom :
20
;
height = height
!== undefined ? height : 100
;
radiusTop = radiusTop !== undefined ? radiusTop :
1
;
radiusBottom = radiusBottom !== undefined ? radiusBottom :
1
;
height = height
|| 1
;
radialSegments = Math.floor( radialSegments ) || 8;
heightSegments = Math.floor( heightSegments ) || 1;
openEnded = openEnded !== undefined ? openEnded : false;
thetaStart = thetaStart !== undefined ? thetaStart : 0.0;
thetaLength = thetaLength !== undefined ? thetaLength :
2.0 * Math.PI
;
thetaLength = thetaLength !== undefined ? thetaLength :
Math.PI * 2
;
// buffers
...
...
@@ -35847,7 +36099,7 @@
var tonemapping_fragment = "#if defined( TONE_MAPPING )\r\n\r\n gl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\r\n\r\n#endif\r\n";
var tonemapping_pars_fragment = "#
define saturate(a) clamp( a, 0.0, 1.0 )
\r\n\r\nuniform float toneMappingExposure;\r\nuniform float toneMappingWhitePoint;\r\n\r\n// exposure only\r\nvec3 LinearToneMapping( vec3 color ) {\r\n\r\n\treturn toneMappingExposure * color;\r\n\r\n}\r\n\r\n// source: https://www.cs.utah.edu/~reinhard/cdrom/\r\nvec3 ReinhardToneMapping( vec3 color ) {\r\n\r\n\tcolor *= toneMappingExposure;\r\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\r\n\r\n}\r\n\r\n// source: http://filmicgames.com/archives/75\r\n#define Uncharted2Helper( x ) max( ( ( x * ( 0.15 * x + 0.10 * 0.50 ) + 0.20 * 0.02 ) / ( x * ( 0.15 * x + 0.50 ) + 0.20 * 0.30 ) ) - 0.02 / 0.30, vec3( 0.0 ) )\r\nvec3 Uncharted2ToneMapping( vec3 color ) {\r\n\r\n\t// John Hable's filmic operator from Uncharted 2 video game\r\n\tcolor *= toneMappingExposure;\r\n\treturn saturate( Uncharted2Helper( color ) / Uncharted2Helper( vec3( toneMappingWhitePoint ) ) );\r\n\r\n}\r\n\r\n// source: http://filmicgames.com/archives/75\r\nvec3 OptimizedCineonToneMapping( vec3 color ) {\r\n\r\n\t// optimized filmic operator by Jim Hejl and Richard Burgess-Dawson\r\n\tcolor *= toneMappingExposure;\r\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\r\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\r\n\r\n}\r\n";
var tonemapping_pars_fragment = "#
ifndef saturate\r\n\t#define saturate(a) clamp( a, 0.0, 1.0 )\r\n#endif
\r\n\r\nuniform float toneMappingExposure;\r\nuniform float toneMappingWhitePoint;\r\n\r\n// exposure only\r\nvec3 LinearToneMapping( vec3 color ) {\r\n\r\n\treturn toneMappingExposure * color;\r\n\r\n}\r\n\r\n// source: https://www.cs.utah.edu/~reinhard/cdrom/\r\nvec3 ReinhardToneMapping( vec3 color ) {\r\n\r\n\tcolor *= toneMappingExposure;\r\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\r\n\r\n}\r\n\r\n// source: http://filmicgames.com/archives/75\r\n#define Uncharted2Helper( x ) max( ( ( x * ( 0.15 * x + 0.10 * 0.50 ) + 0.20 * 0.02 ) / ( x * ( 0.15 * x + 0.50 ) + 0.20 * 0.30 ) ) - 0.02 / 0.30, vec3( 0.0 ) )\r\nvec3 Uncharted2ToneMapping( vec3 color ) {\r\n\r\n\t// John Hable's filmic operator from Uncharted 2 video game\r\n\tcolor *= toneMappingExposure;\r\n\treturn saturate( Uncharted2Helper( color ) / Uncharted2Helper( vec3( toneMappingWhitePoint ) ) );\r\n\r\n}\r\n\r\n// source: http://filmicgames.com/archives/75\r\nvec3 OptimizedCineonToneMapping( vec3 color ) {\r\n\r\n\t// optimized filmic operator by Jim Hejl and Richard Burgess-Dawson\r\n\tcolor *= toneMappingExposure;\r\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\r\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\r\n\r\n}\r\n";
var uv_pars_fragment = "#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\r\n\r\n\tvarying vec2 vUv;\r\n\r\n#endif";
...
...
@@ -43129,7 +43381,7 @@
// Clearing
this.getClearColor = function() {
this.getClearColor = function
() {
return background.getClearColor();
...
...
@@ -43141,13 +43393,13 @@
};
this.getClearAlpha = function() {
this.getClearAlpha = function
() {
return background.getClearAlpha();
};
this.setClearAlpha = function() {
this.setClearAlpha = function
() {
background.setClearAlpha.apply( background, arguments );
...
...
@@ -43716,7 +43968,19 @@
function start() {
if ( isAnimating ) return;
( vr.getDevice() || window ).requestAnimationFrame( loop );
var device = vr.getDevice();
if ( device && device.isPresenting ) {
device.requestAnimationFrame( loop );
} else {
window.requestAnimationFrame( loop );
}
isAnimating = true;
}
...
...
@@ -43724,7 +43988,18 @@
function loop( time ) {
if ( onAnimationFrame !== null ) onAnimationFrame( time );
( vr.getDevice() || window ).requestAnimationFrame( loop );
var device = vr.getDevice();
if ( device && device.isPresenting ) {
device.requestAnimationFrame( loop );
} else {
window.requestAnimationFrame( loop );
}
}
...
...
@@ -47425,8 +47700,8 @@
thetaLength: thetaLength
};
innerRadius = innerRadius ||
20
;
outerRadius = outerRadius ||
50
;
innerRadius = innerRadius ||
0.5
;
outerRadius = outerRadius ||
1
;
thetaStart = thetaStart !== undefined ? thetaStart : 0;
thetaLength = thetaLength !== undefined ? thetaLength : Math.PI * 2;
...
...
@@ -48352,8 +48627,8 @@
arc: arc
};
radius = radius || 1
00
;
tube = tube ||
40
;
radius = radius || 1;
tube = tube ||
0.4
;
radialSegments = Math.floor( radialSegments ) || 8;
tubularSegments = Math.floor( tubularSegments ) || 6;
arc = arc || Math.PI * 2;
...
...
@@ -48596,8 +48871,8 @@
q: q
};
radius = radius || 1
00
;
tube = tube ||
40
;
radius = radius || 1;
tube = tube ||
0.4
;
tubularSegments = Math.floor( tubularSegments ) || 64;
radialSegments = Math.floor( radialSegments ) || 8;
p = p || 2;
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录