Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Ablesons
three.js
提交
3b43c796
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,发现更多精彩内容 >>
提交
3b43c796
编写于
4月 02, 2011
作者:
A
alteredq
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Added possibility of enforcing vertical angle constraint to QuakeCamera.
上级
27b0ee0b
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
41 addition
and
14 deletion
+41
-14
build/Three.js
build/Three.js
+8
-7
build/custom/ThreeExtras.js
build/custom/ThreeExtras.js
+8
-7
examples/webgl_geometry_minecraft_ao.html
examples/webgl_geometry_minecraft_ao.html
+1
-0
src/extras/cameras/QuakeCamera.js
src/extras/cameras/QuakeCamera.js
+24
-0
未找到文件。
build/Three.js
浏览文件 @
3b43c796
...
...
@@ -353,13 +353,14 @@ value:0,texture:null},uImageIncrement:{type:"v2",value:new THREE.Vector2(0.00195
film
:{
uniforms
:{
tDiffuse
:{
type
:
"
t
"
,
value
:
0
,
texture
:
null
},
time
:{
type
:
"
f
"
,
value
:
0
},
nIntensity
:{
type
:
"
f
"
,
value
:
0.5
},
sIntensity
:{
type
:
"
f
"
,
value
:
0.05
},
sCount
:{
type
:
"
f
"
,
value
:
4096
},
grayscale
:{
type
:
"
i
"
,
value
:
1
}},
vertexShader
:
"
varying vec2 vUv;
\n
void main() {
\n
vUv = vec2( uv.x, 1.0 - uv.y );
\n
gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
\n
}
"
,
fragmentShader
:
"
varying vec2 vUv;
\n
uniform sampler2D tDiffuse;
\n
uniform float time;
\n
uniform bool grayscale;
\n
uniform float nIntensity;
\n
uniform float sIntensity;
\n
uniform float sCount;
\n
void main() {
\n
vec4 cTextureScreen = texture2D( tDiffuse, vUv );
\n
float x = vUv.x * vUv.y * time * 1000.0;
\n
x = mod( x, 13.0 ) * mod( x, 123.0 );
\n
float dx = mod( x, 0.01 );
\n
vec3 cResult = cTextureScreen.rgb + cTextureScreen.rgb * clamp( 0.1 + dx * 100.0, 0.0, 1.0 );
\n
vec2 sc = vec2( sin( vUv.y * sCount ), cos( vUv.y * sCount ) );
\n
cResult += cTextureScreen.rgb * vec3( sc.x, sc.y, sc.x ) * sIntensity;
\n
cResult = cTextureScreen.rgb + clamp( nIntensity, 0.0,1.0 ) * ( cResult - cTextureScreen.rgb );
\n
if( grayscale ) {
\n
cResult = vec3( cResult.r * 0.3 + cResult.g * 0.59 + cResult.b * 0.11 );
\n
}
\n
gl_FragColor = vec4( cResult, cTextureScreen.a );
\n
}
"
},
screen
:{
uniforms
:{
tDiffuse
:{
type
:
"
t
"
,
value
:
0
,
texture
:
null
},
opacity
:{
type
:
"
f
"
,
value
:
1
}},
vertexShader
:
"
varying vec2 vUv;
\n
void main() {
\n
vUv = vec2( uv.x, 1.0 - uv.y );
\n
gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
\n
}
"
,
fragmentShader
:
"
varying vec2 vUv;
\n
uniform sampler2D tDiffuse;
\n
uniform float opacity;
\n
void main() {
\n
vec4 texel = texture2D( tDiffuse, vUv );
\n
gl_FragColor = opacity * texel;
\n
}
"
},
basic
:{
uniforms
:{},
vertexShader
:
"
void main() {
\n
gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
\n
}
"
,
fragmentShader
:
"
void main() {
\n
gl_FragColor = vec4( 1.0, 0.0, 0.0, 0.5 );
\n
}
"
}},
buildKernel
:
function
(
b
){
var
d
,
c
,
f
,
g
,
h
=
2
*
Math
.
ceil
(
b
*
3
)
+
1
;
h
>
25
&&
(
h
=
25
);
g
=
(
h
-
1
)
*
0.5
;
c
=
Array
(
h
);
for
(
d
=
f
=
0
;
d
<
h
;
++
d
){
c
[
d
]
=
Math
.
exp
(
-
((
d
-
g
)
*
(
d
-
g
))
/
(
2
*
b
*
b
));
f
+=
c
[
d
]}
for
(
d
=
0
;
d
<
h
;
++
d
)
c
[
d
]
/=
f
;
return
c
}};
THREE
.
QuakeCamera
=
function
(
b
){
function
d
(
c
,
f
){
return
function
(){
f
.
apply
(
c
,
arguments
)}}
THREE
.
Camera
.
call
(
this
,
b
.
fov
,
b
.
aspect
,
b
.
near
,
b
.
far
,
b
.
target
);
this
.
movementSpeed
=
1
;
this
.
lookSpeed
=
0.0050
;
this
.
noFly
=!
1
;
this
.
lookVertical
=!
0
;
this
.
autoForward
=!
1
;
this
.
activeLook
=!
0
;
this
.
heightSpeed
=!
1
;
this
.
heightCoef
=
1
;
this
.
heightMin
=
0
;
this
.
domElement
=
document
;
if
(
b
){
if
(
b
.
movementSpeed
!==
undefined
)
this
.
movementSpeed
=
b
.
movementSpeed
;
if
(
b
.
lookSpeed
!==
undefined
)
this
.
lookSpeed
=
b
.
lookSpeed
;
if
(
b
.
noFly
!==
undefined
)
this
.
noFly
=
b
.
noFly
;
if
(
b
.
lookVertical
!==
undefined
)
this
.
lookVertical
=
b
.
lookVertical
;
if
(
b
.
autoForward
!==
undefined
)
this
.
autoForward
=
b
.
autoForward
;
if
(
b
.
activeLook
!==
undefined
)
this
.
activeLook
=
b
.
activeLook
;
if
(
b
.
heightSpeed
!==
undefined
)
this
.
heightSpeed
=
b
.
heightSpeed
;
if
(
b
.
heightCoef
!==
undefined
)
this
.
heightCoef
=
b
.
heightCoef
;
if
(
b
.
heightMin
!==
undefined
)
this
.
heightMin
=
b
.
heightMin
;
if
(
b
.
heightMax
!==
undefined
)
this
.
heightMax
=
b
.
heightMax
;
if
(
b
.
domElement
!==
undefined
)
this
.
domElement
=
b
.
domElement
}
this
.
theta
=
this
.
phi
=
this
.
lon
=
this
.
lat
=
this
.
mouseY
=
this
.
mouseX
=
this
.
autoSpeedFactor
=
0
;
this
.
moveForward
=!
1
;
this
.
moveBackward
=!
1
;
this
.
moveLeft
=!
1
;
this
.
moveRight
=!
1
;
this
.
mouseDragOn
=!
1
;
this
.
windowHalfX
=
window
.
innerWidth
/
2
;
this
.
windowHalfY
=
window
.
innerHeight
/
2
;
this
.
onMouseDown
=
function
(
c
){
c
.
preventDefault
();
c
.
stopPropagation
();
if
(
this
.
activeLook
)
switch
(
c
.
button
){
case
0
:
this
.
moveForward
=!
0
;
break
;
case
2
:
this
.
moveBackward
=!
0
}
this
.
mouseDragOn
=!
0
};
this
.
onMouseUp
=
function
(
c
){
c
.
preventDefault
();
c
.
stopPropagation
();
if
(
this
.
activeLook
)
switch
(
c
.
button
){
case
0
:
this
.
moveForward
=
!
1
;
break
;
case
2
:
this
.
moveBackward
=!
1
}
this
.
mouseDragOn
=!
1
};
this
.
onMouseMove
=
function
(
c
){
this
.
mouseX
=
c
.
clientX
-
this
.
windowHalfX
;
this
.
mouseY
=
c
.
clientY
-
this
.
windowHalfY
};
this
.
onKeyDown
=
function
(
c
){
switch
(
c
.
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
(
c
){
switch
(
c
.
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
?
this
.
heightMin
:
this
.
position
.
y
>
this
.
heightMax
?
this
.
heightMax
:
this
.
position
.
y
)
-
this
.
heightMin
)
*
this
.
heightCoef
:
0
;(
this
.
moveForward
||
this
.
autoForward
)
&&
this
.
translateZ
(
-
(
this
.
movementSpeed
+
this
.
autoSpeedFactor
));
this
.
moveBackward
&&
this
.
translateZ
(
this
.
movementSpeed
);
this
.
moveLeft
&&
this
.
translateX
(
-
this
.
movementSpeed
);
this
.
moveRight
&&
this
.
translateX
(
this
.
movementSpeed
);
var
c
=
this
.
lookSpeed
;
this
.
activeLook
||
(
c
=
0
);
this
.
lon
+=
this
.
mouseX
*
c
;
this
.
lookVertical
&&
(
this
.
lat
-=
this
.
mouseY
*
c
);
this
.
lat
=
Math
.
max
(
-
85
,
Math
.
min
(
85
,
this
.
lat
));
this
.
phi
=
(
90
-
this
.
lat
)
*
Math
.
PI
/
180
;
this
.
theta
=
this
.
lon
*
Math
.
PI
/
180
;
c
=
this
.
target
.
position
;
var
f
=
this
.
position
;
c
.
x
=
f
.
x
+
100
*
Math
.
sin
(
this
.
phi
)
*
Math
.
cos
(
this
.
theta
);
c
.
y
=
f
.
y
+
100
*
Math
.
cos
(
this
.
phi
);
c
.
z
=
f
.
z
+
100
*
Math
.
sin
(
this
.
phi
)
*
Math
.
sin
(
this
.
theta
);
this
.
supr
.
update
.
call
(
this
)};
this
.
domElement
.
addEventListener
(
"
contextmenu
"
,
function
(
c
){
c
.
preventDefault
()},
!
1
);
this
.
domElement
.
addEventListener
(
"
mousemove
"
,
d
(
this
,
this
.
onMouseMove
),
!
1
);
this
.
domElement
.
addEventListener
(
"
mousedown
"
,
d
(
this
,
this
.
onMouseDown
),
!
1
);
this
.
domElement
.
addEventListener
(
"
mouseup
"
,
d
(
this
,
this
.
onMouseUp
),
!
1
);
this
.
domElement
.
addEventListener
(
"
keydown
"
,
d
(
this
,
this
.
onKeyDown
),
!
1
);
this
.
domElement
.
addEventListener
(
"
keyup
"
,
d
(
this
,
this
.
onKeyUp
),
!
1
)};
THREE
.
QuakeCamera
.
prototype
=
new
THREE
.
Camera
;
THREE
.
QuakeCamera
.
prototype
.
constructor
=
THREE
.
QuakeCamera
;
THREE
.
QuakeCamera
.
prototype
.
supr
=
THREE
.
Camera
.
prototype
;
THREE
.
QuakeCamera
=
function
(
b
){
function
d
(
c
,
f
){
return
function
(){
f
.
apply
(
c
,
arguments
)}}
THREE
.
Camera
.
call
(
this
,
b
.
fov
,
b
.
aspect
,
b
.
near
,
b
.
far
,
b
.
target
);
this
.
movementSpeed
=
1
;
this
.
lookSpeed
=
0.0050
;
this
.
noFly
=!
1
;
this
.
lookVertical
=!
0
;
this
.
autoForward
=!
1
;
this
.
activeLook
=!
0
;
this
.
heightSpeed
=!
1
;
this
.
heightCoef
=
1
;
this
.
heightMin
=
0
;
this
.
constrainVertical
=!
1
;
this
.
verticalMin
=
0
;
this
.
verticalMax
=
3.14
;
this
.
domElement
=
document
;
if
(
b
){
if
(
b
.
movementSpeed
!==
undefined
)
this
.
movementSpeed
=
b
.
movementSpeed
;
if
(
b
.
lookSpeed
!==
undefined
)
this
.
lookSpeed
=
b
.
lookSpeed
;
if
(
b
.
noFly
!==
undefined
)
this
.
noFly
=
b
.
noFly
;
if
(
b
.
lookVertical
!==
undefined
)
this
.
lookVertical
=
b
.
lookVertical
;
if
(
b
.
autoForward
!==
undefined
)
this
.
autoForward
=
b
.
autoForward
;
if
(
b
.
activeLook
!==
undefined
)
this
.
activeLook
=
b
.
activeLook
;
if
(
b
.
heightSpeed
!==
undefined
)
this
.
heightSpeed
=
b
.
heightSpeed
;
if
(
b
.
heightCoef
!==
undefined
)
this
.
heightCoef
=
b
.
heightCoef
;
if
(
b
.
heightMin
!==
undefined
)
this
.
heightMin
=
b
.
heightMin
;
if
(
b
.
heightMax
!==
undefined
)
this
.
heightMax
=
b
.
heightMax
;
if
(
b
.
constrainVertical
!==
undefined
)
this
.
constrainVertical
=
b
.
constrainVertical
;
if
(
b
.
verticalMin
!==
undefined
)
this
.
verticalMin
=
b
.
verticalMin
;
if
(
b
.
verticalMax
!==
undefined
)
this
.
verticalMax
=
b
.
verticalMax
;
if
(
b
.
domElement
!==
undefined
)
this
.
domElement
=
b
.
domElement
}
this
.
theta
=
this
.
phi
=
this
.
lon
=
this
.
lat
=
this
.
mouseY
=
this
.
mouseX
=
this
.
autoSpeedFactor
=
0
;
this
.
moveForward
=!
1
;
this
.
moveBackward
=!
1
;
this
.
moveLeft
=!
1
;
this
.
moveRight
=!
1
;
this
.
mouseDragOn
=!
1
;
this
.
windowHalfX
=
window
.
innerWidth
/
2
;
this
.
windowHalfY
=
window
.
innerHeight
/
2
;
this
.
onMouseDown
=
function
(
c
){
c
.
preventDefault
();
c
.
stopPropagation
();
if
(
this
.
activeLook
)
switch
(
c
.
button
){
case
0
:
this
.
moveForward
=!
0
;
break
;
case
2
:
this
.
moveBackward
=!
0
}
this
.
mouseDragOn
=!
0
};
this
.
onMouseUp
=
function
(
c
){
c
.
preventDefault
();
c
.
stopPropagation
();
if
(
this
.
activeLook
)
switch
(
c
.
button
){
case
0
:
this
.
moveForward
=!
1
;
break
;
case
2
:
this
.
moveBackward
=!
1
}
this
.
mouseDragOn
=!
1
};
this
.
onMouseMove
=
function
(
c
){
this
.
mouseX
=
c
.
clientX
-
this
.
windowHalfX
;
this
.
mouseY
=
c
.
clientY
-
this
.
windowHalfY
};
this
.
onKeyDown
=
function
(
c
){
switch
(
c
.
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
(
c
){
switch
(
c
.
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
?
this
.
heightMin
:
this
.
position
.
y
>
this
.
heightMax
?
this
.
heightMax
:
this
.
position
.
y
)
-
this
.
heightMin
)
*
this
.
heightCoef
:
0
;(
this
.
moveForward
||
this
.
autoForward
)
&&
this
.
translateZ
(
-
(
this
.
movementSpeed
+
this
.
autoSpeedFactor
));
this
.
moveBackward
&&
this
.
translateZ
(
this
.
movementSpeed
);
this
.
moveLeft
&&
this
.
translateX
(
-
this
.
movementSpeed
);
this
.
moveRight
&&
this
.
translateX
(
this
.
movementSpeed
);
var
c
=
this
.
lookSpeed
;
this
.
activeLook
||
(
c
=
0
);
this
.
lon
+=
this
.
mouseX
*
c
;
this
.
lookVertical
&&
(
this
.
lat
-=
this
.
mouseY
*
c
);
this
.
lat
=
Math
.
max
(
-
85
,
Math
.
min
(
85
,
this
.
lat
));
this
.
phi
=
(
90
-
this
.
lat
)
*
Math
.
PI
/
180
;
this
.
theta
=
this
.
lon
*
Math
.
PI
/
180
;
if
(
this
.
constrainVertical
)
this
.
phi
=
(
this
.
phi
-
0
)
*
(
this
.
verticalMax
-
this
.
verticalMin
)
/
3.14
+
this
.
verticalMin
;
c
=
this
.
target
.
position
;
var
f
=
this
.
position
;
c
.
x
=
f
.
x
+
100
*
Math
.
sin
(
this
.
phi
)
*
Math
.
cos
(
this
.
theta
);
c
.
y
=
f
.
y
+
100
*
Math
.
cos
(
this
.
phi
);
c
.
z
=
f
.
z
+
100
*
Math
.
sin
(
this
.
phi
)
*
Math
.
sin
(
this
.
theta
);
this
.
supr
.
update
.
call
(
this
)};
this
.
domElement
.
addEventListener
(
"
contextmenu
"
,
function
(
c
){
c
.
preventDefault
()},
!
1
);
this
.
domElement
.
addEventListener
(
"
mousemove
"
,
d
(
this
,
this
.
onMouseMove
),
!
1
);
this
.
domElement
.
addEventListener
(
"
mousedown
"
,
d
(
this
,
this
.
onMouseDown
),
!
1
);
this
.
domElement
.
addEventListener
(
"
mouseup
"
,
d
(
this
,
this
.
onMouseUp
),
!
1
);
this
.
domElement
.
addEventListener
(
"
keydown
"
,
d
(
this
,
this
.
onKeyDown
),
!
1
);
this
.
domElement
.
addEventListener
(
"
keyup
"
,
d
(
this
,
this
.
onKeyUp
),
!
1
)};
THREE
.
QuakeCamera
.
prototype
=
new
THREE
.
Camera
;
THREE
.
QuakeCamera
.
prototype
.
constructor
=
THREE
.
QuakeCamera
;
THREE
.
QuakeCamera
.
prototype
.
supr
=
THREE
.
Camera
.
prototype
;
THREE
.
QuakeCamera
.
prototype
.
translate
=
function
(
b
,
d
){
this
.
matrix
.
rotateAxis
(
d
);
if
(
this
.
noFly
)
d
.
y
=
0
;
this
.
position
.
addSelf
(
d
.
multiplyScalar
(
b
));
this
.
target
.
position
.
addSelf
(
d
.
multiplyScalar
(
b
))};
THREE
.
PathCamera
=
function
(
b
){
function
d
(
p
,
o
,
u
,
y
){
var
v
=
{
name
:
u
,
fps
:
0.6
,
length
:
y
,
hierarchy
:[]},
B
,
C
=
o
.
getControlPointsArray
(),
G
=
o
.
getLength
(),
H
=
C
.
length
,
U
=
0
;
B
=
H
-
1
;
o
=
{
parent
:
-
1
,
keys
:[]};
o
.
keys
[
0
]
=
{
time
:
0
,
pos
:
C
[
0
],
rot
:[
0
,
0
,
0
,
1
],
scl
:[
1
,
1
,
1
]};
o
.
keys
[
B
]
=
{
time
:
y
,
pos
:
C
[
B
],
rot
:[
0
,
0
,
0
,
1
],
scl
:[
1
,
1
,
1
]};
for
(
B
=
1
;
B
<
H
-
1
;
B
++
){
U
=
y
*
G
.
chunks
[
B
]
/
G
.
total
;
o
.
keys
[
B
]
=
{
time
:
U
,
pos
:
C
[
B
]}}
v
.
hierarchy
[
0
]
=
o
;
THREE
.
AnimationHandler
.
add
(
v
);
return
new
THREE
.
Animation
(
p
,
u
,
THREE
.
AnimationHandler
.
CATMULLROM_FORWARD
,
!
1
)}
function
c
(
p
,
o
){
var
u
,
y
,
v
=
new
THREE
.
Geometry
;
for
(
u
=
0
;
u
<
p
.
points
.
length
*
o
;
u
++
){
y
=
u
/
(
p
.
points
.
length
*
o
);
y
=
p
.
getPoint
(
y
);
v
.
vertices
[
u
]
=
new
THREE
.
Vertex
(
new
THREE
.
Vector3
(
y
.
x
,
y
.
y
,
y
.
z
))}
return
v
}
function
f
(
p
,
o
){
var
u
=
c
(
o
,
10
),
y
=
c
(
o
,
10
),
v
=
new
THREE
.
LineBasicMaterial
({
color
:
16711680
,
linewidth
:
3
});
lineObj
=
new
THREE
.
Line
(
u
,
v
);
particleObj
=
new
THREE
.
ParticleSystem
(
y
,
new
THREE
.
ParticleBasicMaterial
({
color
:
16755200
,
size
:
3
}));
lineObj
.
scale
.
set
(
1
,
1
,
1
);
p
.
addChild
(
lineObj
);
particleObj
.
scale
.
set
(
1
,
1
,
1
);
p
.
addChild
(
particleObj
);
y
=
new
Sphere
(
1
,
...
...
build/custom/ThreeExtras.js
浏览文件 @
3b43c796
...
...
@@ -24,13 +24,14 @@ value:0,texture:null},uImageIncrement:{type:"v2",value:new THREE.Vector2(0.00195
film
:{
uniforms
:{
tDiffuse
:{
type
:
"
t
"
,
value
:
0
,
texture
:
null
},
time
:{
type
:
"
f
"
,
value
:
0
},
nIntensity
:{
type
:
"
f
"
,
value
:
0.5
},
sIntensity
:{
type
:
"
f
"
,
value
:
0.05
},
sCount
:{
type
:
"
f
"
,
value
:
4096
},
grayscale
:{
type
:
"
i
"
,
value
:
1
}},
vertexShader
:
"
varying vec2 vUv;
\n
void main() {
\n
vUv = vec2( uv.x, 1.0 - uv.y );
\n
gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
\n
}
"
,
fragmentShader
:
"
varying vec2 vUv;
\n
uniform sampler2D tDiffuse;
\n
uniform float time;
\n
uniform bool grayscale;
\n
uniform float nIntensity;
\n
uniform float sIntensity;
\n
uniform float sCount;
\n
void main() {
\n
vec4 cTextureScreen = texture2D( tDiffuse, vUv );
\n
float x = vUv.x * vUv.y * time * 1000.0;
\n
x = mod( x, 13.0 ) * mod( x, 123.0 );
\n
float dx = mod( x, 0.01 );
\n
vec3 cResult = cTextureScreen.rgb + cTextureScreen.rgb * clamp( 0.1 + dx * 100.0, 0.0, 1.0 );
\n
vec2 sc = vec2( sin( vUv.y * sCount ), cos( vUv.y * sCount ) );
\n
cResult += cTextureScreen.rgb * vec3( sc.x, sc.y, sc.x ) * sIntensity;
\n
cResult = cTextureScreen.rgb + clamp( nIntensity, 0.0,1.0 ) * ( cResult - cTextureScreen.rgb );
\n
if( grayscale ) {
\n
cResult = vec3( cResult.r * 0.3 + cResult.g * 0.59 + cResult.b * 0.11 );
\n
}
\n
gl_FragColor = vec4( cResult, cTextureScreen.a );
\n
}
"
},
screen
:{
uniforms
:{
tDiffuse
:{
type
:
"
t
"
,
value
:
0
,
texture
:
null
},
opacity
:{
type
:
"
f
"
,
value
:
1
}},
vertexShader
:
"
varying vec2 vUv;
\n
void main() {
\n
vUv = vec2( uv.x, 1.0 - uv.y );
\n
gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
\n
}
"
,
fragmentShader
:
"
varying vec2 vUv;
\n
uniform sampler2D tDiffuse;
\n
uniform float opacity;
\n
void main() {
\n
vec4 texel = texture2D( tDiffuse, vUv );
\n
gl_FragColor = opacity * texel;
\n
}
"
},
basic
:{
uniforms
:{},
vertexShader
:
"
void main() {
\n
gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
\n
}
"
,
fragmentShader
:
"
void main() {
\n
gl_FragColor = vec4( 1.0, 0.0, 0.0, 0.5 );
\n
}
"
}},
buildKernel
:
function
(
a
){
var
f
,
b
,
c
,
e
,
d
=
2
*
Math
.
ceil
(
a
*
3
)
+
1
;
d
>
25
&&
(
d
=
25
);
e
=
(
d
-
1
)
*
0.5
;
b
=
Array
(
d
);
for
(
f
=
c
=
0
;
f
<
d
;
++
f
){
b
[
f
]
=
Math
.
exp
(
-
((
f
-
e
)
*
(
f
-
e
))
/
(
2
*
a
*
a
));
c
+=
b
[
f
]}
for
(
f
=
0
;
f
<
d
;
++
f
)
b
[
f
]
/=
c
;
return
b
}};
THREE
.
QuakeCamera
=
function
(
a
){
function
f
(
b
,
c
){
return
function
(){
c
.
apply
(
b
,
arguments
)}}
THREE
.
Camera
.
call
(
this
,
a
.
fov
,
a
.
aspect
,
a
.
near
,
a
.
far
,
a
.
target
);
this
.
movementSpeed
=
1
;
this
.
lookSpeed
=
0.0050
;
this
.
noFly
=!
1
;
this
.
lookVertical
=!
0
;
this
.
autoForward
=!
1
;
this
.
activeLook
=!
0
;
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
.
activeLook
!==
undefined
)
this
.
activeLook
=
a
.
activeLook
;
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
.
phi
=
this
.
lon
=
this
.
lat
=
this
.
mouseY
=
this
.
mouseX
=
this
.
autoSpeedFactor
=
0
;
this
.
moveForward
=!
1
;
this
.
moveBackward
=!
1
;
this
.
moveLeft
=!
1
;
this
.
moveRight
=!
1
;
this
.
mouseDragOn
=!
1
;
this
.
windowHalfX
=
window
.
innerWidth
/
2
;
this
.
windowHalfY
=
window
.
innerHeight
/
2
;
this
.
onMouseDown
=
function
(
b
){
b
.
preventDefault
();
b
.
stopPropagation
();
if
(
this
.
activeLook
)
switch
(
b
.
button
){
case
0
:
this
.
moveForward
=!
0
;
break
;
case
2
:
this
.
moveBackward
=!
0
}
this
.
mouseDragOn
=!
0
};
this
.
onMouseUp
=
function
(
b
){
b
.
preventDefault
();
b
.
stopPropagation
();
if
(
this
.
activeLook
)
switch
(
b
.
button
){
case
0
:
this
.
moveForward
=
!
1
;
break
;
case
2
:
this
.
moveBackward
=!
1
}
this
.
mouseDragOn
=!
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
?
this
.
heightMin
:
this
.
position
.
y
>
this
.
heightMax
?
this
.
heightMax
:
this
.
position
.
y
)
-
this
.
heightMin
)
*
this
.
heightCoef
:
0
;(
this
.
moveForward
||
this
.
autoForward
)
&&
this
.
translateZ
(
-
(
this
.
movementSpeed
+
this
.
autoSpeedFactor
));
this
.
moveBackward
&&
this
.
translateZ
(
this
.
movementSpeed
);
this
.
moveLeft
&&
this
.
translateX
(
-
this
.
movementSpeed
);
this
.
moveRight
&&
this
.
translateX
(
this
.
movementSpeed
);
var
b
=
this
.
lookSpeed
;
this
.
activeLook
||
(
b
=
0
);
this
.
lon
+=
this
.
mouseX
*
b
;
this
.
lookVertical
&&
(
this
.
lat
-=
this
.
mouseY
*
b
);
this
.
lat
=
Math
.
max
(
-
85
,
Math
.
min
(
85
,
this
.
lat
));
this
.
phi
=
(
90
-
this
.
lat
)
*
Math
.
PI
/
180
;
this
.
theta
=
this
.
lon
*
Math
.
PI
/
180
;
b
=
this
.
target
.
position
;
var
c
=
this
.
position
;
b
.
x
=
c
.
x
+
100
*
Math
.
sin
(
this
.
phi
)
*
Math
.
cos
(
this
.
theta
);
b
.
y
=
c
.
y
+
100
*
Math
.
cos
(
this
.
phi
);
b
.
z
=
c
.
z
+
100
*
Math
.
sin
(
this
.
phi
)
*
Math
.
sin
(
this
.
theta
);
this
.
supr
.
update
.
call
(
this
)};
this
.
domElement
.
addEventListener
(
"
contextmenu
"
,
function
(
b
){
b
.
preventDefault
()},
!
1
);
this
.
domElement
.
addEventListener
(
"
mousemove
"
,
f
(
this
,
this
.
onMouseMove
),
!
1
);
this
.
domElement
.
addEventListener
(
"
mousedown
"
,
f
(
this
,
this
.
onMouseDown
),
!
1
);
this
.
domElement
.
addEventListener
(
"
mouseup
"
,
f
(
this
,
this
.
onMouseUp
),
!
1
);
this
.
domElement
.
addEventListener
(
"
keydown
"
,
f
(
this
,
this
.
onKeyDown
),
!
1
);
this
.
domElement
.
addEventListener
(
"
keyup
"
,
f
(
this
,
this
.
onKeyUp
),
!
1
)};
THREE
.
QuakeCamera
.
prototype
=
new
THREE
.
Camera
;
THREE
.
QuakeCamera
.
prototype
.
constructor
=
THREE
.
QuakeCamera
;
THREE
.
QuakeCamera
.
prototype
.
supr
=
THREE
.
Camera
.
prototype
;
THREE
.
QuakeCamera
=
function
(
a
){
function
f
(
b
,
c
){
return
function
(){
c
.
apply
(
b
,
arguments
)}}
THREE
.
Camera
.
call
(
this
,
a
.
fov
,
a
.
aspect
,
a
.
near
,
a
.
far
,
a
.
target
);
this
.
movementSpeed
=
1
;
this
.
lookSpeed
=
0.0050
;
this
.
noFly
=!
1
;
this
.
lookVertical
=!
0
;
this
.
autoForward
=!
1
;
this
.
activeLook
=!
0
;
this
.
heightSpeed
=!
1
;
this
.
heightCoef
=
1
;
this
.
heightMin
=
0
;
this
.
constrainVertical
=!
1
;
this
.
verticalMin
=
0
;
this
.
verticalMax
=
3.14
;
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
.
activeLook
!==
undefined
)
this
.
activeLook
=
a
.
activeLook
;
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
.
constrainVertical
!==
undefined
)
this
.
constrainVertical
=
a
.
constrainVertical
;
if
(
a
.
verticalMin
!==
undefined
)
this
.
verticalMin
=
a
.
verticalMin
;
if
(
a
.
verticalMax
!==
undefined
)
this
.
verticalMax
=
a
.
verticalMax
;
if
(
a
.
domElement
!==
undefined
)
this
.
domElement
=
a
.
domElement
}
this
.
theta
=
this
.
phi
=
this
.
lon
=
this
.
lat
=
this
.
mouseY
=
this
.
mouseX
=
this
.
autoSpeedFactor
=
0
;
this
.
moveForward
=!
1
;
this
.
moveBackward
=!
1
;
this
.
moveLeft
=!
1
;
this
.
moveRight
=!
1
;
this
.
mouseDragOn
=!
1
;
this
.
windowHalfX
=
window
.
innerWidth
/
2
;
this
.
windowHalfY
=
window
.
innerHeight
/
2
;
this
.
onMouseDown
=
function
(
b
){
b
.
preventDefault
();
b
.
stopPropagation
();
if
(
this
.
activeLook
)
switch
(
b
.
button
){
case
0
:
this
.
moveForward
=!
0
;
break
;
case
2
:
this
.
moveBackward
=!
0
}
this
.
mouseDragOn
=!
0
};
this
.
onMouseUp
=
function
(
b
){
b
.
preventDefault
();
b
.
stopPropagation
();
if
(
this
.
activeLook
)
switch
(
b
.
button
){
case
0
:
this
.
moveForward
=!
1
;
break
;
case
2
:
this
.
moveBackward
=!
1
}
this
.
mouseDragOn
=!
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
?
this
.
heightMin
:
this
.
position
.
y
>
this
.
heightMax
?
this
.
heightMax
:
this
.
position
.
y
)
-
this
.
heightMin
)
*
this
.
heightCoef
:
0
;(
this
.
moveForward
||
this
.
autoForward
)
&&
this
.
translateZ
(
-
(
this
.
movementSpeed
+
this
.
autoSpeedFactor
));
this
.
moveBackward
&&
this
.
translateZ
(
this
.
movementSpeed
);
this
.
moveLeft
&&
this
.
translateX
(
-
this
.
movementSpeed
);
this
.
moveRight
&&
this
.
translateX
(
this
.
movementSpeed
);
var
b
=
this
.
lookSpeed
;
this
.
activeLook
||
(
b
=
0
);
this
.
lon
+=
this
.
mouseX
*
b
;
this
.
lookVertical
&&
(
this
.
lat
-=
this
.
mouseY
*
b
);
this
.
lat
=
Math
.
max
(
-
85
,
Math
.
min
(
85
,
this
.
lat
));
this
.
phi
=
(
90
-
this
.
lat
)
*
Math
.
PI
/
180
;
this
.
theta
=
this
.
lon
*
Math
.
PI
/
180
;
if
(
this
.
constrainVertical
)
this
.
phi
=
(
this
.
phi
-
0
)
*
(
this
.
verticalMax
-
this
.
verticalMin
)
/
3.14
+
this
.
verticalMin
;
b
=
this
.
target
.
position
;
var
c
=
this
.
position
;
b
.
x
=
c
.
x
+
100
*
Math
.
sin
(
this
.
phi
)
*
Math
.
cos
(
this
.
theta
);
b
.
y
=
c
.
y
+
100
*
Math
.
cos
(
this
.
phi
);
b
.
z
=
c
.
z
+
100
*
Math
.
sin
(
this
.
phi
)
*
Math
.
sin
(
this
.
theta
);
this
.
supr
.
update
.
call
(
this
)};
this
.
domElement
.
addEventListener
(
"
contextmenu
"
,
function
(
b
){
b
.
preventDefault
()},
!
1
);
this
.
domElement
.
addEventListener
(
"
mousemove
"
,
f
(
this
,
this
.
onMouseMove
),
!
1
);
this
.
domElement
.
addEventListener
(
"
mousedown
"
,
f
(
this
,
this
.
onMouseDown
),
!
1
);
this
.
domElement
.
addEventListener
(
"
mouseup
"
,
f
(
this
,
this
.
onMouseUp
),
!
1
);
this
.
domElement
.
addEventListener
(
"
keydown
"
,
f
(
this
,
this
.
onKeyDown
),
!
1
);
this
.
domElement
.
addEventListener
(
"
keyup
"
,
f
(
this
,
this
.
onKeyUp
),
!
1
)};
THREE
.
QuakeCamera
.
prototype
=
new
THREE
.
Camera
;
THREE
.
QuakeCamera
.
prototype
.
constructor
=
THREE
.
QuakeCamera
;
THREE
.
QuakeCamera
.
prototype
.
supr
=
THREE
.
Camera
.
prototype
;
THREE
.
QuakeCamera
.
prototype
.
translate
=
function
(
a
,
f
){
this
.
matrix
.
rotateAxis
(
f
);
if
(
this
.
noFly
)
f
.
y
=
0
;
this
.
position
.
addSelf
(
f
.
multiplyScalar
(
a
));
this
.
target
.
position
.
addSelf
(
f
.
multiplyScalar
(
a
))};
THREE
.
PathCamera
=
function
(
a
){
function
f
(
k
,
j
,
n
,
p
){
var
t
=
{
name
:
n
,
fps
:
0.6
,
length
:
p
,
hierarchy
:[]},
x
,
w
=
j
.
getControlPointsArray
(),
u
=
j
.
getLength
(),
B
=
w
.
length
,
y
=
0
;
x
=
B
-
1
;
j
=
{
parent
:
-
1
,
keys
:[]};
j
.
keys
[
0
]
=
{
time
:
0
,
pos
:
w
[
0
],
rot
:[
0
,
0
,
0
,
1
],
scl
:[
1
,
1
,
1
]};
j
.
keys
[
x
]
=
{
time
:
p
,
pos
:
w
[
x
],
rot
:[
0
,
0
,
0
,
1
],
scl
:[
1
,
1
,
1
]};
for
(
x
=
1
;
x
<
B
-
1
;
x
++
){
y
=
p
*
u
.
chunks
[
x
]
/
u
.
total
;
j
.
keys
[
x
]
=
{
time
:
y
,
pos
:
w
[
x
]}}
t
.
hierarchy
[
0
]
=
j
;
THREE
.
AnimationHandler
.
add
(
t
);
return
new
THREE
.
Animation
(
k
,
n
,
THREE
.
AnimationHandler
.
CATMULLROM_FORWARD
,
!
1
)}
function
b
(
k
,
j
){
var
n
,
p
,
t
=
new
THREE
.
Geometry
;
for
(
n
=
0
;
n
<
k
.
points
.
length
*
j
;
n
++
){
p
=
n
/
(
k
.
points
.
length
*
j
);
p
=
k
.
getPoint
(
p
);
t
.
vertices
[
n
]
=
new
THREE
.
Vertex
(
new
THREE
.
Vector3
(
p
.
x
,
p
.
y
,
p
.
z
))}
return
t
}
function
c
(
k
,
j
){
var
n
=
b
(
j
,
10
),
p
=
b
(
j
,
10
),
t
=
new
THREE
.
LineBasicMaterial
({
color
:
16711680
,
linewidth
:
3
});
lineObj
=
new
THREE
.
Line
(
n
,
t
);
particleObj
=
new
THREE
.
ParticleSystem
(
p
,
new
THREE
.
ParticleBasicMaterial
({
color
:
16755200
,
size
:
3
}));
lineObj
.
scale
.
set
(
1
,
1
,
1
);
k
.
addChild
(
lineObj
);
particleObj
.
scale
.
set
(
1
,
1
,
1
);
k
.
addChild
(
particleObj
);
p
=
new
Sphere
(
1
,
...
...
examples/webgl_geometry_minecraft_ao.html
浏览文件 @
3b43c796
...
...
@@ -86,6 +86,7 @@
container
=
document
.
getElementById
(
'
container
'
);
camera
=
new
THREE
.
QuakeCamera
(
{
fov
:
60
,
aspect
:
window
.
innerWidth
/
window
.
innerHeight
,
near
:
1
,
far
:
20000
,
constrainVertical
:
true
,
verticalMin
:
1.1
,
verticalMax
:
2.2
,
movementSpeed
:
15
,
lookSpeed
:
0.005
,
noFly
:
false
,
lookVertical
:
true
}
);
camera
.
target
.
position
.
z
=
-
100
;
...
...
src/extras/cameras/QuakeCamera.js
浏览文件 @
3b43c796
...
...
@@ -17,6 +17,10 @@
* lookVertical: <bool>,
* autoForward: <bool>,
* constrainVertical: <bool>,
* verticalMin: <float>,
* verticalMax: <float>,
* heightSpeed: <bool>,
* heightCoef: <float>,
* heightMin: <float>,
...
...
@@ -43,6 +47,10 @@ THREE.QuakeCamera = function ( parameters ) {
this
.
heightCoef
=
1.0
;
this
.
heightMin
=
0.0
;
this
.
constrainVertical
=
false
;
this
.
verticalMin
=
0
;
this
.
verticalMax
=
3.14
;
this
.
domElement
=
document
;
if
(
parameters
)
{
...
...
@@ -60,6 +68,10 @@ THREE.QuakeCamera = function ( parameters ) {
if
(
parameters
.
heightCoef
!==
undefined
)
this
.
heightCoef
=
parameters
.
heightCoef
;
if
(
parameters
.
heightMin
!==
undefined
)
this
.
heightMin
=
parameters
.
heightMin
;
if
(
parameters
.
heightMax
!==
undefined
)
this
.
heightMax
=
parameters
.
heightMax
;
if
(
parameters
.
constrainVertical
!==
undefined
)
this
.
constrainVertical
=
parameters
.
constrainVertical
;
if
(
parameters
.
verticalMin
!==
undefined
)
this
.
verticalMin
=
parameters
.
verticalMin
;
if
(
parameters
.
verticalMax
!==
undefined
)
this
.
verticalMax
=
parameters
.
verticalMax
;
if
(
parameters
.
domElement
!==
undefined
)
this
.
domElement
=
parameters
.
domElement
;
...
...
@@ -207,6 +219,12 @@ THREE.QuakeCamera = function ( parameters ) {
this
.
phi
=
(
90
-
this
.
lat
)
*
Math
.
PI
/
180
;
this
.
theta
=
this
.
lon
*
Math
.
PI
/
180
;
if
(
this
.
constrainVertical
)
{
this
.
phi
=
map_linear
(
this
.
phi
,
0
,
3.14
,
this
.
verticalMin
,
this
.
verticalMax
);
}
var
targetPosition
=
this
.
target
.
position
,
position
=
this
.
position
;
...
...
@@ -237,6 +255,12 @@ THREE.QuakeCamera = function ( parameters ) {
};
function
map_linear
(
x
,
sa
,
sb
,
ea
,
eb
)
{
return
(
x
-
sa
)
*
(
eb
-
ea
)
/
(
sb
-
sa
)
+
ea
;
};
function
clamp_bottom
(
x
,
a
)
{
return
x
<
a
?
a
:
x
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录