Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Ablesons
three.js
提交
ce751a10
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,发现更多精彩内容 >>
提交
ce751a10
编写于
3月 10, 2011
作者:
M
Mr.doob
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
WebGLRenderer now doesn't render objects with material.opacity == 0.
上级
715f8c4f
变更
8
显示空白变更内容
内联
并排
Showing
8 changed file
with
24 addition
and
21 deletion
+24
-21
build/Three.js
build/Three.js
+5
-5
build/custom/ThreeCanvas.js
build/custom/ThreeCanvas.js
+1
-1
build/custom/ThreeDOM.js
build/custom/ThreeDOM.js
+1
-1
build/custom/ThreeExtras.js
build/custom/ThreeExtras.js
+1
-1
build/custom/ThreeSVG.js
build/custom/ThreeSVG.js
+1
-1
build/custom/ThreeWebGL.js
build/custom/ThreeWebGL.js
+10
-10
examples/webgl_sandbox.html
examples/webgl_sandbox.html
+1
-0
src/renderers/WebGLRenderer.js
src/renderers/WebGLRenderer.js
+4
-2
未找到文件。
build/Three.js
浏览文件 @
ce751a10
...
...
@@ -48,7 +48,7 @@ c,b)}}};THREE.Quaternion=function(a,c,b,d){this.set(a||0,c||0,b||0,d!==undefined
THREE
.
Quaternion
.
prototype
=
{
set
:
function
(
a
,
c
,
b
,
d
){
this
.
x
=
a
;
this
.
y
=
c
;
this
.
z
=
b
;
this
.
w
=
d
;
return
this
},
setFromEuler
:
function
(
a
){
var
c
=
0.5
*
Math
.
PI
/
360
,
b
=
a
.
x
*
c
,
d
=
a
.
y
*
c
,
e
=
a
.
z
*
c
;
a
=
Math
.
cos
(
d
);
d
=
Math
.
sin
(
d
);
c
=
Math
.
cos
(
-
e
);
e
=
Math
.
sin
(
-
e
);
var
g
=
Math
.
cos
(
b
);
b
=
Math
.
sin
(
b
);
var
h
=
a
*
c
,
j
=
d
*
e
;
this
.
w
=
h
*
g
-
j
*
b
;
this
.
x
=
h
*
b
+
j
*
g
;
this
.
y
=
d
*
c
*
g
+
a
*
e
*
b
;
this
.
z
=
a
*
e
*
g
-
d
*
c
*
b
;
return
this
},
calculateW
:
function
(){
this
.
w
=-
Math
.
sqrt
(
Math
.
abs
(
1
-
this
.
x
*
this
.
x
-
this
.
y
*
this
.
y
-
this
.
z
*
this
.
z
));
return
this
},
inverse
:
function
(){
this
.
x
*=-
1
;
this
.
y
*=
-
1
;
this
.
z
*=-
1
;
return
this
},
length
:
function
(){
return
Math
.
sqrt
(
this
.
x
*
this
.
x
+
this
.
y
*
this
.
y
+
this
.
z
*
this
.
z
+
this
.
w
*
this
.
w
)},
normalize
:
function
(){
var
a
=
Math
.
sqrt
(
this
.
x
*
this
.
x
+
this
.
y
*
this
.
y
+
this
.
z
*
this
.
z
+
this
.
w
*
this
.
w
);
if
(
a
==
0
)
this
.
w
=
this
.
z
=
this
.
y
=
this
.
x
=
0
;
else
{
a
=
1
/
a
;
this
.
x
*=
a
;
this
.
y
*=
a
;
this
.
z
*=
a
;
this
.
w
*=
a
}
return
this
},
multiplySelf
:
function
(
a
){
var
c
=
this
.
x
,
b
=
this
.
y
,
d
=
this
.
z
,
e
=
this
.
w
,
g
=
a
.
x
,
h
=
a
.
y
,
j
=
a
.
z
;
a
=
a
.
w
;
this
.
x
=
c
*
a
+
e
*
g
+
b
*
j
-
d
*
h
;
this
.
y
=
b
*
a
+
e
*
h
+
d
*
g
-
c
*
j
;
this
.
z
=
d
*
a
+
e
*
j
+
c
*
h
-
b
*
g
;
this
.
w
=
e
*
a
-
c
*
g
-
b
*
h
-
d
*
j
;
return
this
},
multiplyVector3
:
function
(
a
,
c
){
c
||
(
c
=
a
);
var
b
=
a
.
x
,
d
=
a
.
y
,
e
=
a
.
z
,
g
=
this
.
x
,
h
=
this
.
y
,
j
=
this
.
z
,
k
=
this
.
w
,
n
=
k
*
b
+
h
*
e
-
j
*
d
,
q
=
k
*
d
+
j
*
b
-
g
*
e
,
x
=
k
*
e
+
g
*
d
-
h
*
b
;
b
=-
g
*
b
-
h
*
d
-
j
*
e
;
c
.
x
=
n
*
k
+
b
*-
g
+
q
*-
j
-
x
*-
h
;
c
.
y
=
q
*
k
+
b
*-
h
+
x
*-
g
-
n
*-
j
;
c
.
z
=
x
*
k
+
b
*-
j
+
n
*-
h
-
q
*-
g
;
return
c
}};
THREE
.
Quaternion
.
slerp
=
function
(
a
,
c
,
b
,
d
){
var
e
=
a
.
w
*
c
.
w
+
a
.
x
*
c
.
x
+
a
.
y
*
c
.
y
+
a
.
z
*
c
.
z
;
if
(
Math
.
abs
(
e
)
>=
1
){
b
.
w
=
a
.
w
;
b
.
x
=
a
.
x
;
b
.
y
=
a
.
y
;
b
.
z
=
a
.
z
;
return
b
}
var
g
=
Math
.
acos
(
e
),
h
=
Math
.
sqrt
(
1
-
e
*
e
);
if
(
Math
.
abs
(
h
)
<
0.001
0
){
b
.
w
=
0.5
*
(
a
.
w
+
c
.
w
);
b
.
x
=
0.5
*
(
a
.
x
+
c
.
x
);
b
.
y
=
0.5
*
(
a
.
y
+
c
.
y
);
b
.
z
=
0.5
*
(
a
.
z
+
c
.
z
);
return
b
}
e
=
Math
.
sin
((
1
-
d
)
*
g
)
/
h
;
d
=
Math
.
sin
(
d
*
g
)
/
h
;
b
.
w
=
a
.
w
*
e
+
c
.
w
*
d
;
b
.
x
=
a
.
x
*
e
+
c
.
x
*
d
;
b
.
y
=
a
.
y
*
e
+
c
.
y
*
d
;
b
.
z
=
a
.
z
*
e
+
c
.
z
*
d
;
return
b
};
THREE
.
Quaternion
.
slerp
=
function
(
a
,
c
,
b
,
d
){
var
e
=
a
.
w
*
c
.
w
+
a
.
x
*
c
.
x
+
a
.
y
*
c
.
y
+
a
.
z
*
c
.
z
;
if
(
Math
.
abs
(
e
)
>=
1
){
b
.
w
=
a
.
w
;
b
.
x
=
a
.
x
;
b
.
y
=
a
.
y
;
b
.
z
=
a
.
z
;
return
b
}
var
g
=
Math
.
acos
(
e
),
h
=
Math
.
sqrt
(
1
-
e
*
e
);
if
(
Math
.
abs
(
h
)
<
0.001
){
b
.
w
=
0.5
*
(
a
.
w
+
c
.
w
);
b
.
x
=
0.5
*
(
a
.
x
+
c
.
x
);
b
.
y
=
0.5
*
(
a
.
y
+
c
.
y
);
b
.
z
=
0.5
*
(
a
.
z
+
c
.
z
);
return
b
}
e
=
Math
.
sin
((
1
-
d
)
*
g
)
/
h
;
d
=
Math
.
sin
(
d
*
g
)
/
h
;
b
.
w
=
a
.
w
*
e
+
c
.
w
*
d
;
b
.
x
=
a
.
x
*
e
+
c
.
x
*
d
;
b
.
y
=
a
.
y
*
e
+
c
.
y
*
d
;
b
.
z
=
a
.
z
*
e
+
c
.
z
*
d
;
return
b
};
THREE
.
Vertex
=
function
(
a
,
c
){
this
.
position
=
a
||
new
THREE
.
Vector3
;
this
.
positionWorld
=
new
THREE
.
Vector3
;
this
.
positionScreen
=
new
THREE
.
Vector4
;
this
.
normal
=
c
||
new
THREE
.
Vector3
;
this
.
normalWorld
=
new
THREE
.
Vector3
;
this
.
normalScreen
=
new
THREE
.
Vector3
;
this
.
tangent
=
new
THREE
.
Vector4
;
this
.
__visible
=!
0
};
THREE
.
Face3
=
function
(
a
,
c
,
b
,
d
,
e
){
this
.
a
=
a
;
this
.
b
=
c
;
this
.
c
=
b
;
this
.
centroid
=
new
THREE
.
Vector3
;
this
.
normal
=
d
instanceof
THREE
.
Vector3
?
d
:
new
THREE
.
Vector3
;
this
.
vertexNormals
=
d
instanceof
Array
?
d
:[];
this
.
materials
=
e
instanceof
Array
?
e
:[
e
]};
THREE
.
Face4
=
function
(
a
,
c
,
b
,
d
,
e
,
g
){
this
.
a
=
a
;
this
.
b
=
c
;
this
.
c
=
b
;
this
.
d
=
d
;
this
.
centroid
=
new
THREE
.
Vector3
;
this
.
normal
=
e
instanceof
THREE
.
Vector3
?
e
:
new
THREE
.
Vector3
;
this
.
vertexNormals
=
e
instanceof
Array
?
e
:[];
this
.
materials
=
g
instanceof
Array
?
g
:[
g
]};
THREE
.
UV
=
function
(
a
,
c
){
this
.
set
(
a
||
0
,
c
||
0
)};
THREE
.
UV
.
prototype
=
{
set
:
function
(
a
,
c
){
this
.
u
=
a
;
this
.
v
=
c
;
return
this
},
copy
:
function
(
a
){
this
.
set
(
a
.
u
,
a
.
v
);
return
this
}};
THREE
.
Geometry
=
function
(){
this
.
id
=
"
Geometry
"
+
THREE
.
GeometryIdCounter
++
;
this
.
vertices
=
[];
this
.
faces
=
[];
this
.
uvs
=
[];
this
.
uvs2
=
[];
this
.
colors
=
[];
this
.
skinWeights
=
[];
this
.
skinIndices
=
[];
this
.
boundingSphere
=
this
.
boundingBox
=
null
;
this
.
hasTangents
=!
1
};
...
...
@@ -81,7 +81,7 @@ THREE.Animation.prototype.getPrevKeyWith=function(a,c,b){var d=this.data.hierarc
THREE
.
Camera
.
prototype
=
new
THREE
.
Object3D
;
THREE
.
Camera
.
prototype
.
constructor
=
THREE
.
Camera
;
THREE
.
Camera
.
prototype
.
supr
=
THREE
.
Object3D
.
prototype
;
THREE
.
Camera
.
prototype
.
translate
=
function
(
a
,
c
){
this
.
matrix
.
rotateAxis
(
c
);
this
.
position
.
addSelf
(
c
.
multiplyScalar
(
a
));
this
.
target
.
position
.
addSelf
(
c
.
multiplyScalar
(
a
))};
THREE
.
Camera
.
prototype
.
updateProjectionMatrix
=
function
(){
this
.
projectionMatrix
=
THREE
.
Matrix4
.
makePerspective
(
this
.
fov
,
this
.
aspect
,
this
.
near
,
this
.
far
)};
THREE
.
Camera
.
prototype
.
update
=
function
(
a
,
c
,
b
){
if
(
this
.
useTarget
){
this
.
matrix
.
lookAt
(
this
.
position
,
this
.
target
.
position
,
this
.
up
);
this
.
matrix
.
setPosition
(
this
.
position
);
a
?
this
.
matrixWorld
.
multiply
(
a
,
this
.
matrix
):
this
.
matrixWorld
.
copy
(
this
.
matrix
);
THREE
.
Matrix4
.
makeInvert
(
this
.
matrixWorld
,
this
.
matrixWorldInverse
);
c
=!
0
}
else
{
this
.
matrixAutoUpdate
&&
(
c
|=
this
.
updateMatrix
());
if
(
c
||
this
.
matrixWorldNeedsUpdate
){
a
?
this
.
matrixWorld
.
multiply
(
a
,
this
.
matrix
):
this
.
matrixWorld
.
copy
(
this
.
matrix
);
this
.
matrixWorldNeedsUpdate
=
!
1
;
c
=!
0
;
THREE
.
Matrix4
.
makeInvert
(
this
.
matrixWorld
,
this
.
matrixWorldInverse
)}}
for
(
a
=
0
;
a
<
this
.
children
.
length
;
a
++
)
this
.
children
[
a
].
update
(
this
.
matrixWorld
,
c
,
b
)};
THREE
.
QuakeCamera
=
function
(
a
){
function
c
(
b
,
d
){
return
function
(){
d
.
apply
(
b
,
arguments
)}}
THREE
.
Camera
.
call
(
this
,
a
.
fov
,
a
.
aspect
,
a
.
near
,
a
.
far
,
a
.
target
);
this
.
movementSpeed
=
1
;
this
.
lookSpeed
=
0.005
0
;
this
.
noFly
=!
1
;
this
.
lookVertical
=!
0
;
this
.
autoForward
=!
1
;
this
.
heightSpeed
=!
1
;
this
.
heightCoef
=
1
;
this
.
heightMin
=
0
;
this
.
domElement
=
document
;
if
(
a
){
if
(
a
.
movementSpeed
!==
undefined
)
this
.
movementSpeed
=
a
.
movementSpeed
;
if
(
a
.
lookSpeed
!==
undefined
)
this
.
lookSpeed
=
a
.
lookSpeed
;
if
(
a
.
noFly
!==
undefined
)
this
.
noFly
=
a
.
noFly
;
if
(
a
.
lookVertical
!==
THREE
.
QuakeCamera
=
function
(
a
){
function
c
(
b
,
d
){
return
function
(){
d
.
apply
(
b
,
arguments
)}}
THREE
.
Camera
.
call
(
this
,
a
.
fov
,
a
.
aspect
,
a
.
near
,
a
.
far
,
a
.
target
);
this
.
movementSpeed
=
1
;
this
.
lookSpeed
=
0.005
;
this
.
noFly
=!
1
;
this
.
lookVertical
=!
0
;
this
.
autoForward
=!
1
;
this
.
heightSpeed
=!
1
;
this
.
heightCoef
=
1
;
this
.
heightMin
=
0
;
this
.
domElement
=
document
;
if
(
a
){
if
(
a
.
movementSpeed
!==
undefined
)
this
.
movementSpeed
=
a
.
movementSpeed
;
if
(
a
.
lookSpeed
!==
undefined
)
this
.
lookSpeed
=
a
.
lookSpeed
;
if
(
a
.
noFly
!==
undefined
)
this
.
noFly
=
a
.
noFly
;
if
(
a
.
lookVertical
!==
undefined
)
this
.
lookVertical
=
a
.
lookVertical
;
if
(
a
.
autoForward
!==
undefined
)
this
.
autoForward
=
a
.
autoForward
;
if
(
a
.
heightSpeed
!==
undefined
)
this
.
heightSpeed
=
a
.
heightSpeed
;
if
(
a
.
heightCoef
!==
undefined
)
this
.
heightCoef
=
a
.
heightCoef
;
if
(
a
.
heightMin
!==
undefined
)
this
.
heightMin
=
a
.
heightMin
;
if
(
a
.
heightMax
!==
undefined
)
this
.
heightMax
=
a
.
heightMax
;
if
(
a
.
domElement
!==
undefined
)
this
.
domElement
=
a
.
domElement
}
this
.
theta
=
this
.
phy
=
this
.
lon
=
this
.
lat
=
this
.
mouseY
=
this
.
mouseX
=
this
.
autoSpeedFactor
=
0
;
this
.
moveForward
=!
1
;
this
.
moveBackward
=
!
1
;
this
.
moveLeft
=!
1
;
this
.
moveRight
=!
1
;
this
.
windowHalfX
=
window
.
innerWidth
/
2
;
this
.
windowHalfY
=
window
.
innerHeight
/
2
;
this
.
onMouseDown
=
function
(
b
){
b
.
preventDefault
();
b
.
stopPropagation
();
switch
(
b
.
button
){
case
0
:
this
.
moveForward
=!
0
;
break
;
case
2
:
this
.
moveBackward
=!
0
}};
this
.
onMouseUp
=
function
(
b
){
b
.
preventDefault
();
b
.
stopPropagation
();
switch
(
b
.
button
){
case
0
:
this
.
moveForward
=!
1
;
break
;
case
2
:
this
.
moveBackward
=!
1
}};
this
.
onMouseMove
=
function
(
b
){
this
.
mouseX
=
b
.
clientX
-
this
.
windowHalfX
;
this
.
mouseY
=
b
.
clientY
-
this
.
windowHalfY
};
this
.
onKeyDown
=
function
(
b
){
switch
(
b
.
keyCode
){
case
38
:
case
87
:
this
.
moveForward
=!
0
;
break
;
case
37
:
case
65
:
this
.
moveLeft
=!
0
;
break
;
case
40
:
case
83
:
this
.
moveBackward
=!
0
;
break
;
case
39
:
case
68
:
this
.
moveRight
=!
0
}};
this
.
onKeyUp
=
function
(
b
){
switch
(
b
.
keyCode
){
case
38
:
case
87
:
this
.
moveForward
=!
1
;
break
;
case
37
:
case
65
:
this
.
moveLeft
=!
1
;
break
;
case
40
:
case
83
:
this
.
moveBackward
=!
1
;
break
;
case
39
:
case
68
:
this
.
moveRight
=!
1
}};
this
.
update
=
function
(){
this
.
autoSpeedFactor
=
this
.
heightSpeed
?((
this
.
position
.
y
<
this
.
heightMin
?
...
...
@@ -220,11 +220,11 @@ G.refractionRatio.value=m.refractionRatio;G.combine.value=m.combine;G.useRefract
f
.
UNSIGNED_BYTE
,
p
.
image
[
Q
])}
else
{
p
.
image
.
__webGLTextureCube
=
f
.
createTexture
();
f
.
bindTexture
(
f
.
TEXTURE_CUBE_MAP
,
p
.
image
.
__webGLTextureCube
);
for
(
Q
=
0
;
Q
<
6
;
++
Q
)
f
.
texImage2D
(
f
.
TEXTURE_CUBE_MAP_POSITIVE_X
+
Q
,
0
,
f
.
RGBA
,
f
.
RGBA
,
f
.
UNSIGNED_BYTE
,
p
.
image
[
Q
]);
p
.
__wasSetOnce
=!
0
}
F
(
f
.
TEXTURE_CUBE_MAP
,
p
,
p
.
image
[
0
]);
f
.
bindTexture
(
f
.
TEXTURE_CUBE_MAP
,
null
);
p
.
needsUpdate
=!
1
}
f
.
activeTexture
(
f
.
TEXTURE0
+
z
);
f
.
bindTexture
(
f
.
TEXTURE_CUBE_MAP
,
p
.
image
.
__webGLTextureCube
)}}
else
{
if
(
p
.
needsUpdate
){
if
(
p
.
__wasSetOnce
){
f
.
bindTexture
(
f
.
TEXTURE_2D
,
p
.
__webGLTexture
);
f
.
texSubImage2D
(
f
.
TEXTURE_2D
,
0
,
0
,
0
,
f
.
RGBA
,
f
.
UNSIGNED_BYTE
,
p
.
image
)}
else
{
p
.
__webGLTexture
=
f
.
createTexture
();
f
.
bindTexture
(
f
.
TEXTURE_2D
,
p
.
__webGLTexture
);
f
.
texImage2D
(
f
.
TEXTURE_2D
,
0
,
f
.
RGBA
,
f
.
RGBA
,
f
.
UNSIGNED_BYTE
,
p
.
image
);
p
.
__wasSetOnce
=!
0
}
F
(
f
.
TEXTURE_2D
,
p
,
p
.
image
);
f
.
bindTexture
(
f
.
TEXTURE_2D
,
null
);
p
.
needsUpdate
=!
1
}
f
.
activeTexture
(
f
.
TEXTURE0
+
z
);
f
.
bindTexture
(
f
.
TEXTURE_2D
,
p
.
__webGLTexture
)}}}
f
.
uniformMatrix4fv
(
C
.
modelViewMatrix
,
!
1
,
o
.
_modelViewMatrixArray
);
f
.
uniformMatrix3fv
(
C
.
normalMatrix
,
!
1
,
o
.
_normalMatrixArray
);(
m
instanceof
THREE
.
MeshShaderMaterial
||
m
instanceof
THREE
.
MeshPhongMaterial
||
m
.
envMap
)
&&
f
.
uniform3f
(
C
.
cameraPosition
,
l
.
position
.
x
,
l
.
position
.
y
,
l
.
position
.
z
);(
m
instanceof
THREE
.
MeshShaderMaterial
||
m
.
envMap
||
m
.
skinning
)
&&
f
.
uniformMatrix4fv
(
C
.
objectMatrix
,
!
1
,
o
.
_objectMatrixArray
);(
m
instanceof
THREE
.
MeshPhongMaterial
||
m
instanceof
THREE
.
MeshLambertMaterial
||
m
instanceof
THREE
.
MeshShaderMaterial
||
m
.
skinning
)
&&
f
.
uniformMatrix4fv
(
C
.
viewMatrix
,
!
1
,
aa
);
if
(
m
.
skinning
){
f
.
uniformMatrix4fv
(
C
.
cameraInverseMatrix
,
!
1
,
aa
);
f
.
uniformMatrix4fv
(
C
.
boneGlobalMatrices
,
!
1
,
o
.
boneMatrices
)}
return
B
}
function
e
(
l
,
z
,
p
,
m
,
o
,
B
){
l
=
d
(
l
,
z
,
p
,
m
,
B
).
attributes
;
f
.
bindBuffer
(
f
.
ARRAY_BUFFER
,
o
.
__webGLVertexBuffer
);
f
.
vertexAttribPointer
(
l
.
position
,
3
,
f
.
FLOAT
,
!
1
,
0
,
0
);
if
(
l
.
color
>=
0
){
f
.
bindBuffer
(
f
.
ARRAY_BUFFER
,
o
.
__webGLColorBuffer
);
f
.
vertexAttribPointer
(
l
.
color
,
3
,
f
.
FLOAT
,
!
1
,
0
,
0
)}
if
(
l
.
normal
>=
0
){
f
.
bindBuffer
(
f
.
ARRAY_BUFFER
,
o
.
__webGLNormalBuffer
);
f
.
vertexAttribPointer
(
l
.
normal
,
3
,
f
.
FLOAT
,
!
1
,
0
,
0
)}
if
(
l
.
tangent
>=
0
){
f
.
bindBuffer
(
f
.
ARRAY_BUFFER
,
!
1
,
aa
);
f
.
uniformMatrix4fv
(
C
.
boneGlobalMatrices
,
!
1
,
o
.
boneMatrices
)}
return
B
}
function
e
(
l
,
z
,
p
,
m
,
o
,
B
){
if
(
m
.
opacity
!=
0
){
l
=
d
(
l
,
z
,
p
,
m
,
B
).
attributes
;
f
.
bindBuffer
(
f
.
ARRAY_BUFFER
,
o
.
__webGLVertexBuffer
);
f
.
vertexAttribPointer
(
l
.
position
,
3
,
f
.
FLOAT
,
!
1
,
0
,
0
);
if
(
l
.
color
>=
0
){
f
.
bindBuffer
(
f
.
ARRAY_BUFFER
,
o
.
__webGLColorBuffer
);
f
.
vertexAttribPointer
(
l
.
color
,
3
,
f
.
FLOAT
,
!
1
,
0
,
0
)}
if
(
l
.
normal
>=
0
){
f
.
bindBuffer
(
f
.
ARRAY_BUFFER
,
o
.
__webGLNormalBuffer
);
f
.
vertexAttribPointer
(
l
.
normal
,
3
,
f
.
FLOAT
,
!
1
,
0
,
0
)}
if
(
l
.
tangent
>=
0
){
f
.
bindBuffer
(
f
.
ARRAY_BUFFER
,
o
.
__webGLTangentBuffer
);
f
.
vertexAttribPointer
(
l
.
tangent
,
4
,
f
.
FLOAT
,
!
1
,
0
,
0
)}
if
(
l
.
uv
>=
0
)
if
(
o
.
__webGLUVBuffer
){
f
.
bindBuffer
(
f
.
ARRAY_BUFFER
,
o
.
__webGLUVBuffer
);
f
.
vertexAttribPointer
(
l
.
uv
,
2
,
f
.
FLOAT
,
!
1
,
0
,
0
);
f
.
enableVertexAttribArray
(
l
.
uv
)}
else
f
.
disableVertexAttribArray
(
l
.
uv
);
if
(
l
.
uv2
>=
0
)
if
(
o
.
__webGLUV2Buffer
){
f
.
bindBuffer
(
f
.
ARRAY_BUFFER
,
o
.
__webGLUV2Buffer
);
f
.
vertexAttribPointer
(
l
.
uv2
,
2
,
f
.
FLOAT
,
!
1
,
0
,
0
);
f
.
enableVertexAttribArray
(
l
.
uv2
)}
else
f
.
disableVertexAttribArray
(
l
.
uv2
);
if
(
m
.
skinning
&&
l
.
skinVertexA
>=
0
&&
l
.
skinVertexB
>=
0
&&
l
.
skinIndex
>=
0
&&
l
.
skinWeight
>=
0
){
f
.
bindBuffer
(
f
.
ARRAY_BUFFER
,
o
.
__webGLSkinVertexABuffer
);
f
.
vertexAttribPointer
(
l
.
skinVertexA
,
4
,
f
.
FLOAT
,
!
1
,
0
,
0
);
f
.
bindBuffer
(
f
.
ARRAY_BUFFER
,
o
.
__webGLSkinVertexBBuffer
);
f
.
vertexAttribPointer
(
l
.
skinVertexB
,
4
,
f
.
FLOAT
,
!
1
,
0
,
0
);
f
.
bindBuffer
(
f
.
ARRAY_BUFFER
,
o
.
__webGLSkinIndicesBuffer
);
f
.
vertexAttribPointer
(
l
.
skinIndex
,
4
,
f
.
FLOAT
,
!
1
,
0
,
0
);
f
.
bindBuffer
(
f
.
ARRAY_BUFFER
,
o
.
__webGLSkinWeightsBuffer
);
f
.
vertexAttribPointer
(
l
.
skinWeight
,
4
,
f
.
FLOAT
,
!
1
,
0
,
0
)}
if
(
B
instanceof
THREE
.
Mesh
)
if
(
m
.
wireframe
){
f
.
lineWidth
(
m
.
wireframeLinewidth
);
f
.
bindBuffer
(
f
.
ELEMENT_ARRAY_BUFFER
,
o
.
__webGLLineBuffer
);
f
.
drawElements
(
f
.
LINES
,
o
.
__webGLLineCount
,
f
.
UNSIGNED_SHORT
,
0
)}
else
{
f
.
bindBuffer
(
f
.
ELEMENT_ARRAY_BUFFER
,
o
.
__webGLFaceBuffer
);
f
.
drawElements
(
f
.
TRIANGLES
,
o
.
__webGLFaceCount
,
f
.
UNSIGNED_SHORT
,
0
)}
else
if
(
B
instanceof
THREE
.
Line
){
B
=
B
.
type
==
THREE
.
LineStrip
?
f
.
LINE_STRIP
:
f
.
LINES
;
f
.
lineWidth
(
m
.
linewidth
);
f
.
drawArrays
(
B
,
0
,
o
.
__webGLLineCount
)}
else
if
(
B
instanceof
THREE
.
ParticleSystem
)
f
.
drawArrays
(
f
.
POINTS
,
0
,
o
.
__webGLParticleCount
);
else
B
instanceof
THREE
.
Ribbon
&&
f
.
drawArrays
(
f
.
TRIANGLE_STRIP
,
0
,
o
.
__webGLVertexCount
)}
function
g
(
l
,
z
){
if
(
!
l
.
__webGLVertexBuffer
)
l
.
__webGLVertexBuffer
=
f
.
createBuffer
();
if
(
!
l
.
__webGLNormalBuffer
)
l
.
__webGLNormalBuffer
=
f
.
createBuffer
();
if
(
l
.
hasPos
){
f
.
bindBuffer
(
f
.
ARRAY_BUFFER
,
l
.
__webGLVertexBuffer
);
f
.
bufferData
(
f
.
ARRAY_BUFFER
,
l
.
positionArray
,
f
.
DYNAMIC_DRAW
);
f
.
enableVertexAttribArray
(
z
.
attributes
.
position
);
f
.
vertexAttribPointer
(
z
.
attributes
.
position
,
3
,
f
.
FLOAT
,
!
1
,
0
,
0
)}
if
(
l
.
hasNormal
){
f
.
bindBuffer
(
f
.
ARRAY_BUFFER
,
0
,
o
.
__webGLParticleCount
);
else
B
instanceof
THREE
.
Ribbon
&&
f
.
drawArrays
(
f
.
TRIANGLE_STRIP
,
0
,
o
.
__webGLVertexCount
)}
}
function
g
(
l
,
z
){
if
(
!
l
.
__webGLVertexBuffer
)
l
.
__webGLVertexBuffer
=
f
.
createBuffer
();
if
(
!
l
.
__webGLNormalBuffer
)
l
.
__webGLNormalBuffer
=
f
.
createBuffer
();
if
(
l
.
hasPos
){
f
.
bindBuffer
(
f
.
ARRAY_BUFFER
,
l
.
__webGLVertexBuffer
);
f
.
bufferData
(
f
.
ARRAY_BUFFER
,
l
.
positionArray
,
f
.
DYNAMIC_DRAW
);
f
.
enableVertexAttribArray
(
z
.
attributes
.
position
);
f
.
vertexAttribPointer
(
z
.
attributes
.
position
,
3
,
f
.
FLOAT
,
!
1
,
0
,
0
)}
if
(
l
.
hasNormal
){
f
.
bindBuffer
(
f
.
ARRAY_BUFFER
,
l
.
__webGLNormalBuffer
);
f
.
bufferData
(
f
.
ARRAY_BUFFER
,
l
.
normalArray
,
f
.
DYNAMIC_DRAW
);
f
.
enableVertexAttribArray
(
z
.
attributes
.
normal
);
f
.
vertexAttribPointer
(
z
.
attributes
.
normal
,
3
,
f
.
FLOAT
,
!
1
,
0
,
0
)}
f
.
drawArrays
(
f
.
TRIANGLES
,
0
,
l
.
count
);
l
.
count
=
0
}
function
h
(
l
){
if
(
fa
!=
l
.
doubleSided
){
l
.
doubleSided
?
f
.
disable
(
f
.
CULL_FACE
):
f
.
enable
(
f
.
CULL_FACE
);
fa
=
l
.
doubleSided
}
if
(
I
!=
l
.
flipSided
){
l
.
flipSided
?
f
.
frontFace
(
f
.
CW
):
f
.
frontFace
(
f
.
CCW
);
I
=
l
.
flipSided
}}
function
j
(
l
){
if
(
xa
!=
l
){
l
?
f
.
enable
(
f
.
DEPTH_TEST
):
f
.
disable
(
f
.
DEPTH_TEST
);
xa
=
l
}}
function
k
(
l
){
ta
[
0
].
set
(
l
.
n41
-
l
.
n11
,
l
.
n42
-
l
.
n12
,
l
.
n43
-
l
.
n13
,
l
.
n44
-
l
.
n14
);
ta
[
1
].
set
(
l
.
n41
+
l
.
n11
,
l
.
n42
+
l
.
n12
,
l
.
n43
+
l
.
n13
,
l
.
n44
+
l
.
n14
);
ta
[
2
].
set
(
l
.
n41
+
l
.
n21
,
l
.
n42
+
l
.
n22
,
l
.
n43
+
l
.
n23
,
l
.
n44
+
l
.
n24
);
ta
[
3
].
set
(
l
.
n41
-
l
.
n21
,
l
.
n42
-
l
.
n22
,
l
.
n43
-
l
.
n23
,
l
.
n44
-
l
.
n24
);
ta
[
4
].
set
(
l
.
n41
-
l
.
n31
,
l
.
n42
-
l
.
n32
,
l
.
n43
-
l
.
n33
,
l
.
n44
-
l
.
n34
);
ta
[
5
].
set
(
l
.
n41
+
l
.
n31
,
l
.
n42
+
l
.
n32
,
l
.
n43
+
l
.
n33
,
l
.
n44
+
l
.
n34
);
var
z
;
for
(
l
=
0
;
l
<
6
;
l
++
){
z
=
ta
[
l
];
z
.
divideScalar
(
Math
.
sqrt
(
z
.
x
*
z
.
x
+
z
.
y
*
z
.
y
+
z
.
z
*
z
.
z
))}}
function
n
(
l
){
for
(
var
z
=
l
.
matrixWorld
,
p
=-
l
.
geometry
.
boundingSphere
.
radius
*
Math
.
max
(
l
.
scale
.
x
,
Math
.
max
(
l
.
scale
.
y
,
l
.
scale
.
z
)),
m
=
0
;
m
<
6
;
m
++
){
l
=
ta
[
m
].
x
*
z
.
n14
+
ta
[
m
].
y
*
z
.
n24
+
ta
[
m
].
z
*
z
.
n34
+
ta
[
m
].
w
;
if
(
l
<=
p
)
return
!
1
}
return
!
0
}
function
q
(
l
,
z
){
l
.
list
[
l
.
count
]
=
z
;
l
.
count
+=
1
}
function
x
(
l
){
var
z
,
p
,
m
=
l
.
object
,
o
=
l
.
opaque
,
B
=
l
.
transparent
;
B
.
count
=
0
;
l
=
o
.
count
=
0
;
for
(
z
=
m
.
materials
.
length
;
l
<
z
;
l
++
){
p
=
m
.
materials
[
l
];
p
.
opacity
&&
p
.
opacity
<
1
||
p
.
blending
!=
THREE
.
NormalBlending
?
q
(
B
,
p
):
q
(
o
,
p
)}}
function
u
(
l
){
var
z
,
p
,
m
,
o
,
B
=
l
.
object
,
C
=
l
.
buffer
,
G
=
l
.
opaque
,
Q
=
l
.
transparent
;
Q
.
count
=
0
;
l
=
G
.
count
=
0
;
for
(
m
=
B
.
materials
.
length
;
l
<
...
...
@@ -317,7 +317,7 @@ var Torus=function(a,c,b,d){this.radius=a||100;this.tube=c||40;this.segmentsR=b|
var
Icosahedron
=
function
(
a
){
function
c
(
x
,
u
,
t
){
var
y
=
Math
.
sqrt
(
x
*
x
+
u
*
u
+
t
*
t
);
return
e
.
vertices
.
push
(
new
THREE
.
Vertex
(
new
THREE
.
Vector3
(
x
/
y
,
u
/
y
,
t
/
y
)))
-
1
}
function
b
(
x
,
u
,
t
,
y
){
y
.
faces
.
push
(
new
THREE
.
Face3
(
x
,
u
,
t
))}
function
d
(
x
,
u
){
var
t
=
e
.
vertices
[
x
].
position
,
y
=
e
.
vertices
[
u
].
position
;
return
c
((
t
.
x
+
y
.
x
)
/
2
,(
t
.
y
+
y
.
y
)
/
2
,(
t
.
z
+
y
.
z
)
/
2
)}
var
e
=
this
,
g
=
new
THREE
.
Geometry
,
h
;
this
.
subdivisions
=
a
||
0
;
THREE
.
Geometry
.
call
(
this
);
a
=
(
1
+
Math
.
sqrt
(
5
))
/
2
;
c
(
-
1
,
a
,
0
);
c
(
1
,
a
,
0
);
c
(
-
1
,
-
a
,
0
);
c
(
1
,
-
a
,
0
);
c
(
0
,
-
1
,
a
);
c
(
0
,
1
,
a
);
c
(
0
,
-
1
,
-
a
);
c
(
0
,
1
,
-
a
);
c
(
a
,
0
,
-
1
);
c
(
a
,
0
,
1
);
c
(
-
a
,
0
,
-
1
);
c
(
-
a
,
0
,
1
);
b
(
0
,
11
,
5
,
g
);
b
(
0
,
5
,
1
,
g
);
b
(
0
,
1
,
7
,
g
);
b
(
0
,
7
,
10
,
g
);
b
(
0
,
10
,
11
,
g
);
b
(
1
,
5
,
9
,
g
);
b
(
5
,
11
,
4
,
g
);
b
(
11
,
10
,
2
,
g
);
b
(
10
,
7
,
6
,
g
);
b
(
7
,
1
,
8
,
g
);
b
(
3
,
9
,
4
,
g
);
b
(
3
,
4
,
2
,
g
);
b
(
3
,
2
,
6
,
g
);
b
(
3
,
6
,
8
,
g
);
b
(
3
,
8
,
9
,
g
);
b
(
4
,
9
,
5
,
g
);
b
(
2
,
4
,
11
,
g
);
b
(
6
,
2
,
10
,
g
);
b
(
8
,
6
,
7
,
g
);
b
(
9
,
8
,
1
,
g
);
for
(
a
=
0
;
a
<
this
.
subdivisions
;
a
++
){
h
=
new
THREE
.
Geometry
;
for
(
var
j
in
g
.
faces
){
var
k
=
d
(
g
.
faces
[
j
].
a
,
g
.
faces
[
j
].
b
),
n
=
d
(
g
.
faces
[
j
].
b
,
g
.
faces
[
j
].
c
),
q
=
d
(
g
.
faces
[
j
].
c
,
g
.
faces
[
j
].
a
);
b
(
g
.
faces
[
j
].
a
,
k
,
q
,
h
);
b
(
g
.
faces
[
j
].
b
,
n
,
k
,
h
);
b
(
g
.
faces
[
j
].
c
,
q
,
n
,
h
);
b
(
k
,
n
,
q
,
h
)}
g
.
faces
=
h
.
faces
}
e
.
faces
=
g
.
faces
;
delete
g
;
delete
h
;
this
.
computeCentroids
();
this
.
computeFaceNormals
();
this
.
computeVertexNormals
()};
Icosahedron
.
prototype
=
new
THREE
.
Geometry
;
Icosahedron
.
prototype
.
constructor
=
Icosahedron
;
function
LathedObject
(
a
,
c
,
b
){
THREE
.
Geometry
.
call
(
this
);
this
.
nsteps
=
c
||
12
;
this
.
latheAngle
=
b
||
2
*
Math
.
PI
;
c
=
this
.
latheAngle
/
this
.
nsteps
;
for
(
var
d
=
[],
e
=
[],
g
=
[],
h
=
[],
j
=
0
;
j
<
a
.
length
;
j
++
){
this
.
vertices
.
push
(
new
THREE
.
Vertex
(
a
[
j
]));
e
[
j
]
=
this
.
vertices
.
length
-
1
;
d
[
j
]
=
new
THREE
.
Vector3
(
a
[
j
].
x
,
a
[
j
].
y
,
a
[
j
].
z
)}
for
(
var
k
=
THREE
.
Matrix4
.
rotationZMatrix
(
this
.
stepSize
),
n
=
0
;
n
<=
this
.
latheAngle
+
0.001
0
;
n
+=
this
.
stepSize
){
for
(
j
=
0
;
j
<
d
.
length
;
j
++
)
if
(
n
<
b
){
d
[
j
]
=
k
.
multiplyVector3
(
d
[
j
].
clone
());
this
.
vertices
.
push
(
new
THREE
.
Vertex
(
d
[
j
]));
function
LathedObject
(
a
,
c
,
b
){
THREE
.
Geometry
.
call
(
this
);
this
.
nsteps
=
c
||
12
;
this
.
latheAngle
=
b
||
2
*
Math
.
PI
;
c
=
this
.
latheAngle
/
this
.
nsteps
;
for
(
var
d
=
[],
e
=
[],
g
=
[],
h
=
[],
j
=
0
;
j
<
a
.
length
;
j
++
){
this
.
vertices
.
push
(
new
THREE
.
Vertex
(
a
[
j
]));
e
[
j
]
=
this
.
vertices
.
length
-
1
;
d
[
j
]
=
new
THREE
.
Vector3
(
a
[
j
].
x
,
a
[
j
].
y
,
a
[
j
].
z
)}
for
(
var
k
=
THREE
.
Matrix4
.
rotationZMatrix
(
this
.
stepSize
),
n
=
0
;
n
<=
this
.
latheAngle
+
0.001
;
n
+=
this
.
stepSize
){
for
(
j
=
0
;
j
<
d
.
length
;
j
++
)
if
(
n
<
b
){
d
[
j
]
=
k
.
multiplyVector3
(
d
[
j
].
clone
());
this
.
vertices
.
push
(
new
THREE
.
Vertex
(
d
[
j
]));
g
[
j
]
=
this
.
vertices
.
length
-
1
}
else
g
=
h
;
n
==
0
&&
(
h
=
e
);
for
(
j
=
0
;
j
<
e
.
length
-
1
;
j
++
){
this
.
faces
.
push
(
new
THREE
.
Face4
(
g
[
j
],
g
[
j
+
1
],
e
[
j
+
1
],
e
[
j
]));
this
.
uvs
.
push
([
new
THREE
.
UV
(
n
/
b
,
j
/
a
.
length
),
new
THREE
.
UV
(
n
/
b
,(
j
+
1
)
/
a
.
length
),
new
THREE
.
UV
((
n
-
c
)
/
b
,(
j
+
1
)
/
a
.
length
),
new
THREE
.
UV
((
n
-
c
)
/
b
,
j
/
a
.
length
)])}
e
=
g
;
g
=
[]}
this
.
computeCentroids
();
this
.
computeFaceNormals
();
this
.
computeVertexNormals
()}
LathedObject
.
prototype
=
new
THREE
.
Geometry
;
LathedObject
.
prototype
.
constructor
=
LathedObject
;
if
(
!
window
.
Int32Array
){
window
.
Int32Array
=
Array
;
window
.
Float32Array
=
Array
}
THREE
.
MarchingCubes
=
function
(
a
,
c
){
THREE
.
Object3D
.
call
(
this
);
this
.
materials
=
c
instanceof
Array
?
c
:[
c
];
this
.
init
=
function
(
b
){
this
.
isolation
=
80
;
this
.
size
=
b
;
this
.
size2
=
this
.
size
*
this
.
size
;
this
.
size3
=
this
.
size2
*
this
.
size
;
this
.
halfsize
=
this
.
size
/
2
;
this
.
delta
=
2
/
this
.
size
;
this
.
yd
=
this
.
size
;
this
.
zd
=
this
.
size2
;
this
.
field
=
new
Float32Array
(
this
.
size3
);
this
.
normal_cache
=
new
Float32Array
(
this
.
size3
*
3
);
this
.
vlist
=
new
Float32Array
(
36
);
this
.
nlist
=
new
Float32Array
(
36
);
this
.
firstDraw
=!
0
;
this
.
maxCount
=
4096
;
this
.
count
=
...
...
build/custom/ThreeCanvas.js
浏览文件 @
ce751a10
...
...
@@ -48,7 +48,7 @@ b,c)}}};THREE.Quaternion=function(a,b,c,d){this.set(a||0,b||0,c||0,d!==undefined
THREE
.
Quaternion
.
prototype
=
{
set
:
function
(
a
,
b
,
c
,
d
){
this
.
x
=
a
;
this
.
y
=
b
;
this
.
z
=
c
;
this
.
w
=
d
;
return
this
},
setFromEuler
:
function
(
a
){
var
b
=
0.5
*
Math
.
PI
/
360
,
c
=
a
.
x
*
b
,
d
=
a
.
y
*
b
,
e
=
a
.
z
*
b
;
a
=
Math
.
cos
(
d
);
d
=
Math
.
sin
(
d
);
b
=
Math
.
cos
(
-
e
);
e
=
Math
.
sin
(
-
e
);
var
f
=
Math
.
cos
(
c
);
c
=
Math
.
sin
(
c
);
var
g
=
a
*
b
,
j
=
d
*
e
;
this
.
w
=
g
*
f
-
j
*
c
;
this
.
x
=
g
*
c
+
j
*
f
;
this
.
y
=
d
*
b
*
f
+
a
*
e
*
c
;
this
.
z
=
a
*
e
*
f
-
d
*
b
*
c
;
return
this
},
calculateW
:
function
(){
this
.
w
=-
Math
.
sqrt
(
Math
.
abs
(
1
-
this
.
x
*
this
.
x
-
this
.
y
*
this
.
y
-
this
.
z
*
this
.
z
));
return
this
},
inverse
:
function
(){
this
.
x
*=-
1
;
this
.
y
*=
-
1
;
this
.
z
*=-
1
;
return
this
},
length
:
function
(){
return
Math
.
sqrt
(
this
.
x
*
this
.
x
+
this
.
y
*
this
.
y
+
this
.
z
*
this
.
z
+
this
.
w
*
this
.
w
)},
normalize
:
function
(){
var
a
=
Math
.
sqrt
(
this
.
x
*
this
.
x
+
this
.
y
*
this
.
y
+
this
.
z
*
this
.
z
+
this
.
w
*
this
.
w
);
if
(
a
==
0
)
this
.
w
=
this
.
z
=
this
.
y
=
this
.
x
=
0
;
else
{
a
=
1
/
a
;
this
.
x
*=
a
;
this
.
y
*=
a
;
this
.
z
*=
a
;
this
.
w
*=
a
}
return
this
},
multiplySelf
:
function
(
a
){
var
b
=
this
.
x
,
c
=
this
.
y
,
d
=
this
.
z
,
e
=
this
.
w
,
f
=
a
.
x
,
g
=
a
.
y
,
j
=
a
.
z
;
a
=
a
.
w
;
this
.
x
=
b
*
a
+
e
*
f
+
c
*
j
-
d
*
g
;
this
.
y
=
c
*
a
+
e
*
g
+
d
*
f
-
b
*
j
;
this
.
z
=
d
*
a
+
e
*
j
+
b
*
g
-
c
*
f
;
this
.
w
=
e
*
a
-
b
*
f
-
c
*
g
-
d
*
j
;
return
this
},
multiplyVector3
:
function
(
a
,
b
){
b
||
(
b
=
a
);
var
c
=
a
.
x
,
d
=
a
.
y
,
e
=
a
.
z
,
f
=
this
.
x
,
g
=
this
.
y
,
j
=
this
.
z
,
h
=
this
.
w
,
i
=
h
*
c
+
g
*
e
-
j
*
d
,
p
=
h
*
d
+
j
*
c
-
f
*
e
,
n
=
h
*
e
+
f
*
d
-
g
*
c
;
c
=-
f
*
c
-
g
*
d
-
j
*
e
;
b
.
x
=
i
*
h
+
c
*-
f
+
p
*-
j
-
n
*-
g
;
b
.
y
=
p
*
h
+
c
*-
g
+
n
*-
f
-
i
*-
j
;
b
.
z
=
n
*
h
+
c
*-
j
+
i
*-
g
-
p
*-
f
;
return
b
}};
THREE
.
Quaternion
.
slerp
=
function
(
a
,
b
,
c
,
d
){
var
e
=
a
.
w
*
b
.
w
+
a
.
x
*
b
.
x
+
a
.
y
*
b
.
y
+
a
.
z
*
b
.
z
;
if
(
Math
.
abs
(
e
)
>=
1
){
c
.
w
=
a
.
w
;
c
.
x
=
a
.
x
;
c
.
y
=
a
.
y
;
c
.
z
=
a
.
z
;
return
c
}
var
f
=
Math
.
acos
(
e
),
g
=
Math
.
sqrt
(
1
-
e
*
e
);
if
(
Math
.
abs
(
g
)
<
0.001
0
){
c
.
w
=
0.5
*
(
a
.
w
+
b
.
w
);
c
.
x
=
0.5
*
(
a
.
x
+
b
.
x
);
c
.
y
=
0.5
*
(
a
.
y
+
b
.
y
);
c
.
z
=
0.5
*
(
a
.
z
+
b
.
z
);
return
c
}
e
=
Math
.
sin
((
1
-
d
)
*
f
)
/
g
;
d
=
Math
.
sin
(
d
*
f
)
/
g
;
c
.
w
=
a
.
w
*
e
+
b
.
w
*
d
;
c
.
x
=
a
.
x
*
e
+
b
.
x
*
d
;
c
.
y
=
a
.
y
*
e
+
b
.
y
*
d
;
c
.
z
=
a
.
z
*
e
+
b
.
z
*
d
;
return
c
};
THREE
.
Quaternion
.
slerp
=
function
(
a
,
b
,
c
,
d
){
var
e
=
a
.
w
*
b
.
w
+
a
.
x
*
b
.
x
+
a
.
y
*
b
.
y
+
a
.
z
*
b
.
z
;
if
(
Math
.
abs
(
e
)
>=
1
){
c
.
w
=
a
.
w
;
c
.
x
=
a
.
x
;
c
.
y
=
a
.
y
;
c
.
z
=
a
.
z
;
return
c
}
var
f
=
Math
.
acos
(
e
),
g
=
Math
.
sqrt
(
1
-
e
*
e
);
if
(
Math
.
abs
(
g
)
<
0.001
){
c
.
w
=
0.5
*
(
a
.
w
+
b
.
w
);
c
.
x
=
0.5
*
(
a
.
x
+
b
.
x
);
c
.
y
=
0.5
*
(
a
.
y
+
b
.
y
);
c
.
z
=
0.5
*
(
a
.
z
+
b
.
z
);
return
c
}
e
=
Math
.
sin
((
1
-
d
)
*
f
)
/
g
;
d
=
Math
.
sin
(
d
*
f
)
/
g
;
c
.
w
=
a
.
w
*
e
+
b
.
w
*
d
;
c
.
x
=
a
.
x
*
e
+
b
.
x
*
d
;
c
.
y
=
a
.
y
*
e
+
b
.
y
*
d
;
c
.
z
=
a
.
z
*
e
+
b
.
z
*
d
;
return
c
};
THREE
.
Vertex
=
function
(
a
,
b
){
this
.
position
=
a
||
new
THREE
.
Vector3
;
this
.
positionWorld
=
new
THREE
.
Vector3
;
this
.
positionScreen
=
new
THREE
.
Vector4
;
this
.
normal
=
b
||
new
THREE
.
Vector3
;
this
.
normalWorld
=
new
THREE
.
Vector3
;
this
.
normalScreen
=
new
THREE
.
Vector3
;
this
.
tangent
=
new
THREE
.
Vector4
;
this
.
__visible
=!
0
};
THREE
.
Face3
=
function
(
a
,
b
,
c
,
d
,
e
){
this
.
a
=
a
;
this
.
b
=
b
;
this
.
c
=
c
;
this
.
centroid
=
new
THREE
.
Vector3
;
this
.
normal
=
d
instanceof
THREE
.
Vector3
?
d
:
new
THREE
.
Vector3
;
this
.
vertexNormals
=
d
instanceof
Array
?
d
:[];
this
.
materials
=
e
instanceof
Array
?
e
:[
e
]};
THREE
.
Face4
=
function
(
a
,
b
,
c
,
d
,
e
,
f
){
this
.
a
=
a
;
this
.
b
=
b
;
this
.
c
=
c
;
this
.
d
=
d
;
this
.
centroid
=
new
THREE
.
Vector3
;
this
.
normal
=
e
instanceof
THREE
.
Vector3
?
e
:
new
THREE
.
Vector3
;
this
.
vertexNormals
=
e
instanceof
Array
?
e
:[];
this
.
materials
=
f
instanceof
Array
?
f
:[
f
]};
THREE
.
UV
=
function
(
a
,
b
){
this
.
set
(
a
||
0
,
b
||
0
)};
THREE
.
UV
.
prototype
=
{
set
:
function
(
a
,
b
){
this
.
u
=
a
;
this
.
v
=
b
;
return
this
},
copy
:
function
(
a
){
this
.
set
(
a
.
u
,
a
.
v
);
return
this
}};
THREE
.
Geometry
=
function
(){
this
.
id
=
"
Geometry
"
+
THREE
.
GeometryIdCounter
++
;
this
.
vertices
=
[];
this
.
faces
=
[];
this
.
uvs
=
[];
this
.
uvs2
=
[];
this
.
colors
=
[];
this
.
skinWeights
=
[];
this
.
skinIndices
=
[];
this
.
boundingSphere
=
this
.
boundingBox
=
null
;
this
.
hasTangents
=!
1
};
...
...
build/custom/ThreeDOM.js
浏览文件 @
ce751a10
...
...
@@ -48,7 +48,7 @@ b,c)}}};THREE.Quaternion=function(a,b,c,d){this.set(a||0,b||0,c||0,d!==undefined
THREE
.
Quaternion
.
prototype
=
{
set
:
function
(
a
,
b
,
c
,
d
){
this
.
x
=
a
;
this
.
y
=
b
;
this
.
z
=
c
;
this
.
w
=
d
;
return
this
},
setFromEuler
:
function
(
a
){
var
b
=
0.5
*
Math
.
PI
/
360
,
c
=
a
.
x
*
b
,
d
=
a
.
y
*
b
,
e
=
a
.
z
*
b
;
a
=
Math
.
cos
(
d
);
d
=
Math
.
sin
(
d
);
b
=
Math
.
cos
(
-
e
);
e
=
Math
.
sin
(
-
e
);
var
f
=
Math
.
cos
(
c
);
c
=
Math
.
sin
(
c
);
var
g
=
a
*
b
,
i
=
d
*
e
;
this
.
w
=
g
*
f
-
i
*
c
;
this
.
x
=
g
*
c
+
i
*
f
;
this
.
y
=
d
*
b
*
f
+
a
*
e
*
c
;
this
.
z
=
a
*
e
*
f
-
d
*
b
*
c
;
return
this
},
calculateW
:
function
(){
this
.
w
=-
Math
.
sqrt
(
Math
.
abs
(
1
-
this
.
x
*
this
.
x
-
this
.
y
*
this
.
y
-
this
.
z
*
this
.
z
));
return
this
},
inverse
:
function
(){
this
.
x
*=-
1
;
this
.
y
*=
-
1
;
this
.
z
*=-
1
;
return
this
},
length
:
function
(){
return
Math
.
sqrt
(
this
.
x
*
this
.
x
+
this
.
y
*
this
.
y
+
this
.
z
*
this
.
z
+
this
.
w
*
this
.
w
)},
normalize
:
function
(){
var
a
=
Math
.
sqrt
(
this
.
x
*
this
.
x
+
this
.
y
*
this
.
y
+
this
.
z
*
this
.
z
+
this
.
w
*
this
.
w
);
if
(
a
==
0
)
this
.
w
=
this
.
z
=
this
.
y
=
this
.
x
=
0
;
else
{
a
=
1
/
a
;
this
.
x
*=
a
;
this
.
y
*=
a
;
this
.
z
*=
a
;
this
.
w
*=
a
}
return
this
},
multiplySelf
:
function
(
a
){
var
b
=
this
.
x
,
c
=
this
.
y
,
d
=
this
.
z
,
e
=
this
.
w
,
f
=
a
.
x
,
g
=
a
.
y
,
i
=
a
.
z
;
a
=
a
.
w
;
this
.
x
=
b
*
a
+
e
*
f
+
c
*
i
-
d
*
g
;
this
.
y
=
c
*
a
+
e
*
g
+
d
*
f
-
b
*
i
;
this
.
z
=
d
*
a
+
e
*
i
+
b
*
g
-
c
*
f
;
this
.
w
=
e
*
a
-
b
*
f
-
c
*
g
-
d
*
i
;
return
this
},
multiplyVector3
:
function
(
a
,
b
){
b
||
(
b
=
a
);
var
c
=
a
.
x
,
d
=
a
.
y
,
e
=
a
.
z
,
f
=
this
.
x
,
g
=
this
.
y
,
i
=
this
.
z
,
h
=
this
.
w
,
j
=
h
*
c
+
g
*
e
-
i
*
d
,
n
=
h
*
d
+
i
*
c
-
f
*
e
,
m
=
h
*
e
+
f
*
d
-
g
*
c
;
c
=-
f
*
c
-
g
*
d
-
i
*
e
;
b
.
x
=
j
*
h
+
c
*-
f
+
n
*-
i
-
m
*-
g
;
b
.
y
=
n
*
h
+
c
*-
g
+
m
*-
f
-
j
*-
i
;
b
.
z
=
m
*
h
+
c
*-
i
+
j
*-
g
-
n
*-
f
;
return
b
}};
THREE
.
Quaternion
.
slerp
=
function
(
a
,
b
,
c
,
d
){
var
e
=
a
.
w
*
b
.
w
+
a
.
x
*
b
.
x
+
a
.
y
*
b
.
y
+
a
.
z
*
b
.
z
;
if
(
Math
.
abs
(
e
)
>=
1
){
c
.
w
=
a
.
w
;
c
.
x
=
a
.
x
;
c
.
y
=
a
.
y
;
c
.
z
=
a
.
z
;
return
c
}
var
f
=
Math
.
acos
(
e
),
g
=
Math
.
sqrt
(
1
-
e
*
e
);
if
(
Math
.
abs
(
g
)
<
0.001
0
){
c
.
w
=
0.5
*
(
a
.
w
+
b
.
w
);
c
.
x
=
0.5
*
(
a
.
x
+
b
.
x
);
c
.
y
=
0.5
*
(
a
.
y
+
b
.
y
);
c
.
z
=
0.5
*
(
a
.
z
+
b
.
z
);
return
c
}
e
=
Math
.
sin
((
1
-
d
)
*
f
)
/
g
;
d
=
Math
.
sin
(
d
*
f
)
/
g
;
c
.
w
=
a
.
w
*
e
+
b
.
w
*
d
;
c
.
x
=
a
.
x
*
e
+
b
.
x
*
d
;
c
.
y
=
a
.
y
*
e
+
b
.
y
*
d
;
c
.
z
=
a
.
z
*
e
+
b
.
z
*
d
;
return
c
};
THREE
.
Quaternion
.
slerp
=
function
(
a
,
b
,
c
,
d
){
var
e
=
a
.
w
*
b
.
w
+
a
.
x
*
b
.
x
+
a
.
y
*
b
.
y
+
a
.
z
*
b
.
z
;
if
(
Math
.
abs
(
e
)
>=
1
){
c
.
w
=
a
.
w
;
c
.
x
=
a
.
x
;
c
.
y
=
a
.
y
;
c
.
z
=
a
.
z
;
return
c
}
var
f
=
Math
.
acos
(
e
),
g
=
Math
.
sqrt
(
1
-
e
*
e
);
if
(
Math
.
abs
(
g
)
<
0.001
){
c
.
w
=
0.5
*
(
a
.
w
+
b
.
w
);
c
.
x
=
0.5
*
(
a
.
x
+
b
.
x
);
c
.
y
=
0.5
*
(
a
.
y
+
b
.
y
);
c
.
z
=
0.5
*
(
a
.
z
+
b
.
z
);
return
c
}
e
=
Math
.
sin
((
1
-
d
)
*
f
)
/
g
;
d
=
Math
.
sin
(
d
*
f
)
/
g
;
c
.
w
=
a
.
w
*
e
+
b
.
w
*
d
;
c
.
x
=
a
.
x
*
e
+
b
.
x
*
d
;
c
.
y
=
a
.
y
*
e
+
b
.
y
*
d
;
c
.
z
=
a
.
z
*
e
+
b
.
z
*
d
;
return
c
};
THREE
.
Vertex
=
function
(
a
,
b
){
this
.
position
=
a
||
new
THREE
.
Vector3
;
this
.
positionWorld
=
new
THREE
.
Vector3
;
this
.
positionScreen
=
new
THREE
.
Vector4
;
this
.
normal
=
b
||
new
THREE
.
Vector3
;
this
.
normalWorld
=
new
THREE
.
Vector3
;
this
.
normalScreen
=
new
THREE
.
Vector3
;
this
.
tangent
=
new
THREE
.
Vector4
;
this
.
__visible
=!
0
};
THREE
.
Face3
=
function
(
a
,
b
,
c
,
d
,
e
){
this
.
a
=
a
;
this
.
b
=
b
;
this
.
c
=
c
;
this
.
centroid
=
new
THREE
.
Vector3
;
this
.
normal
=
d
instanceof
THREE
.
Vector3
?
d
:
new
THREE
.
Vector3
;
this
.
vertexNormals
=
d
instanceof
Array
?
d
:[];
this
.
materials
=
e
instanceof
Array
?
e
:[
e
]};
THREE
.
Face4
=
function
(
a
,
b
,
c
,
d
,
e
,
f
){
this
.
a
=
a
;
this
.
b
=
b
;
this
.
c
=
c
;
this
.
d
=
d
;
this
.
centroid
=
new
THREE
.
Vector3
;
this
.
normal
=
e
instanceof
THREE
.
Vector3
?
e
:
new
THREE
.
Vector3
;
this
.
vertexNormals
=
e
instanceof
Array
?
e
:[];
this
.
materials
=
f
instanceof
Array
?
f
:[
f
]};
THREE
.
UV
=
function
(
a
,
b
){
this
.
set
(
a
||
0
,
b
||
0
)};
THREE
.
UV
.
prototype
=
{
set
:
function
(
a
,
b
){
this
.
u
=
a
;
this
.
v
=
b
;
return
this
},
copy
:
function
(
a
){
this
.
set
(
a
.
u
,
a
.
v
);
return
this
}};
THREE
.
Camera
=
function
(
a
,
b
,
c
,
d
,
e
){
THREE
.
Object3D
.
call
(
this
);
this
.
fov
=
a
||
50
;
this
.
aspect
=
b
||
1
;
this
.
near
=
c
||
0.1
;
this
.
far
=
d
||
2
E3
;
this
.
target
=
e
||
new
THREE
.
Object3D
;
this
.
useTarget
=!
0
;
this
.
matrixWorldInverse
=
new
THREE
.
Matrix4
;
this
.
projectionMatrix
=
null
;
this
.
updateProjectionMatrix
()};
THREE
.
Camera
.
prototype
=
new
THREE
.
Object3D
;
...
...
build/custom/ThreeExtras.js
浏览文件 @
ce751a10
...
...
@@ -38,7 +38,7 @@ var Torus=function(a,d,b,f){this.radius=a||100;this.tube=d||40;this.segmentsR=b|
var
Icosahedron
=
function
(
a
){
function
d
(
v
,
q
,
n
){
var
p
=
Math
.
sqrt
(
v
*
v
+
q
*
q
+
n
*
n
);
return
h
.
vertices
.
push
(
new
THREE
.
Vertex
(
new
THREE
.
Vector3
(
v
/
p
,
q
/
p
,
n
/
p
)))
-
1
}
function
b
(
v
,
q
,
n
,
p
){
p
.
faces
.
push
(
new
THREE
.
Face3
(
v
,
q
,
n
))}
function
f
(
v
,
q
){
var
n
=
h
.
vertices
[
v
].
position
,
p
=
h
.
vertices
[
q
].
position
;
return
d
((
n
.
x
+
p
.
x
)
/
2
,(
n
.
y
+
p
.
y
)
/
2
,(
n
.
z
+
p
.
z
)
/
2
)}
var
h
=
this
,
c
=
new
THREE
.
Geometry
,
e
;
this
.
subdivisions
=
a
||
0
;
THREE
.
Geometry
.
call
(
this
);
a
=
(
1
+
Math
.
sqrt
(
5
))
/
2
;
d
(
-
1
,
a
,
0
);
d
(
1
,
a
,
0
);
d
(
-
1
,
-
a
,
0
);
d
(
1
,
-
a
,
0
);
d
(
0
,
-
1
,
a
);
d
(
0
,
1
,
a
);
d
(
0
,
-
1
,
-
a
);
d
(
0
,
1
,
-
a
);
d
(
a
,
0
,
-
1
);
d
(
a
,
0
,
1
);
d
(
-
a
,
0
,
-
1
);
d
(
-
a
,
0
,
1
);
b
(
0
,
11
,
5
,
c
);
b
(
0
,
5
,
1
,
c
);
b
(
0
,
1
,
7
,
c
);
b
(
0
,
7
,
10
,
c
);
b
(
0
,
10
,
11
,
c
);
b
(
1
,
5
,
9
,
c
);
b
(
5
,
11
,
4
,
c
);
b
(
11
,
10
,
2
,
c
);
b
(
10
,
7
,
6
,
c
);
b
(
7
,
1
,
8
,
c
);
b
(
3
,
9
,
4
,
c
);
b
(
3
,
4
,
2
,
c
);
b
(
3
,
2
,
6
,
c
);
b
(
3
,
6
,
8
,
c
);
b
(
3
,
8
,
9
,
c
);
b
(
4
,
9
,
5
,
c
);
b
(
2
,
4
,
11
,
c
);
b
(
6
,
2
,
10
,
c
);
b
(
8
,
6
,
7
,
c
);
b
(
9
,
8
,
1
,
c
);
for
(
a
=
0
;
a
<
this
.
subdivisions
;
a
++
){
e
=
new
THREE
.
Geometry
;
for
(
var
g
in
c
.
faces
){
var
j
=
f
(
c
.
faces
[
g
].
a
,
c
.
faces
[
g
].
b
),
m
=
f
(
c
.
faces
[
g
].
b
,
c
.
faces
[
g
].
c
),
k
=
f
(
c
.
faces
[
g
].
c
,
c
.
faces
[
g
].
a
);
b
(
c
.
faces
[
g
].
a
,
j
,
k
,
e
);
b
(
c
.
faces
[
g
].
b
,
m
,
j
,
e
);
b
(
c
.
faces
[
g
].
c
,
k
,
m
,
e
);
b
(
j
,
m
,
k
,
e
)}
c
.
faces
=
e
.
faces
}
h
.
faces
=
c
.
faces
;
delete
c
;
delete
e
;
this
.
computeCentroids
();
this
.
computeFaceNormals
();
this
.
computeVertexNormals
()};
Icosahedron
.
prototype
=
new
THREE
.
Geometry
;
Icosahedron
.
prototype
.
constructor
=
Icosahedron
;
function
LathedObject
(
a
,
d
,
b
){
THREE
.
Geometry
.
call
(
this
);
this
.
nsteps
=
d
||
12
;
this
.
latheAngle
=
b
||
2
*
Math
.
PI
;
d
=
this
.
latheAngle
/
this
.
nsteps
;
for
(
var
f
=
[],
h
=
[],
c
=
[],
e
=
[],
g
=
0
;
g
<
a
.
length
;
g
++
){
this
.
vertices
.
push
(
new
THREE
.
Vertex
(
a
[
g
]));
h
[
g
]
=
this
.
vertices
.
length
-
1
;
f
[
g
]
=
new
THREE
.
Vector3
(
a
[
g
].
x
,
a
[
g
].
y
,
a
[
g
].
z
)}
for
(
var
j
=
THREE
.
Matrix4
.
rotationZMatrix
(
this
.
stepSize
),
m
=
0
;
m
<=
this
.
latheAngle
+
0.001
0
;
m
+=
this
.
stepSize
){
for
(
g
=
0
;
g
<
f
.
length
;
g
++
)
if
(
m
<
b
){
f
[
g
]
=
j
.
multiplyVector3
(
f
[
g
].
clone
());
this
.
vertices
.
push
(
new
THREE
.
Vertex
(
f
[
g
]));
function
LathedObject
(
a
,
d
,
b
){
THREE
.
Geometry
.
call
(
this
);
this
.
nsteps
=
d
||
12
;
this
.
latheAngle
=
b
||
2
*
Math
.
PI
;
d
=
this
.
latheAngle
/
this
.
nsteps
;
for
(
var
f
=
[],
h
=
[],
c
=
[],
e
=
[],
g
=
0
;
g
<
a
.
length
;
g
++
){
this
.
vertices
.
push
(
new
THREE
.
Vertex
(
a
[
g
]));
h
[
g
]
=
this
.
vertices
.
length
-
1
;
f
[
g
]
=
new
THREE
.
Vector3
(
a
[
g
].
x
,
a
[
g
].
y
,
a
[
g
].
z
)}
for
(
var
j
=
THREE
.
Matrix4
.
rotationZMatrix
(
this
.
stepSize
),
m
=
0
;
m
<=
this
.
latheAngle
+
0.001
;
m
+=
this
.
stepSize
){
for
(
g
=
0
;
g
<
f
.
length
;
g
++
)
if
(
m
<
b
){
f
[
g
]
=
j
.
multiplyVector3
(
f
[
g
].
clone
());
this
.
vertices
.
push
(
new
THREE
.
Vertex
(
f
[
g
]));
c
[
g
]
=
this
.
vertices
.
length
-
1
}
else
c
=
e
;
m
==
0
&&
(
e
=
h
);
for
(
g
=
0
;
g
<
h
.
length
-
1
;
g
++
){
this
.
faces
.
push
(
new
THREE
.
Face4
(
c
[
g
],
c
[
g
+
1
],
h
[
g
+
1
],
h
[
g
]));
this
.
uvs
.
push
([
new
THREE
.
UV
(
m
/
b
,
g
/
a
.
length
),
new
THREE
.
UV
(
m
/
b
,(
g
+
1
)
/
a
.
length
),
new
THREE
.
UV
((
m
-
d
)
/
b
,(
g
+
1
)
/
a
.
length
),
new
THREE
.
UV
((
m
-
d
)
/
b
,
g
/
a
.
length
)])}
h
=
c
;
c
=
[]}
this
.
computeCentroids
();
this
.
computeFaceNormals
();
this
.
computeVertexNormals
()}
LathedObject
.
prototype
=
new
THREE
.
Geometry
;
LathedObject
.
prototype
.
constructor
=
LathedObject
;
if
(
!
window
.
Int32Array
){
window
.
Int32Array
=
Array
;
window
.
Float32Array
=
Array
}
THREE
.
MarchingCubes
=
function
(
a
,
d
){
THREE
.
Object3D
.
call
(
this
);
this
.
materials
=
d
instanceof
Array
?
d
:[
d
];
this
.
init
=
function
(
b
){
this
.
isolation
=
80
;
this
.
size
=
b
;
this
.
size2
=
this
.
size
*
this
.
size
;
this
.
size3
=
this
.
size2
*
this
.
size
;
this
.
halfsize
=
this
.
size
/
2
;
this
.
delta
=
2
/
this
.
size
;
this
.
yd
=
this
.
size
;
this
.
zd
=
this
.
size2
;
this
.
field
=
new
Float32Array
(
this
.
size3
);
this
.
normal_cache
=
new
Float32Array
(
this
.
size3
*
3
);
this
.
vlist
=
new
Float32Array
(
36
);
this
.
nlist
=
new
Float32Array
(
36
);
this
.
firstDraw
=!
0
;
this
.
maxCount
=
4096
;
this
.
count
=
...
...
build/custom/ThreeSVG.js
浏览文件 @
ce751a10
...
...
@@ -48,7 +48,7 @@ b,c)}}};THREE.Quaternion=function(a,b,c,d){this.set(a||0,b||0,c||0,d!==undefined
THREE
.
Quaternion
.
prototype
=
{
set
:
function
(
a
,
b
,
c
,
d
){
this
.
x
=
a
;
this
.
y
=
b
;
this
.
z
=
c
;
this
.
w
=
d
;
return
this
},
setFromEuler
:
function
(
a
){
var
b
=
0.5
*
Math
.
PI
/
360
,
c
=
a
.
x
*
b
,
d
=
a
.
y
*
b
,
e
=
a
.
z
*
b
;
a
=
Math
.
cos
(
d
);
d
=
Math
.
sin
(
d
);
b
=
Math
.
cos
(
-
e
);
e
=
Math
.
sin
(
-
e
);
var
f
=
Math
.
cos
(
c
);
c
=
Math
.
sin
(
c
);
var
g
=
a
*
b
,
i
=
d
*
e
;
this
.
w
=
g
*
f
-
i
*
c
;
this
.
x
=
g
*
c
+
i
*
f
;
this
.
y
=
d
*
b
*
f
+
a
*
e
*
c
;
this
.
z
=
a
*
e
*
f
-
d
*
b
*
c
;
return
this
},
calculateW
:
function
(){
this
.
w
=-
Math
.
sqrt
(
Math
.
abs
(
1
-
this
.
x
*
this
.
x
-
this
.
y
*
this
.
y
-
this
.
z
*
this
.
z
));
return
this
},
inverse
:
function
(){
this
.
x
*=-
1
;
this
.
y
*=
-
1
;
this
.
z
*=-
1
;
return
this
},
length
:
function
(){
return
Math
.
sqrt
(
this
.
x
*
this
.
x
+
this
.
y
*
this
.
y
+
this
.
z
*
this
.
z
+
this
.
w
*
this
.
w
)},
normalize
:
function
(){
var
a
=
Math
.
sqrt
(
this
.
x
*
this
.
x
+
this
.
y
*
this
.
y
+
this
.
z
*
this
.
z
+
this
.
w
*
this
.
w
);
if
(
a
==
0
)
this
.
w
=
this
.
z
=
this
.
y
=
this
.
x
=
0
;
else
{
a
=
1
/
a
;
this
.
x
*=
a
;
this
.
y
*=
a
;
this
.
z
*=
a
;
this
.
w
*=
a
}
return
this
},
multiplySelf
:
function
(
a
){
var
b
=
this
.
x
,
c
=
this
.
y
,
d
=
this
.
z
,
e
=
this
.
w
,
f
=
a
.
x
,
g
=
a
.
y
,
i
=
a
.
z
;
a
=
a
.
w
;
this
.
x
=
b
*
a
+
e
*
f
+
c
*
i
-
d
*
g
;
this
.
y
=
c
*
a
+
e
*
g
+
d
*
f
-
b
*
i
;
this
.
z
=
d
*
a
+
e
*
i
+
b
*
g
-
c
*
f
;
this
.
w
=
e
*
a
-
b
*
f
-
c
*
g
-
d
*
i
;
return
this
},
multiplyVector3
:
function
(
a
,
b
){
b
||
(
b
=
a
);
var
c
=
a
.
x
,
d
=
a
.
y
,
e
=
a
.
z
,
f
=
this
.
x
,
g
=
this
.
y
,
i
=
this
.
z
,
h
=
this
.
w
,
l
=
h
*
c
+
g
*
e
-
i
*
d
,
n
=
h
*
d
+
i
*
c
-
f
*
e
,
m
=
h
*
e
+
f
*
d
-
g
*
c
;
c
=-
f
*
c
-
g
*
d
-
i
*
e
;
b
.
x
=
l
*
h
+
c
*-
f
+
n
*-
i
-
m
*-
g
;
b
.
y
=
n
*
h
+
c
*-
g
+
m
*-
f
-
l
*-
i
;
b
.
z
=
m
*
h
+
c
*-
i
+
l
*-
g
-
n
*-
f
;
return
b
}};
THREE
.
Quaternion
.
slerp
=
function
(
a
,
b
,
c
,
d
){
var
e
=
a
.
w
*
b
.
w
+
a
.
x
*
b
.
x
+
a
.
y
*
b
.
y
+
a
.
z
*
b
.
z
;
if
(
Math
.
abs
(
e
)
>=
1
){
c
.
w
=
a
.
w
;
c
.
x
=
a
.
x
;
c
.
y
=
a
.
y
;
c
.
z
=
a
.
z
;
return
c
}
var
f
=
Math
.
acos
(
e
),
g
=
Math
.
sqrt
(
1
-
e
*
e
);
if
(
Math
.
abs
(
g
)
<
0.001
0
){
c
.
w
=
0.5
*
(
a
.
w
+
b
.
w
);
c
.
x
=
0.5
*
(
a
.
x
+
b
.
x
);
c
.
y
=
0.5
*
(
a
.
y
+
b
.
y
);
c
.
z
=
0.5
*
(
a
.
z
+
b
.
z
);
return
c
}
e
=
Math
.
sin
((
1
-
d
)
*
f
)
/
g
;
d
=
Math
.
sin
(
d
*
f
)
/
g
;
c
.
w
=
a
.
w
*
e
+
b
.
w
*
d
;
c
.
x
=
a
.
x
*
e
+
b
.
x
*
d
;
c
.
y
=
a
.
y
*
e
+
b
.
y
*
d
;
c
.
z
=
a
.
z
*
e
+
b
.
z
*
d
;
return
c
};
THREE
.
Quaternion
.
slerp
=
function
(
a
,
b
,
c
,
d
){
var
e
=
a
.
w
*
b
.
w
+
a
.
x
*
b
.
x
+
a
.
y
*
b
.
y
+
a
.
z
*
b
.
z
;
if
(
Math
.
abs
(
e
)
>=
1
){
c
.
w
=
a
.
w
;
c
.
x
=
a
.
x
;
c
.
y
=
a
.
y
;
c
.
z
=
a
.
z
;
return
c
}
var
f
=
Math
.
acos
(
e
),
g
=
Math
.
sqrt
(
1
-
e
*
e
);
if
(
Math
.
abs
(
g
)
<
0.001
){
c
.
w
=
0.5
*
(
a
.
w
+
b
.
w
);
c
.
x
=
0.5
*
(
a
.
x
+
b
.
x
);
c
.
y
=
0.5
*
(
a
.
y
+
b
.
y
);
c
.
z
=
0.5
*
(
a
.
z
+
b
.
z
);
return
c
}
e
=
Math
.
sin
((
1
-
d
)
*
f
)
/
g
;
d
=
Math
.
sin
(
d
*
f
)
/
g
;
c
.
w
=
a
.
w
*
e
+
b
.
w
*
d
;
c
.
x
=
a
.
x
*
e
+
b
.
x
*
d
;
c
.
y
=
a
.
y
*
e
+
b
.
y
*
d
;
c
.
z
=
a
.
z
*
e
+
b
.
z
*
d
;
return
c
};
THREE
.
Vertex
=
function
(
a
,
b
){
this
.
position
=
a
||
new
THREE
.
Vector3
;
this
.
positionWorld
=
new
THREE
.
Vector3
;
this
.
positionScreen
=
new
THREE
.
Vector4
;
this
.
normal
=
b
||
new
THREE
.
Vector3
;
this
.
normalWorld
=
new
THREE
.
Vector3
;
this
.
normalScreen
=
new
THREE
.
Vector3
;
this
.
tangent
=
new
THREE
.
Vector4
;
this
.
__visible
=!
0
};
THREE
.
Face3
=
function
(
a
,
b
,
c
,
d
,
e
){
this
.
a
=
a
;
this
.
b
=
b
;
this
.
c
=
c
;
this
.
centroid
=
new
THREE
.
Vector3
;
this
.
normal
=
d
instanceof
THREE
.
Vector3
?
d
:
new
THREE
.
Vector3
;
this
.
vertexNormals
=
d
instanceof
Array
?
d
:[];
this
.
materials
=
e
instanceof
Array
?
e
:[
e
]};
THREE
.
Face4
=
function
(
a
,
b
,
c
,
d
,
e
,
f
){
this
.
a
=
a
;
this
.
b
=
b
;
this
.
c
=
c
;
this
.
d
=
d
;
this
.
centroid
=
new
THREE
.
Vector3
;
this
.
normal
=
e
instanceof
THREE
.
Vector3
?
e
:
new
THREE
.
Vector3
;
this
.
vertexNormals
=
e
instanceof
Array
?
e
:[];
this
.
materials
=
f
instanceof
Array
?
f
:[
f
]};
THREE
.
UV
=
function
(
a
,
b
){
this
.
set
(
a
||
0
,
b
||
0
)};
THREE
.
UV
.
prototype
=
{
set
:
function
(
a
,
b
){
this
.
u
=
a
;
this
.
v
=
b
;
return
this
},
copy
:
function
(
a
){
this
.
set
(
a
.
u
,
a
.
v
);
return
this
}};
THREE
.
Geometry
=
function
(){
this
.
id
=
"
Geometry
"
+
THREE
.
GeometryIdCounter
++
;
this
.
vertices
=
[];
this
.
faces
=
[];
this
.
uvs
=
[];
this
.
uvs2
=
[];
this
.
colors
=
[];
this
.
skinWeights
=
[];
this
.
skinIndices
=
[];
this
.
boundingSphere
=
this
.
boundingBox
=
null
;
this
.
hasTangents
=!
1
};
...
...
build/custom/ThreeWebGL.js
浏览文件 @
ce751a10
...
...
@@ -48,7 +48,7 @@ b,d)}}};THREE.Quaternion=function(a,b,d,e){this.set(a||0,b||0,d||0,e!==undefined
THREE
.
Quaternion
.
prototype
=
{
set
:
function
(
a
,
b
,
d
,
e
){
this
.
x
=
a
;
this
.
y
=
b
;
this
.
z
=
d
;
this
.
w
=
e
;
return
this
},
setFromEuler
:
function
(
a
){
var
b
=
0.5
*
Math
.
PI
/
360
,
d
=
a
.
x
*
b
,
e
=
a
.
y
*
b
,
g
=
a
.
z
*
b
;
a
=
Math
.
cos
(
e
);
e
=
Math
.
sin
(
e
);
b
=
Math
.
cos
(
-
g
);
g
=
Math
.
sin
(
-
g
);
var
k
=
Math
.
cos
(
d
);
d
=
Math
.
sin
(
d
);
var
l
=
a
*
b
,
o
=
e
*
g
;
this
.
w
=
l
*
k
-
o
*
d
;
this
.
x
=
l
*
d
+
o
*
k
;
this
.
y
=
e
*
b
*
k
+
a
*
g
*
d
;
this
.
z
=
a
*
g
*
k
-
e
*
b
*
d
;
return
this
},
calculateW
:
function
(){
this
.
w
=-
Math
.
sqrt
(
Math
.
abs
(
1
-
this
.
x
*
this
.
x
-
this
.
y
*
this
.
y
-
this
.
z
*
this
.
z
));
return
this
},
inverse
:
function
(){
this
.
x
*=-
1
;
this
.
y
*=
-
1
;
this
.
z
*=-
1
;
return
this
},
length
:
function
(){
return
Math
.
sqrt
(
this
.
x
*
this
.
x
+
this
.
y
*
this
.
y
+
this
.
z
*
this
.
z
+
this
.
w
*
this
.
w
)},
normalize
:
function
(){
var
a
=
Math
.
sqrt
(
this
.
x
*
this
.
x
+
this
.
y
*
this
.
y
+
this
.
z
*
this
.
z
+
this
.
w
*
this
.
w
);
if
(
a
==
0
)
this
.
w
=
this
.
z
=
this
.
y
=
this
.
x
=
0
;
else
{
a
=
1
/
a
;
this
.
x
*=
a
;
this
.
y
*=
a
;
this
.
z
*=
a
;
this
.
w
*=
a
}
return
this
},
multiplySelf
:
function
(
a
){
var
b
=
this
.
x
,
d
=
this
.
y
,
e
=
this
.
z
,
g
=
this
.
w
,
k
=
a
.
x
,
l
=
a
.
y
,
o
=
a
.
z
;
a
=
a
.
w
;
this
.
x
=
b
*
a
+
g
*
k
+
d
*
o
-
e
*
l
;
this
.
y
=
d
*
a
+
g
*
l
+
e
*
k
-
b
*
o
;
this
.
z
=
e
*
a
+
g
*
o
+
b
*
l
-
d
*
k
;
this
.
w
=
g
*
a
-
b
*
k
-
d
*
l
-
e
*
o
;
return
this
},
multiplyVector3
:
function
(
a
,
b
){
b
||
(
b
=
a
);
var
d
=
a
.
x
,
e
=
a
.
y
,
g
=
a
.
z
,
k
=
this
.
x
,
l
=
this
.
y
,
o
=
this
.
z
,
n
=
this
.
w
,
w
=
n
*
d
+
l
*
g
-
o
*
e
,
z
=
n
*
e
+
o
*
d
-
k
*
g
,
x
=
n
*
g
+
k
*
e
-
l
*
d
;
d
=-
k
*
d
-
l
*
e
-
o
*
g
;
b
.
x
=
w
*
n
+
d
*-
k
+
z
*-
o
-
x
*-
l
;
b
.
y
=
z
*
n
+
d
*-
l
+
x
*-
k
-
w
*-
o
;
b
.
z
=
x
*
n
+
d
*-
o
+
w
*-
l
-
z
*-
k
;
return
b
}};
THREE
.
Quaternion
.
slerp
=
function
(
a
,
b
,
d
,
e
){
var
g
=
a
.
w
*
b
.
w
+
a
.
x
*
b
.
x
+
a
.
y
*
b
.
y
+
a
.
z
*
b
.
z
;
if
(
Math
.
abs
(
g
)
>=
1
){
d
.
w
=
a
.
w
;
d
.
x
=
a
.
x
;
d
.
y
=
a
.
y
;
d
.
z
=
a
.
z
;
return
d
}
var
k
=
Math
.
acos
(
g
),
l
=
Math
.
sqrt
(
1
-
g
*
g
);
if
(
Math
.
abs
(
l
)
<
0.001
0
){
d
.
w
=
0.5
*
(
a
.
w
+
b
.
w
);
d
.
x
=
0.5
*
(
a
.
x
+
b
.
x
);
d
.
y
=
0.5
*
(
a
.
y
+
b
.
y
);
d
.
z
=
0.5
*
(
a
.
z
+
b
.
z
);
return
d
}
g
=
Math
.
sin
((
1
-
e
)
*
k
)
/
l
;
e
=
Math
.
sin
(
e
*
k
)
/
l
;
d
.
w
=
a
.
w
*
g
+
b
.
w
*
e
;
d
.
x
=
a
.
x
*
g
+
b
.
x
*
e
;
d
.
y
=
a
.
y
*
g
+
b
.
y
*
e
;
d
.
z
=
a
.
z
*
g
+
b
.
z
*
e
;
return
d
};
THREE
.
Quaternion
.
slerp
=
function
(
a
,
b
,
d
,
e
){
var
g
=
a
.
w
*
b
.
w
+
a
.
x
*
b
.
x
+
a
.
y
*
b
.
y
+
a
.
z
*
b
.
z
;
if
(
Math
.
abs
(
g
)
>=
1
){
d
.
w
=
a
.
w
;
d
.
x
=
a
.
x
;
d
.
y
=
a
.
y
;
d
.
z
=
a
.
z
;
return
d
}
var
k
=
Math
.
acos
(
g
),
l
=
Math
.
sqrt
(
1
-
g
*
g
);
if
(
Math
.
abs
(
l
)
<
0.001
){
d
.
w
=
0.5
*
(
a
.
w
+
b
.
w
);
d
.
x
=
0.5
*
(
a
.
x
+
b
.
x
);
d
.
y
=
0.5
*
(
a
.
y
+
b
.
y
);
d
.
z
=
0.5
*
(
a
.
z
+
b
.
z
);
return
d
}
g
=
Math
.
sin
((
1
-
e
)
*
k
)
/
l
;
e
=
Math
.
sin
(
e
*
k
)
/
l
;
d
.
w
=
a
.
w
*
g
+
b
.
w
*
e
;
d
.
x
=
a
.
x
*
g
+
b
.
x
*
e
;
d
.
y
=
a
.
y
*
g
+
b
.
y
*
e
;
d
.
z
=
a
.
z
*
g
+
b
.
z
*
e
;
return
d
};
THREE
.
Vertex
=
function
(
a
,
b
){
this
.
position
=
a
||
new
THREE
.
Vector3
;
this
.
positionWorld
=
new
THREE
.
Vector3
;
this
.
positionScreen
=
new
THREE
.
Vector4
;
this
.
normal
=
b
||
new
THREE
.
Vector3
;
this
.
normalWorld
=
new
THREE
.
Vector3
;
this
.
normalScreen
=
new
THREE
.
Vector3
;
this
.
tangent
=
new
THREE
.
Vector4
;
this
.
__visible
=!
0
};
THREE
.
Face3
=
function
(
a
,
b
,
d
,
e
,
g
){
this
.
a
=
a
;
this
.
b
=
b
;
this
.
c
=
d
;
this
.
centroid
=
new
THREE
.
Vector3
;
this
.
normal
=
e
instanceof
THREE
.
Vector3
?
e
:
new
THREE
.
Vector3
;
this
.
vertexNormals
=
e
instanceof
Array
?
e
:[];
this
.
materials
=
g
instanceof
Array
?
g
:[
g
]};
THREE
.
Face4
=
function
(
a
,
b
,
d
,
e
,
g
,
k
){
this
.
a
=
a
;
this
.
b
=
b
;
this
.
c
=
d
;
this
.
d
=
e
;
this
.
centroid
=
new
THREE
.
Vector3
;
this
.
normal
=
g
instanceof
THREE
.
Vector3
?
g
:
new
THREE
.
Vector3
;
this
.
vertexNormals
=
g
instanceof
Array
?
g
:[];
this
.
materials
=
k
instanceof
Array
?
k
:[
k
]};
THREE
.
UV
=
function
(
a
,
b
){
this
.
set
(
a
||
0
,
b
||
0
)};
THREE
.
UV
.
prototype
=
{
set
:
function
(
a
,
b
){
this
.
u
=
a
;
this
.
v
=
b
;
return
this
},
copy
:
function
(
a
){
this
.
set
(
a
.
u
,
a
.
v
);
return
this
}};
THREE
.
Geometry
=
function
(){
this
.
id
=
"
Geometry
"
+
THREE
.
GeometryIdCounter
++
;
this
.
vertices
=
[];
this
.
faces
=
[];
this
.
uvs
=
[];
this
.
uvs2
=
[];
this
.
colors
=
[];
this
.
skinWeights
=
[];
this
.
skinIndices
=
[];
this
.
boundingSphere
=
this
.
boundingBox
=
null
;
this
.
hasTangents
=!
1
};
...
...
@@ -151,15 +151,15 @@ h.ambient.g,h.ambient.b);s.specular.value.setRGB(h.specular.r,h.specular.g,h.spe
m
.
image
.
__webGLTextureCube
);
for
(
A
=
0
;
A
<
6
;
++
A
)
c
.
texImage2D
(
c
.
TEXTURE_CUBE_MAP_POSITIVE_X
+
A
,
0
,
c
.
RGBA
,
c
.
RGBA
,
c
.
UNSIGNED_BYTE
,
m
.
image
[
A
]);
m
.
__wasSetOnce
=!
0
}
V
(
c
.
TEXTURE_CUBE_MAP
,
m
,
m
.
image
[
0
]);
c
.
bindTexture
(
c
.
TEXTURE_CUBE_MAP
,
null
);
m
.
needsUpdate
=!
1
}
c
.
activeTexture
(
c
.
TEXTURE0
+
j
);
c
.
bindTexture
(
c
.
TEXTURE_CUBE_MAP
,
m
.
image
.
__webGLTextureCube
)}}
else
{
if
(
m
.
needsUpdate
){
if
(
m
.
__wasSetOnce
){
c
.
bindTexture
(
c
.
TEXTURE_2D
,
m
.
__webGLTexture
);
c
.
texSubImage2D
(
c
.
TEXTURE_2D
,
0
,
0
,
0
,
c
.
RGBA
,
c
.
UNSIGNED_BYTE
,
m
.
image
)}
else
{
m
.
__webGLTexture
=
c
.
createTexture
();
c
.
bindTexture
(
c
.
TEXTURE_2D
,
m
.
__webGLTexture
);
c
.
texImage2D
(
c
.
TEXTURE_2D
,
0
,
c
.
RGBA
,
c
.
RGBA
,
c
.
UNSIGNED_BYTE
,
m
.
image
);
m
.
__wasSetOnce
=!
0
}
V
(
c
.
TEXTURE_2D
,
m
,
m
.
image
);
c
.
bindTexture
(
c
.
TEXTURE_2D
,
null
);
m
.
needsUpdate
=!
1
}
c
.
activeTexture
(
c
.
TEXTURE0
+
j
);
c
.
bindTexture
(
c
.
TEXTURE_2D
,
m
.
__webGLTexture
)}}}
c
.
uniformMatrix4fv
(
p
.
modelViewMatrix
,
!
1
,
i
.
_modelViewMatrixArray
);
c
.
uniformMatrix3fv
(
p
.
normalMatrix
,
!
1
,
i
.
_normalMatrixArray
);(
h
instanceof
THREE
.
MeshShaderMaterial
||
h
instanceof
THREE
.
MeshPhongMaterial
||
h
.
envMap
)
&&
c
.
uniform3f
(
p
.
cameraPosition
,
f
.
position
.
x
,
f
.
position
.
y
,
f
.
position
.
z
);(
h
instanceof
THREE
.
MeshShaderMaterial
||
h
.
envMap
||
h
.
skinning
)
&&
c
.
uniformMatrix4fv
(
p
.
objectMatrix
,
!
1
,
i
.
_objectMatrixArray
);(
h
instanceof
THREE
.
MeshPhongMaterial
||
h
instanceof
THREE
.
MeshLambertMaterial
||
h
instanceof
THREE
.
MeshShaderMaterial
||
h
.
skinning
)
&&
c
.
uniformMatrix4fv
(
p
.
viewMatrix
,
!
1
,
Ka
);
if
(
h
.
skinning
){
c
.
uniformMatrix4fv
(
p
.
cameraInverseMatrix
,
!
1
,
Ka
);
c
.
uniformMatrix4fv
(
p
.
boneGlobalMatrices
,
!
1
,
i
.
boneMatrices
)}
return
t
}
function
g
(
f
,
j
,
m
,
h
,
i
,
t
){
f
=
e
(
f
,
j
,
m
,
h
,
t
).
attributes
;
c
.
bindBuffer
(
c
.
ARRAY_BUFFER
,
i
.
__webGLVertexBuffer
);
c
.
vertexAttribPointer
(
f
.
position
,
3
,
c
.
FLOAT
,
!
1
,
0
,
0
);
if
(
f
.
color
>=
0
){
c
.
bindBuffer
(
c
.
ARRAY_BUFFER
,
i
.
__webGLColorBuffer
);
c
.
vertexAttribPointer
(
f
.
color
,
3
,
c
.
FLOAT
,
!
1
,
0
,
0
)}
if
(
f
.
normal
>=
0
){
c
.
bindBuffer
(
c
.
ARRAY_BUFFER
,
i
.
__webGLNormalBuffer
);
c
.
vertexAttribPointer
(
f
.
normal
,
3
,
c
.
FLOAT
,
!
1
,
0
,
0
)}
if
(
f
.
tangent
>=
0
){
c
.
bindBuffer
(
c
.
ARRAY_BUFFER
,
i
.
__webGLTangentBuffer
);
c
.
vertexAttribPointer
(
f
.
tangent
,
4
,
c
.
FLOAT
,
!
1
,
0
,
0
)}
if
(
f
.
uv
>=
0
)
if
(
i
.
__webGLUVBuffer
){
c
.
bindBuffer
(
c
.
ARRAY_BUFFER
,
i
.
__webGLUVBuffer
);
c
.
vertexAttribPointer
(
f
.
uv
,
2
,
c
.
FLOAT
,
!
1
,
0
,
0
);
c
.
enableVertexAttribArray
(
f
.
uv
)}
else
c
.
disableVertexAttribArray
(
f
.
uv
);
if
(
f
.
uv2
>=
0
)
if
(
i
.
__webGLUV2Buffer
){
c
.
bindBuffer
(
c
.
ARRAY_BUFFER
,
i
.
__webGLUV2Buffer
);
c
.
vertexAttribPointer
(
f
.
uv2
,
2
,
c
.
FLOAT
,
!
1
,
0
,
0
);
c
.
enableVertexAttribArray
(
f
.
uv2
)}
else
c
.
disableVertexAttribArray
(
f
.
uv2
);
if
(
h
.
skinning
&&
f
.
skinVertexA
>=
0
&&
f
.
skinVertexB
>=
0
&&
f
.
skinIndex
>=
0
&&
f
.
skinWeight
>=
0
){
c
.
bindBuffer
(
c
.
ARRAY_BUFFER
,
i
.
__webGLSkinVertexABuffer
);
c
.
vertexAttribPointer
(
f
.
skinVertexA
,
4
,
c
.
FLOAT
,
!
1
,
0
,
0
);
c
.
bindBuffer
(
c
.
ARRAY_BUFFER
,
i
.
__webGLSkinVertexBBuffer
);
c
.
vertexAttribPointer
(
f
.
skinVertexB
,
4
,
c
.
FLOAT
,
!
1
,
0
,
0
);
c
.
bindBuffer
(
c
.
ARRAY_BUFFER
,
i
.
__webGLSkinIndicesBuffer
);
c
.
vertexAttribPointer
(
f
.
skinIndex
,
4
,
c
.
FLOAT
,
!
1
,
0
,
0
);
c
.
bindBuffer
(
c
.
ARRAY_BUFFER
,
i
.
__webGLSkinWeightsBuffer
);
c
.
vertexAttribPointer
(
f
.
skinWeight
,
4
,
c
.
FLOAT
,
!
1
,
0
,
0
)}
if
(
t
instanceof
THREE
.
Mesh
)
if
(
h
.
wireframe
){
c
.
lineWidth
(
h
.
wireframeLinewidth
);
c
.
bindBuffer
(
c
.
ELEMENT_ARRAY_BUFFER
,
i
.
__webGLLineBuffer
);
c
.
drawElements
(
c
.
LINES
,
i
.
__webGLLineCount
,
c
.
UNSIGNED_SHORT
,
0
)}
else
{
c
.
bindBuffer
(
c
.
ELEMENT_ARRAY_BUFFER
,
i
.
__webGLFaceBuffer
);
c
.
drawElements
(
c
.
TRIANGLES
,
i
.
__webGLFaceCount
,
c
.
UNSIGNED_SHORT
,
0
)}
else
if
(
t
instanceof
THREE
.
Line
){
t
=
t
.
type
==
THREE
.
LineStrip
?
c
.
LINE_STRIP
:
c
.
LINES
;
c
.
lineWidth
(
h
.
linewidth
);
c
.
drawArrays
(
t
,
0
,
i
.
__webGLLineCount
)}
else
if
(
t
instanceof
THREE
.
ParticleSystem
)
c
.
drawArrays
(
c
.
POINTS
,
0
,
i
.
__webGLParticleCount
);
else
t
instanceof
THREE
.
Ribbon
&&
c
.
drawArrays
(
c
.
TRIANGLE_STRIP
,
0
,
i
.
__webGLVertexCount
)}
function
k
(
f
,
j
){
if
(
!
f
.
__webGLVertexBuffer
)
f
.
__webGLVertexBuffer
=
c
.
createBuffer
();
if
(
!
f
.
__webGLNormalBuffer
)
f
.
__webGLNormalBuffer
=
c
.
createBuffer
();
if
(
f
.
hasPos
){
c
.
bindBuffer
(
c
.
ARRAY_BUFFER
,
f
.
__webGLVertexBuffer
);
c
.
bufferData
(
c
.
ARRAY_BUFFER
,
f
.
positionArray
,
c
.
DYNAMIC_DRAW
);
c
.
enableVertexAttribArray
(
j
.
attributes
.
position
);
c
.
vertexAttribPointer
(
j
.
attributes
.
position
,
3
,
c
.
FLOAT
,
!
1
,
0
,
0
)}
if
(
f
.
hasNormal
){
c
.
bindBuffer
(
c
.
ARRAY_BUFFER
,
f
.
__webGLNormalBuffer
);
c
.
bufferData
(
c
.
ARRAY_BUFFER
,
f
.
normalArray
,
c
.
DYNAMIC_DRAW
);
c
.
enableVertexAttribArray
(
j
.
attributes
.
normal
);
c
.
vertexAttribPointer
(
j
.
attributes
.
normal
,
3
,
c
.
FLOAT
,
!
1
,
0
,
0
)}
c
.
drawArrays
(
c
.
TRIANGLES
,
0
,
f
.
count
);
f
.
count
=
0
}
function
l
(
f
){
if
(
pa
!=
f
.
doubleSided
){
f
.
doubleSided
?
c
.
disable
(
c
.
CULL_FACE
):
c
.
enable
(
c
.
CULL_FACE
);
pa
=
f
.
doubleSided
}
if
(
qa
!=
f
.
flipSided
){
f
.
flipSided
?
c
.
frontFace
(
c
.
CW
):
c
.
frontFace
(
c
.
CCW
);
qa
=
f
.
flipSided
}}
function
o
(
f
){
if
(
Ba
!=
f
){
f
?
c
.
enable
(
c
.
DEPTH_TEST
):
c
.
disable
(
c
.
DEPTH_TEST
);
Ba
=
f
}}
function
n
(
f
){
ra
[
0
].
set
(
f
.
n41
-
f
.
n11
,
f
.
n42
-
f
.
n12
,
f
.
n43
-
f
.
n13
,
f
.
n44
-
f
.
n14
);
ra
[
1
].
set
(
f
.
n41
+
f
.
n11
,
f
.
n42
+
f
.
n12
,
f
.
n43
+
f
.
n13
,
f
.
n44
+
f
.
n14
);
ra
[
2
].
set
(
f
.
n41
+
f
.
n21
,
f
.
n42
+
f
.
n22
,
f
.
n43
+
f
.
n23
,
f
.
n44
+
f
.
n24
);
ra
[
3
].
set
(
f
.
n41
-
f
.
n21
,
f
.
n42
-
f
.
n22
,
f
.
n43
-
f
.
n23
,
f
.
n44
-
f
.
n24
);
ra
[
4
].
set
(
f
.
n41
-
f
.
n31
,
f
.
n42
-
f
.
n32
,
f
.
n43
-
f
.
n33
,
f
.
n44
-
f
.
n34
);
ra
[
5
].
set
(
f
.
n41
+
f
.
n31
,
f
.
n42
+
f
.
n32
,
f
.
n43
+
f
.
n33
,
f
.
n44
+
f
.
n34
);
var
j
;
for
(
f
=
0
;
f
<
6
;
f
++
){
j
=
ra
[
f
];
j
.
divideScalar
(
Math
.
sqrt
(
j
.
x
*
j
.
x
+
j
.
y
*
j
.
y
+
j
.
z
*
j
.
z
))}}
function
w
(
f
){
for
(
var
j
=
f
.
matrixWorld
,
m
=-
f
.
geometry
.
boundingSphere
.
radius
*
Math
.
max
(
f
.
scale
.
x
,
Math
.
max
(
f
.
scale
.
y
,
f
.
scale
.
z
))
,
h
=
0
;
h
<
6
;
h
++
){
f
=
ra
[
h
].
x
*
j
.
n14
+
ra
[
h
].
y
*
j
.
n24
+
ra
[
h
].
z
*
j
.
n34
+
ra
[
h
].
w
;
if
(
f
<=
m
)
return
!
1
}
return
!
0
}
function
z
(
f
,
j
){
f
.
list
[
f
.
count
]
=
j
;
f
.
count
+=
1
}
function
x
(
f
){
var
j
,
m
,
h
=
f
.
object
,
i
=
f
.
opaque
,
t
=
f
.
transparent
;
t
.
count
=
0
;
f
=
i
.
count
=
0
;
for
(
j
=
h
.
materials
.
length
;
f
<
j
;
f
++
){
m
=
h
.
materials
[
f
];
m
.
opacity
&&
m
.
opacity
<
1
||
m
.
blending
!=
THREE
.
NormalBlending
?
z
(
t
,
m
):
z
(
i
,
m
)}}
function
D
(
f
){
var
j
,
m
,
h
,
i
,
t
=
f
.
object
,
p
=
f
.
buffer
,
s
=
f
.
opaque
,
A
=
f
.
transparent
;
A
.
count
=
0
;
f
=
s
.
count
=
0
;
for
(
h
=
t
.
materials
.
length
;
f
<
h
;
f
++
){
j
=
t
.
materials
[
f
];
if
(
j
instanceof
THREE
.
MeshFaceMaterial
){
j
=
0
;
for
(
m
=
p
.
materials
.
length
;
j
<
m
;
j
++
)(
i
=
p
.
materials
[
j
])
&&
(
i
.
opacity
&&
i
.
opacity
<
1
||
i
.
blending
!=
THREE
.
NormalBlending
?
z
(
A
,
i
):
z
(
s
,
i
))}
else
{
i
=
j
;
i
.
opacity
&&
i
.
opacity
<
1
||
i
.
blending
!=
THREE
.
NormalBlending
?
z
(
A
,
i
):
z
(
s
,
i
)}}}
function
E
(
f
,
j
){
return
j
.
z
-
f
.
z
}
function
F
(
f
,
j
){
f
.
_modelViewMatrix
.
multiplyToArray
(
j
.
matrixWorldInverse
,
f
.
matrixWorld
,
f
.
_modelViewMatrixArray
);
THREE
.
Matrix4
.
makeInvert3x3
(
f
.
_modelViewMatrix
).
transposeIntoArray
(
f
.
_normalMatrixArray
)}
function
H
(
f
){
function
j
(
J
){
var
P
=
function
g
(
f
,
j
,
m
,
h
,
i
,
t
){
if
(
h
.
opacity
!=
0
){
f
=
e
(
f
,
j
,
m
,
h
,
t
).
attributes
;
c
.
bindBuffer
(
c
.
ARRAY_BUFFER
,
i
.
__webGLVertexBuffer
);
c
.
vertexAttribPointer
(
f
.
position
,
3
,
c
.
FLOAT
,
!
1
,
0
,
0
);
if
(
f
.
color
>=
0
){
c
.
bindBuffer
(
c
.
ARRAY_BUFFER
,
i
.
__webGLColorBuffer
);
c
.
vertexAttribPointer
(
f
.
color
,
3
,
c
.
FLOAT
,
!
1
,
0
,
0
)}
if
(
f
.
normal
>=
0
){
c
.
bindBuffer
(
c
.
ARRAY_BUFFER
,
i
.
__webGLNormalBuffer
);
c
.
vertexAttribPointer
(
f
.
normal
,
3
,
c
.
FLOAT
,
!
1
,
0
,
0
)}
if
(
f
.
tangent
>=
0
){
c
.
bindBuffer
(
c
.
ARRAY_BUFFER
,
i
.
__webGLTangentBuffer
);
c
.
vertexAttribPointer
(
f
.
tangent
,
4
,
c
.
FLOAT
,
!
1
,
0
,
0
)}
if
(
f
.
uv
>=
0
)
if
(
i
.
__webGLUVBuffer
){
c
.
bindBuffer
(
c
.
ARRAY_BUFFER
,
i
.
__webGLUVBuffer
);
c
.
vertexAttribPointer
(
f
.
uv
,
2
,
c
.
FLOAT
,
!
1
,
0
,
0
);
c
.
enableVertexAttribArray
(
f
.
uv
)}
else
c
.
disableVertexAttribArray
(
f
.
uv
);
if
(
f
.
uv2
>=
0
)
if
(
i
.
__webGLUV2Buffer
){
c
.
bindBuffer
(
c
.
ARRAY_BUFFER
,
i
.
__webGLUV2Buffer
);
c
.
vertexAttribPointer
(
f
.
uv2
,
2
,
c
.
FLOAT
,
!
1
,
0
,
0
);
c
.
enableVertexAttribArray
(
f
.
uv2
)}
else
c
.
disableVertexAttribArray
(
f
.
uv2
);
if
(
h
.
skinning
&&
f
.
skinVertexA
>=
0
&&
f
.
skinVertexB
>=
0
&&
f
.
skinIndex
>=
0
&&
f
.
skinWeight
>=
0
){
c
.
bindBuffer
(
c
.
ARRAY_BUFFER
,
i
.
__webGLSkinVertexABuffer
);
c
.
vertexAttribPointer
(
f
.
skinVertexA
,
4
,
c
.
FLOAT
,
!
1
,
0
,
0
);
c
.
bindBuffer
(
c
.
ARRAY_BUFFER
,
i
.
__webGLSkinVertexBBuffer
);
c
.
vertexAttribPointer
(
f
.
skinVertexB
,
4
,
c
.
FLOAT
,
!
1
,
0
,
0
);
c
.
bindBuffer
(
c
.
ARRAY_BUFFER
,
i
.
__webGLSkinIndicesBuffer
);
c
.
vertexAttribPointer
(
f
.
skinIndex
,
4
,
c
.
FLOAT
,
!
1
,
0
,
0
);
c
.
bindBuffer
(
c
.
ARRAY_BUFFER
,
i
.
__webGLSkinWeightsBuffer
);
c
.
vertexAttribPointer
(
f
.
skinWeight
,
4
,
c
.
FLOAT
,
!
1
,
0
,
0
)}
if
(
t
instanceof
THREE
.
Mesh
)
if
(
h
.
wireframe
){
c
.
lineWidth
(
h
.
wireframeLinewidth
);
c
.
bindBuffer
(
c
.
ELEMENT_ARRAY_BUFFER
,
i
.
__webGLLineBuffer
);
c
.
drawElements
(
c
.
LINES
,
i
.
__webGLLineCount
,
c
.
UNSIGNED_SHORT
,
0
)}
else
{
c
.
bindBuffer
(
c
.
ELEMENT_ARRAY_BUFFER
,
i
.
__webGLFaceBuffer
);
c
.
drawElements
(
c
.
TRIANGLES
,
i
.
__webGLFaceCount
,
c
.
UNSIGNED_SHORT
,
0
)}
else
if
(
t
instanceof
THREE
.
Line
){
t
=
t
.
type
==
THREE
.
LineStrip
?
c
.
LINE_STRIP
:
c
.
LINES
;
c
.
lineWidth
(
h
.
linewidth
);
c
.
drawArrays
(
t
,
0
,
i
.
__webGLLineCount
)}
else
if
(
t
instanceof
THREE
.
ParticleSystem
)
c
.
drawArrays
(
c
.
POINTS
,
0
,
i
.
__webGLParticleCount
);
else
t
instanceof
THREE
.
Ribbon
&&
c
.
drawArrays
(
c
.
TRIANGLE_STRIP
,
0
,
i
.
__webGLVertexCount
)}}
function
k
(
f
,
j
){
if
(
!
f
.
__webGLVertexBuffer
)
f
.
__webGLVertexBuffer
=
c
.
createBuffer
();
if
(
!
f
.
__webGLNormalBuffer
)
f
.
__webGLNormalBuffer
=
c
.
createBuffer
();
if
(
f
.
hasPos
){
c
.
bindBuffer
(
c
.
ARRAY_BUFFER
,
f
.
__webGLVertexBuffer
);
c
.
bufferData
(
c
.
ARRAY_BUFFER
,
f
.
positionArray
,
c
.
DYNAMIC_DRAW
);
c
.
enableVertexAttribArray
(
j
.
attributes
.
position
);
c
.
vertexAttribPointer
(
j
.
attributes
.
position
,
3
,
c
.
FLOAT
,
!
1
,
0
,
0
)}
if
(
f
.
hasNormal
){
c
.
bindBuffer
(
c
.
ARRAY_BUFFER
,
f
.
__webGLNormalBuffer
);
c
.
bufferData
(
c
.
ARRAY_BUFFER
,
f
.
normalArray
,
c
.
DYNAMIC_DRAW
);
c
.
enableVertexAttribArray
(
j
.
attributes
.
normal
);
c
.
vertexAttribPointer
(
j
.
attributes
.
normal
,
3
,
c
.
FLOAT
,
!
1
,
0
,
0
)}
c
.
drawArrays
(
c
.
TRIANGLES
,
0
,
f
.
count
);
f
.
count
=
0
}
function
l
(
f
){
if
(
pa
!=
f
.
doubleSided
){
f
.
doubleSided
?
c
.
disable
(
c
.
CULL_FACE
):
c
.
enable
(
c
.
CULL_FACE
);
pa
=
f
.
doubleSided
}
if
(
qa
!=
f
.
flipSided
){
f
.
flipSided
?
c
.
frontFace
(
c
.
CW
):
c
.
frontFace
(
c
.
CCW
);
qa
=
f
.
flipSided
}}
function
o
(
f
){
if
(
Ba
!=
f
){
f
?
c
.
enable
(
c
.
DEPTH_TEST
):
c
.
disable
(
c
.
DEPTH_TEST
);
Ba
=
f
}}
function
n
(
f
){
ra
[
0
].
set
(
f
.
n41
-
f
.
n11
,
f
.
n42
-
f
.
n12
,
f
.
n43
-
f
.
n13
,
f
.
n44
-
f
.
n14
);
ra
[
1
].
set
(
f
.
n41
+
f
.
n11
,
f
.
n42
+
f
.
n12
,
f
.
n43
+
f
.
n13
,
f
.
n44
+
f
.
n14
);
ra
[
2
].
set
(
f
.
n41
+
f
.
n21
,
f
.
n42
+
f
.
n22
,
f
.
n43
+
f
.
n23
,
f
.
n44
+
f
.
n24
);
ra
[
3
].
set
(
f
.
n41
-
f
.
n21
,
f
.
n42
-
f
.
n22
,
f
.
n43
-
f
.
n23
,
f
.
n44
-
f
.
n24
);
ra
[
4
].
set
(
f
.
n41
-
f
.
n31
,
f
.
n42
-
f
.
n32
,
f
.
n43
-
f
.
n33
,
f
.
n44
-
f
.
n34
);
ra
[
5
].
set
(
f
.
n41
+
f
.
n31
,
f
.
n42
+
f
.
n32
,
f
.
n43
+
f
.
n33
,
f
.
n44
+
f
.
n34
);
var
j
;
for
(
f
=
0
;
f
<
6
;
f
++
){
j
=
ra
[
f
];
j
.
divideScalar
(
Math
.
sqrt
(
j
.
x
*
j
.
x
+
j
.
y
*
j
.
y
+
j
.
z
*
j
.
z
))}}
function
w
(
f
){
for
(
var
j
=
f
.
matrixWorld
,
m
=-
f
.
geometry
.
boundingSphere
.
radius
*
Math
.
max
(
f
.
scale
.
x
,
Math
.
max
(
f
.
scale
.
y
,
f
.
scale
.
z
)),
h
=
0
;
h
<
6
;
h
++
){
f
=
ra
[
h
].
x
*
j
.
n14
+
ra
[
h
].
y
*
j
.
n24
+
ra
[
h
].
z
*
j
.
n34
+
ra
[
h
].
w
;
if
(
f
<=
m
)
return
!
1
}
return
!
0
}
function
z
(
f
,
j
){
f
.
list
[
f
.
count
]
=
j
;
f
.
count
+=
1
}
function
x
(
f
){
var
j
,
m
,
h
=
f
.
object
,
i
=
f
.
opaque
,
t
=
f
.
transparent
;
t
.
count
=
0
;
f
=
i
.
count
=
0
;
for
(
j
=
h
.
materials
.
length
;
f
<
j
;
f
++
){
m
=
h
.
materials
[
f
];
m
.
opacity
&&
m
.
opacity
<
1
||
m
.
blending
!=
THREE
.
NormalBlending
?
z
(
t
,
m
):
z
(
i
,
m
)}}
function
D
(
f
){
var
j
,
m
,
h
,
i
,
t
=
f
.
object
,
p
=
f
.
buffer
,
s
=
f
.
opaque
,
A
=
f
.
transparent
;
A
.
count
=
0
;
f
=
s
.
count
=
0
;
for
(
h
=
t
.
materials
.
length
;
f
<
h
;
f
++
){
j
=
t
.
materials
[
f
];
if
(
j
instanceof
THREE
.
MeshFaceMaterial
){
j
=
0
;
for
(
m
=
p
.
materials
.
length
;
j
<
m
;
j
++
)(
i
=
p
.
materials
[
j
])
&&
(
i
.
opacity
&&
i
.
opacity
<
1
||
i
.
blending
!=
THREE
.
NormalBlending
?
z
(
A
,
i
):
z
(
s
,
i
))}
else
{
i
=
j
;
i
.
opacity
&&
i
.
opacity
<
1
||
i
.
blending
!=
THREE
.
NormalBlending
?
z
(
A
,
i
):
z
(
s
,
i
)}}}
function
E
(
f
,
j
){
return
j
.
z
-
f
.
z
}
function
F
(
f
,
j
){
f
.
_modelViewMatrix
.
multiplyToArray
(
j
.
matrixWorldInverse
,
f
.
matrixWorld
,
f
.
_modelViewMatrixArray
);
THREE
.
Matrix4
.
makeInvert3x3
(
f
.
_modelViewMatrix
).
transposeIntoArray
(
f
.
_normalMatrixArray
)}
function
H
(
f
){
function
j
(
J
){
var
P
=
[];
m
=
0
;
for
(
h
=
J
.
length
;
m
<
h
;
m
++
)
J
[
m
]
==
undefined
?
P
.
push
(
"
undefined
"
):
P
.
push
(
J
[
m
].
id
);
return
P
.
join
(
"
_
"
)}
var
m
,
h
,
i
,
t
,
p
,
s
,
A
,
r
,
v
=
{};
f
.
geometryGroups
=
{};
i
=
0
;
for
(
t
=
f
.
faces
.
length
;
i
<
t
;
i
++
){
p
=
f
.
faces
[
i
];
s
=
p
.
materials
;
A
=
j
(
s
);
v
[
A
]
==
undefined
&&
(
v
[
A
]
=
{
hash
:
A
,
counter
:
0
});
r
=
v
[
A
].
hash
+
"
_
"
+
v
[
A
].
counter
;
f
.
geometryGroups
[
r
]
==
undefined
&&
(
f
.
geometryGroups
[
r
]
=
{
faces
:[],
materials
:
s
,
vertices
:
0
});
p
=
p
instanceof
THREE
.
Face3
?
3
:
4
;
if
(
f
.
geometryGroups
[
r
].
vertices
+
p
>
65535
){
v
[
A
].
counter
+=
1
;
r
=
v
[
A
].
hash
+
"
_
"
+
v
[
A
].
counter
;
f
.
geometryGroups
[
r
]
==
undefined
&&
(
f
.
geometryGroups
[
r
]
=
{
faces
:[],
materials
:
s
,
vertices
:
0
})}
f
.
geometryGroups
[
r
].
faces
.
push
(
i
);
f
.
geometryGroups
[
r
].
vertices
+=
p
}}
function
L
(
f
,
j
,
m
){
f
.
push
({
buffer
:
j
,
object
:
m
,
opaque
:{
list
:[],
count
:
0
},
transparent
:{
list
:[],
count
:
0
}})}
function
M
(
f
){
if
(
f
!=
Aa
){
switch
(
f
){
case
THREE
.
AdditiveBlending
:
c
.
blendEquation
(
c
.
FUNC_ADD
);
c
.
blendFunc
(
c
.
ONE
,
c
.
ONE
);
break
;
case
THREE
.
SubtractiveBlending
:
c
.
blendFunc
(
c
.
DST_COLOR
,
c
.
ZERO
);
break
;
case
THREE
.
BillboardBlending
:
c
.
blendEquation
(
c
.
FUNC_ADD
);
c
.
blendFunc
(
c
.
SRC_ALPHA
,
c
.
ONE_MINUS_SRC_ALPHA
);
break
;
case
THREE
.
ReverseSubtractiveBlending
:
c
.
blendEquation
(
c
.
FUNC_REVERSE_SUBTRACT
);
c
.
blendFunc
(
c
.
ONE
,
c
.
ONE
);
break
;
default
:
c
.
blendEquation
(
c
.
FUNC_ADD
);
c
.
blendFunc
(
c
.
ONE
,
c
.
ONE_MINUS_SRC_ALPHA
)}
Aa
=
f
}}
function
V
(
f
,
j
,
m
){
if
((
m
.
width
&
m
.
width
-
1
)
==
0
&&
(
m
.
height
&
m
.
height
-
1
)
==
0
){
c
.
texParameteri
(
f
,
c
.
TEXTURE_WRAP_S
,
Y
(
j
.
wrapS
));
c
.
texParameteri
(
f
,
c
.
TEXTURE_WRAP_T
,
Y
(
j
.
wrapT
));
c
.
texParameteri
(
f
,
c
.
TEXTURE_MAG_FILTER
,
Y
(
j
.
magFilter
));
c
.
texParameteri
(
f
,
c
.
TEXTURE_MIN_FILTER
,
Y
(
j
.
minFilter
));
c
.
generateMipmap
(
f
)}
else
{
c
.
texParameteri
(
f
,
...
...
examples/webgl_sandbox.html
浏览文件 @
ce751a10
...
...
@@ -91,6 +91,7 @@
<script
type=
"text/javascript"
src=
"../src/renderers/CanvasRenderer.js"
></script>
<script
type=
"text/javascript"
src=
"../src/renderers/SVGRenderer.js"
></script>
<script
type=
"text/javascript"
src=
"../src/renderers/WebGLRenderer.js"
></script>
<script
type=
"text/javascript"
src=
"../src/renderers/WebGLShaders.js"
></script>
<script
type=
"text/javascript"
src=
"../src/renderers/SoundRenderer.js"
></script>
<script
type=
"text/javascript"
src=
"../src/renderers/renderables/RenderableObject.js"
></script>
<script
type=
"text/javascript"
src=
"../src/renderers/renderables/RenderableFace3.js"
></script>
...
...
src/renderers/WebGLRenderer.js
浏览文件 @
ce751a10
...
...
@@ -1433,7 +1433,7 @@ THREE.WebGLRenderer = function ( parameters ) {
};
function
setProgram
(
camera
,
lights
,
fog
,
material
,
object
)
{
function
setProgram
(
camera
,
lights
,
fog
,
material
,
object
)
{
if
(
!
material
.
program
)
_this
.
initMaterial
(
material
,
lights
,
fog
,
object
);
...
...
@@ -1551,6 +1551,8 @@ THREE.WebGLRenderer = function ( parameters ) {
function
renderBuffer
(
camera
,
lights
,
fog
,
material
,
geometryGroup
,
object
)
{
if
(
material
.
opacity
==
0
)
return
;
var
program
,
attributes
,
linewidth
,
primitives
;
program
=
setProgram
(
camera
,
lights
,
fog
,
material
,
object
);
...
...
@@ -1626,7 +1628,7 @@ THREE.WebGLRenderer = function ( parameters ) {
}
if
(
material
.
skinning
&&
attributes
.
skinVertexA
>=
0
&&
attributes
.
skinVertexB
>=
0
&&
attributes
.
skinVertexA
>=
0
&&
attributes
.
skinVertexB
>=
0
&&
attributes
.
skinIndex
>=
0
&&
attributes
.
skinWeight
>=
0
)
{
_gl
.
bindBuffer
(
_gl
.
ARRAY_BUFFER
,
geometryGroup
.
__webGLSkinVertexABuffer
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录