Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Ablesons
three.js
提交
3163b797
T
three.js
项目概览
Ablesons
/
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,发现更多精彩内容 >>
提交
3163b797
编写于
11月 30, 2011
作者:
A
alteredq
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Added name copying to GeometryUtils.cloneObject (thanks to @C4RL05)
上级
36338eee
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
6 addition
and
4 deletion
+6
-4
build/Three.js
build/Three.js
+2
-2
build/custom/ThreeExtras.js
build/custom/ThreeExtras.js
+2
-2
src/extras/SceneUtils.js
src/extras/SceneUtils.js
+2
-0
未找到文件。
build/Three.js
浏览文件 @
3163b797
...
...
@@ -361,8 +361,8 @@ Math.sqrt(a[0]*a[0]+a[1]*a[1]+a[2]*a[2]);return[a[0]/b,a[1]/b,a[2]/b]};b|=1;var
THREE
.
SceneUtils
=
{
showHierarchy
:
function
(
a
,
b
){
THREE
.
SceneUtils
.
traverseHierarchy
(
a
,
function
(
a
){
a
.
visible
=
b
})},
traverseHierarchy
:
function
(
a
,
b
){
var
c
,
d
,
e
=
a
.
children
.
length
;
for
(
d
=
0
;
d
<
e
;
d
++
)
c
=
a
.
children
[
d
],
b
(
c
),
THREE
.
SceneUtils
.
traverseHierarchy
(
c
,
b
)},
createMultiMaterialObject
:
function
(
a
,
b
){
var
c
,
d
=
b
.
length
,
e
=
new
THREE
.
Object3D
;
for
(
c
=
0
;
c
<
d
;
c
++
){
var
f
=
new
THREE
.
Mesh
(
a
,
b
[
c
]);
e
.
add
(
f
)}
return
e
},
cloneObject
:
function
(
a
){
var
b
;
a
instanceof
THREE
.
MorphAnimMesh
?(
b
=
new
THREE
.
MorphAnimMesh
(
a
.
geometry
,
a
.
material
),
b
.
duration
=
a
.
duration
,
b
.
mirroredLoop
=
a
.
mirroredLoop
,
b
.
time
=
a
.
time
,
b
.
lastKeyframe
=
a
.
lastKeyframe
,
b
.
currentKeyframe
=
a
.
currentKeyframe
,
b
.
direction
=
a
.
direction
,
b
.
directionBackwards
=
a
.
directionBackwards
):
a
instanceof
THREE
.
SkinnedMesh
?
b
=
new
THREE
.
SkinnedMesh
(
a
.
geometry
,
a
.
material
):
a
instanceof
THREE
.
Mesh
?
b
=
new
THREE
.
Mesh
(
a
.
geometry
,
a
.
material
):
a
instanceof
THREE
.
Line
?
b
=
new
THREE
.
Line
(
a
.
geometry
,
a
.
material
,
a
.
type
):
a
instanceof
THREE
.
Ribbon
?
b
=
new
THREE
.
Ribbon
(
a
.
geometry
,
a
.
material
):
a
instanceof
THREE
.
ParticleSystem
?
(
b
=
new
THREE
.
ParticleSystem
(
a
.
geometry
,
a
.
material
),
b
.
sortParticles
=
a
.
sortParticles
):
a
instanceof
THREE
.
Particle
?
b
=
new
THREE
.
Particle
(
a
.
material
):
a
instanceof
THREE
.
Sprite
?(
b
=
new
THREE
.
Sprite
({}),
b
.
color
.
copy
(
a
.
color
),
b
.
map
=
a
.
map
,
b
.
blending
=
a
.
blending
,
b
.
useScreenCoordinates
=
a
.
useScreenCoordinates
,
b
.
mergeWith3D
=
a
.
mergeWith3D
,
b
.
affectedByDistance
=
a
.
affectedByDistance
,
b
.
scaleByViewport
=
a
.
scaleByViewport
,
b
.
alignment
=
a
.
alignment
,
b
.
rotation3d
.
copy
(
a
.
rotation3d
),
b
.
rotation
=
a
.
rotation
,
b
.
opacity
=
a
.
opacity
,
b
.
uvOffset
.
copy
(
a
.
uvOffset
),
b
.
uvScale
.
copy
(
a
.
uvScale
)):
a
instanceof
THREE
.
LOD
?
b
=
new
THREE
.
LOD
:
a
instanceof
THREE
.
MarchingCubes
?(
b
=
new
THREE
.
MarchingCubes
(
a
.
resolution
,
a
.
material
),
b
.
field
.
set
(
a
.
field
),
b
.
isolation
=
a
.
isolation
):
a
instanceof
THREE
.
Object3D
&&
(
b
=
new
THREE
.
Object3D
);
b
.
parent
=
a
.
parent
;
b
.
up
.
copy
(
a
.
up
);
b
.
position
.
copy
(
a
.
position
);
b
.
rotation
instanceof
THREE
.
Vector3
&&
b
.
rotation
.
copy
(
a
.
rotation
);
b
.
eulerOrder
=
a
.
eulerOrder
;
b
.
scale
.
copy
(
a
.
scale
);
b
.
dynamic
=
a
.
dynamic
;
b
.
doubleSided
=
a
.
doubleSided
;
b
.
flipSided
=
a
.
flipSided
;
b
.
renderDepth
=
a
.
renderDepth
;
b
.
rotationAutoUpdate
=
a
.
rotationAutoUpdate
;
b
.
matrix
.
copy
(
a
.
matrix
);
b
.
matrixWorld
.
copy
(
a
.
matrixWorld
);
b
.
matrixRotationWorld
.
copy
(
a
.
matrixRotationWorld
);
b
.
matrixAutoUpdate
=
a
.
matrixAutoUpdate
;
b
.
matrixWorldNeedsUpdate
=
a
.
matrixWorldNeedsUpdate
;
b
.
quaternion
.
copy
(
a
.
quaternion
);
b
.
useQuaternion
=
a
.
useQuaternion
;
b
.
boundRadius
=
a
.
boundRadius
;
b
.
boundRadiusScale
=
a
.
boundRadiusScale
;
b
.
visible
=
a
.
visible
;
b
.
castShadow
=
a
.
castShadow
;
b
.
receiveShadow
=
a
.
receiveShadow
;
b
.
frustumCulled
=
b
.
uvOffset
.
copy
(
a
.
uvOffset
),
b
.
uvScale
.
copy
(
a
.
uvScale
)):
a
instanceof
THREE
.
LOD
?
b
=
new
THREE
.
LOD
:
a
instanceof
THREE
.
MarchingCubes
?(
b
=
new
THREE
.
MarchingCubes
(
a
.
resolution
,
a
.
material
),
b
.
field
.
set
(
a
.
field
),
b
.
isolation
=
a
.
isolation
):
a
instanceof
THREE
.
Object3D
&&
(
b
=
new
THREE
.
Object3D
);
b
.
name
=
a
.
name
;
b
.
parent
=
a
.
parent
;
b
.
up
.
copy
(
a
.
up
);
b
.
position
.
copy
(
a
.
position
);
b
.
rotation
instanceof
THREE
.
Vector3
&&
b
.
rotation
.
copy
(
a
.
rotation
);
b
.
eulerOrder
=
a
.
eulerOrder
;
b
.
scale
.
copy
(
a
.
scale
);
b
.
dynamic
=
a
.
dynamic
;
b
.
doubleSided
=
a
.
doubleSided
;
b
.
flipSided
=
a
.
flipSided
;
b
.
renderDepth
=
a
.
renderDepth
;
b
.
rotationAutoUpdate
=
a
.
rotationAutoUpdate
;
b
.
matrix
.
copy
(
a
.
matrix
);
b
.
matrixWorld
.
copy
(
a
.
matrixWorld
);
b
.
matrixRotationWorld
.
copy
(
a
.
matrixRotationWorld
);
b
.
matrixAutoUpdate
=
a
.
matrixAutoUpdate
;
b
.
matrixWorldNeedsUpdate
=
a
.
matrixWorldNeedsUpdate
;
b
.
quaternion
.
copy
(
a
.
quaternion
);
b
.
useQuaternion
=
a
.
useQuaternion
;
b
.
boundRadius
=
a
.
boundRadius
;
b
.
boundRadiusScale
=
a
.
boundRadiusScale
;
b
.
visible
=
a
.
visible
;
b
.
castShadow
=
a
.
castShadow
;
b
.
receiveShadow
=
a
.
receiveShadow
;
b
.
frustumCulled
=
a
.
frustumCulled
;
for
(
var
c
=
0
;
c
<
a
.
children
.
length
;
c
++
){
var
d
=
THREE
.
SceneUtils
.
cloneObject
(
a
.
children
[
c
]);
b
.
children
[
c
]
=
d
;
d
.
parent
=
b
}
if
(
a
instanceof
THREE
.
LOD
)
for
(
c
=
0
;
c
<
a
.
LODs
.
length
;
c
++
)
b
.
LODs
[
c
]
=
{
visibleAtDistance
:
a
.
LODs
[
c
].
visibleAtDistance
,
object3D
:
b
.
children
[
c
]};
return
b
}};
if
(
THREE
.
WebGLRenderer
)
THREE
.
ShaderUtils
=
{
lib
:{
fresnel
:{
uniforms
:{
mRefractionRatio
:{
type
:
"
f
"
,
value
:
1.02
},
mFresnelBias
:{
type
:
"
f
"
,
value
:
0.1
},
mFresnelPower
:{
type
:
"
f
"
,
value
:
2
},
mFresnelScale
:{
type
:
"
f
"
,
value
:
1
},
tCube
:{
type
:
"
t
"
,
value
:
1
,
texture
:
null
}},
fragmentShader
:
"
uniform samplerCube tCube;
\n
varying vec3 vReflect;
\n
varying vec3 vRefract[3];
\n
varying float vReflectionFactor;
\n
void main() {
\n
vec4 reflectedColor = textureCube( tCube, vec3( -vReflect.x, vReflect.yz ) );
\n
vec4 refractedColor = vec4( 1.0, 1.0, 1.0, 1.0 );
\n
refractedColor.r = textureCube( tCube, vec3( -vRefract[0].x, vRefract[0].yz ) ).r;
\n
refractedColor.g = textureCube( tCube, vec3( -vRefract[1].x, vRefract[1].yz ) ).g;
\n
refractedColor.b = textureCube( tCube, vec3( -vRefract[2].x, vRefract[2].yz ) ).b;
\n
refractedColor.a = 1.0;
\n
gl_FragColor = mix( refractedColor, reflectedColor, clamp( vReflectionFactor, 0.0, 1.0 ) );
\n
}
"
,
vertexShader
:
"
uniform float mRefractionRatio;
\n
uniform float mFresnelBias;
\n
uniform float mFresnelScale;
\n
uniform float mFresnelPower;
\n
varying vec3 vReflect;
\n
varying vec3 vRefract[3];
\n
varying float vReflectionFactor;
\n
void main() {
\n
vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );
\n
vec4 mPosition = objectMatrix * vec4( position, 1.0 );
\n
vec3 nWorld = normalize ( mat3( objectMatrix[0].xyz, objectMatrix[1].xyz, objectMatrix[2].xyz ) * normal );
\n
vec3 I = mPosition.xyz - cameraPosition;
\n
vReflect = reflect( I, nWorld );
\n
vRefract[0] = refract( normalize( I ), nWorld, mRefractionRatio );
\n
vRefract[1] = refract( normalize( I ), nWorld, mRefractionRatio * 0.99 );
\n
vRefract[2] = refract( normalize( I ), nWorld, mRefractionRatio * 0.98 );
\n
vReflectionFactor = mFresnelBias + mFresnelScale * pow( 1.0 + dot( normalize( I ), nWorld ), mFresnelPower );
\n
gl_Position = projectionMatrix * mvPosition;
\n
}
"
},
...
...
build/custom/ThreeExtras.js
浏览文件 @
3163b797
...
...
@@ -18,8 +18,8 @@ Math.sqrt(a[0]*a[0]+a[1]*a[1]+a[2]*a[2]);return[a[0]/b,a[1]/b,a[2]/b]};b|=1;var
THREE
.
SceneUtils
=
{
showHierarchy
:
function
(
a
,
b
){
THREE
.
SceneUtils
.
traverseHierarchy
(
a
,
function
(
a
){
a
.
visible
=
b
})},
traverseHierarchy
:
function
(
a
,
b
){
var
c
,
d
,
e
=
a
.
children
.
length
;
for
(
d
=
0
;
d
<
e
;
d
++
)
c
=
a
.
children
[
d
],
b
(
c
),
THREE
.
SceneUtils
.
traverseHierarchy
(
c
,
b
)},
createMultiMaterialObject
:
function
(
a
,
b
){
var
c
,
d
=
b
.
length
,
e
=
new
THREE
.
Object3D
;
for
(
c
=
0
;
c
<
d
;
c
++
){
var
g
=
new
THREE
.
Mesh
(
a
,
b
[
c
]);
e
.
add
(
g
)}
return
e
},
cloneObject
:
function
(
a
){
var
b
;
a
instanceof
THREE
.
MorphAnimMesh
?(
b
=
new
THREE
.
MorphAnimMesh
(
a
.
geometry
,
a
.
material
),
b
.
duration
=
a
.
duration
,
b
.
mirroredLoop
=
a
.
mirroredLoop
,
b
.
time
=
a
.
time
,
b
.
lastKeyframe
=
a
.
lastKeyframe
,
b
.
currentKeyframe
=
a
.
currentKeyframe
,
b
.
direction
=
a
.
direction
,
b
.
directionBackwards
=
a
.
directionBackwards
):
a
instanceof
THREE
.
SkinnedMesh
?
b
=
new
THREE
.
SkinnedMesh
(
a
.
geometry
,
a
.
material
):
a
instanceof
THREE
.
Mesh
?
b
=
new
THREE
.
Mesh
(
a
.
geometry
,
a
.
material
):
a
instanceof
THREE
.
Line
?
b
=
new
THREE
.
Line
(
a
.
geometry
,
a
.
material
,
a
.
type
):
a
instanceof
THREE
.
Ribbon
?
b
=
new
THREE
.
Ribbon
(
a
.
geometry
,
a
.
material
):
a
instanceof
THREE
.
ParticleSystem
?
(
b
=
new
THREE
.
ParticleSystem
(
a
.
geometry
,
a
.
material
),
b
.
sortParticles
=
a
.
sortParticles
):
a
instanceof
THREE
.
Particle
?
b
=
new
THREE
.
Particle
(
a
.
material
):
a
instanceof
THREE
.
Sprite
?(
b
=
new
THREE
.
Sprite
({}),
b
.
color
.
copy
(
a
.
color
),
b
.
map
=
a
.
map
,
b
.
blending
=
a
.
blending
,
b
.
useScreenCoordinates
=
a
.
useScreenCoordinates
,
b
.
mergeWith3D
=
a
.
mergeWith3D
,
b
.
affectedByDistance
=
a
.
affectedByDistance
,
b
.
scaleByViewport
=
a
.
scaleByViewport
,
b
.
alignment
=
a
.
alignment
,
b
.
rotation3d
.
copy
(
a
.
rotation3d
),
b
.
rotation
=
a
.
rotation
,
b
.
opacity
=
a
.
opacity
,
b
.
uvOffset
.
copy
(
a
.
uvOffset
),
b
.
uvScale
.
copy
(
a
.
uvScale
)):
a
instanceof
THREE
.
LOD
?
b
=
new
THREE
.
LOD
:
a
instanceof
THREE
.
MarchingCubes
?(
b
=
new
THREE
.
MarchingCubes
(
a
.
resolution
,
a
.
material
),
b
.
field
.
set
(
a
.
field
),
b
.
isolation
=
a
.
isolation
):
a
instanceof
THREE
.
Object3D
&&
(
b
=
new
THREE
.
Object3D
);
b
.
parent
=
a
.
parent
;
b
.
up
.
copy
(
a
.
up
);
b
.
position
.
copy
(
a
.
position
);
b
.
rotation
instanceof
THREE
.
Vector3
&&
b
.
rotation
.
copy
(
a
.
rotation
);
b
.
eulerOrder
=
a
.
eulerOrder
;
b
.
scale
.
copy
(
a
.
scale
);
b
.
dynamic
=
a
.
dynamic
;
b
.
doubleSided
=
a
.
doubleSided
;
b
.
flipSided
=
a
.
flipSided
;
b
.
renderDepth
=
a
.
renderDepth
;
b
.
rotationAutoUpdate
=
a
.
rotationAutoUpdate
;
b
.
matrix
.
copy
(
a
.
matrix
);
b
.
matrixWorld
.
copy
(
a
.
matrixWorld
);
b
.
matrixRotationWorld
.
copy
(
a
.
matrixRotationWorld
);
b
.
matrixAutoUpdate
=
a
.
matrixAutoUpdate
;
b
.
matrixWorldNeedsUpdate
=
a
.
matrixWorldNeedsUpdate
;
b
.
quaternion
.
copy
(
a
.
quaternion
);
b
.
useQuaternion
=
a
.
useQuaternion
;
b
.
boundRadius
=
a
.
boundRadius
;
b
.
boundRadiusScale
=
a
.
boundRadiusScale
;
b
.
visible
=
a
.
visible
;
b
.
castShadow
=
a
.
castShadow
;
b
.
receiveShadow
=
a
.
receiveShadow
;
b
.
frustumCulled
=
b
.
uvOffset
.
copy
(
a
.
uvOffset
),
b
.
uvScale
.
copy
(
a
.
uvScale
)):
a
instanceof
THREE
.
LOD
?
b
=
new
THREE
.
LOD
:
a
instanceof
THREE
.
MarchingCubes
?(
b
=
new
THREE
.
MarchingCubes
(
a
.
resolution
,
a
.
material
),
b
.
field
.
set
(
a
.
field
),
b
.
isolation
=
a
.
isolation
):
a
instanceof
THREE
.
Object3D
&&
(
b
=
new
THREE
.
Object3D
);
b
.
name
=
a
.
name
;
b
.
parent
=
a
.
parent
;
b
.
up
.
copy
(
a
.
up
);
b
.
position
.
copy
(
a
.
position
);
b
.
rotation
instanceof
THREE
.
Vector3
&&
b
.
rotation
.
copy
(
a
.
rotation
);
b
.
eulerOrder
=
a
.
eulerOrder
;
b
.
scale
.
copy
(
a
.
scale
);
b
.
dynamic
=
a
.
dynamic
;
b
.
doubleSided
=
a
.
doubleSided
;
b
.
flipSided
=
a
.
flipSided
;
b
.
renderDepth
=
a
.
renderDepth
;
b
.
rotationAutoUpdate
=
a
.
rotationAutoUpdate
;
b
.
matrix
.
copy
(
a
.
matrix
);
b
.
matrixWorld
.
copy
(
a
.
matrixWorld
);
b
.
matrixRotationWorld
.
copy
(
a
.
matrixRotationWorld
);
b
.
matrixAutoUpdate
=
a
.
matrixAutoUpdate
;
b
.
matrixWorldNeedsUpdate
=
a
.
matrixWorldNeedsUpdate
;
b
.
quaternion
.
copy
(
a
.
quaternion
);
b
.
useQuaternion
=
a
.
useQuaternion
;
b
.
boundRadius
=
a
.
boundRadius
;
b
.
boundRadiusScale
=
a
.
boundRadiusScale
;
b
.
visible
=
a
.
visible
;
b
.
castShadow
=
a
.
castShadow
;
b
.
receiveShadow
=
a
.
receiveShadow
;
b
.
frustumCulled
=
a
.
frustumCulled
;
for
(
var
c
=
0
;
c
<
a
.
children
.
length
;
c
++
){
var
d
=
THREE
.
SceneUtils
.
cloneObject
(
a
.
children
[
c
]);
b
.
children
[
c
]
=
d
;
d
.
parent
=
b
}
if
(
a
instanceof
THREE
.
LOD
)
for
(
c
=
0
;
c
<
a
.
LODs
.
length
;
c
++
)
b
.
LODs
[
c
]
=
{
visibleAtDistance
:
a
.
LODs
[
c
].
visibleAtDistance
,
object3D
:
b
.
children
[
c
]};
return
b
}};
if
(
THREE
.
WebGLRenderer
)
THREE
.
ShaderUtils
=
{
lib
:{
fresnel
:{
uniforms
:{
mRefractionRatio
:{
type
:
"
f
"
,
value
:
1.02
},
mFresnelBias
:{
type
:
"
f
"
,
value
:
0.1
},
mFresnelPower
:{
type
:
"
f
"
,
value
:
2
},
mFresnelScale
:{
type
:
"
f
"
,
value
:
1
},
tCube
:{
type
:
"
t
"
,
value
:
1
,
texture
:
null
}},
fragmentShader
:
"
uniform samplerCube tCube;
\n
varying vec3 vReflect;
\n
varying vec3 vRefract[3];
\n
varying float vReflectionFactor;
\n
void main() {
\n
vec4 reflectedColor = textureCube( tCube, vec3( -vReflect.x, vReflect.yz ) );
\n
vec4 refractedColor = vec4( 1.0, 1.0, 1.0, 1.0 );
\n
refractedColor.r = textureCube( tCube, vec3( -vRefract[0].x, vRefract[0].yz ) ).r;
\n
refractedColor.g = textureCube( tCube, vec3( -vRefract[1].x, vRefract[1].yz ) ).g;
\n
refractedColor.b = textureCube( tCube, vec3( -vRefract[2].x, vRefract[2].yz ) ).b;
\n
refractedColor.a = 1.0;
\n
gl_FragColor = mix( refractedColor, reflectedColor, clamp( vReflectionFactor, 0.0, 1.0 ) );
\n
}
"
,
vertexShader
:
"
uniform float mRefractionRatio;
\n
uniform float mFresnelBias;
\n
uniform float mFresnelScale;
\n
uniform float mFresnelPower;
\n
varying vec3 vReflect;
\n
varying vec3 vRefract[3];
\n
varying float vReflectionFactor;
\n
void main() {
\n
vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );
\n
vec4 mPosition = objectMatrix * vec4( position, 1.0 );
\n
vec3 nWorld = normalize ( mat3( objectMatrix[0].xyz, objectMatrix[1].xyz, objectMatrix[2].xyz ) * normal );
\n
vec3 I = mPosition.xyz - cameraPosition;
\n
vReflect = reflect( I, nWorld );
\n
vRefract[0] = refract( normalize( I ), nWorld, mRefractionRatio );
\n
vRefract[1] = refract( normalize( I ), nWorld, mRefractionRatio * 0.99 );
\n
vRefract[2] = refract( normalize( I ), nWorld, mRefractionRatio * 0.98 );
\n
vReflectionFactor = mFresnelBias + mFresnelScale * pow( 1.0 + dot( normalize( I ), nWorld ), mFresnelPower );
\n
gl_Position = projectionMatrix * mvPosition;
\n
}
"
},
...
...
src/extras/SceneUtils.js
浏览文件 @
3163b797
...
...
@@ -127,6 +127,8 @@ THREE.SceneUtils = {
// base class properties
object
.
name
=
source
.
name
;
object
.
parent
=
source
.
parent
;
object
.
up
.
copy
(
source
.
up
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录