Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Ablesons
three.js
提交
8a9f5196
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,发现更多精彩内容 >>
提交
8a9f5196
编写于
12月 20, 2014
作者:
M
Mr.doob
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Swapped examples.
上级
a2b1daef
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
439 addition
and
173 deletion
+439
-173
examples/index.html
examples/index.html
+1
-1
examples/webgl_materials_normaldisplacementmap.html
examples/webgl_materials_normaldisplacementmap.html
+336
-0
examples/webgl_materials_normalmap.html
examples/webgl_materials_normalmap.html
+102
-172
未找到文件。
examples/index.html
浏览文件 @
8a9f5196
...
...
@@ -301,7 +301,7 @@
"
webgl_materials_grass
"
,
"
webgl_materials_lightmap
"
,
"
webgl_materials_normalmap
"
,
"
webgl_materials_normal
map2
"
,
"
webgl_materials_normal
displacementmap
"
,
"
webgl_materials_parallaxmap
"
,
"
webgl_materials_shaders_fresnel
"
,
"
webgl_materials_skin
"
,
...
...
examples/webgl_materials_normal
map2
.html
→
examples/webgl_materials_normal
displacementmap
.html
浏览文件 @
8a9f5196
<!DOCTYPE html>
<html
lang=
"en"
>
<head>
<title>
three.js webgl - materials - normal map
[Lee Perry-Smith]
</title>
<title>
three.js webgl - materials - normal map
</title>
<meta
charset=
"utf-8"
>
<meta
name=
"viewport"
content=
"width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0"
>
<style>
...
...
@@ -14,9 +14,7 @@
overflow
:
hidden
;
}
a
{
color
:
#ffffff
;
}
a
{
color
:
#ffffff
;
}
#info
{
position
:
absolute
;
...
...
@@ -36,38 +34,26 @@
#vt
{
display
:
none
}
#vt
,
#vt
a
{
color
:
orange
;
}
.code
{
}
</style>
</head>
<body>
<div
id=
"info"
>
<a
href=
"http://threejs.org"
target=
"_blank"
>
three.js
</a>
- webgl
normal
map demo.
<a
href=
"http://www.ir-ltd.net/infinite-3d-head-scan-released/"
target=
"_blank"
>
Lee Perry-Smith
</a>
head.
<a
href=
"http://threejs.org"
target=
"_blank"
>
three.js
</a>
- webgl
(
<span
id=
"description"
>
normal + ao + displacement + environment + shadow
</span>
)
map demo.
ninja head from
<a
href=
"http://developer.amd.com/archive/gpu/MeshMapper/pages/default.aspx"
target=
"_blank"
>
AMD GPU MeshMapper
</a>
<div
id=
"vt"
>
displacement mapping needs vertex textures (GPU with Shader Model 3.0)
<br/>
on Windows use
<span
class=
"code"
>
Chrome --use-gl=desktop
</span>
or Firefox 4
<br/>
please star this
<a
href=
"http://code.google.com/p/chromium/issues/detail?id=52497"
>
Chrome issue
</a>
to get ANGLE support
</div>
<div
id=
"vt"
>
displacement mapping needs vertex textures (GPU with Shader Model 3.0)
</div>
</div>
<script
src=
"../build/three.min.js"
></script>
<script
src=
"js/loaders/BinaryLoader.js"
></script>
<script
src=
"js/shaders/NormalDisplacementShader.js"
></script>
<script
src=
"js/Detector.js"
></script>
<script
src=
"js/libs/stats.min.js"
></script>
<script
src=
"js/shaders/BleachBypassShader.js"
></script>
<script
src=
"js/shaders/ColorCorrectionShader.js"
></script>
<script
src=
"js/shaders/CopyShader.js"
></script>
<script
src=
"js/shaders/FXAAShader.js"
></script>
<script
src=
"js/postprocessing/EffectComposer.js"
></script>
<script
src=
"js/postprocessing/RenderPass.js"
></script>
<script
src=
"js/postprocessing/ShaderPass.js"
></script>
<script
src=
"js/postprocessing/MaskPass.js"
></script>
<script>
if
(
!
Detector
.
webgl
)
Detector
.
addGetWebGLMessage
();
...
...
@@ -78,10 +64,10 @@
var
camera
,
scene
,
renderer
;
var
mesh
,
zmesh
,
lightMesh
,
geometry
;
var
mesh1
;
var
mesh
,
zmesh
,
geometry
;
var
mesh1
,
mesh2
;
var
directional
Light
,
pointLight
,
ambientLight
;
var
spot
Light
,
pointLight
,
ambientLight
;
var
mouseX
=
0
;
var
mouseY
=
0
;
...
...
@@ -89,7 +75,9 @@
var
windowHalfX
=
window
.
innerWidth
/
2
;
var
windowHalfY
=
window
.
innerHeight
/
2
;
var
composer
,
effectFXAA
;
var
r
=
0.0
;
document
.
addEventListener
(
'
mousemove
'
,
onDocumentMouseMove
,
false
);
init
();
animate
();
...
...
@@ -99,45 +87,128 @@
container
=
document
.
createElement
(
'
div
'
);
document
.
body
.
appendChild
(
container
);
camera
=
new
THREE
.
PerspectiveCamera
(
27
,
window
.
innerWidth
/
window
.
innerHeight
,
1
,
10000
);
camera
.
position
.
z
=
1
2
00
;
camera
=
new
THREE
.
OrthographicCamera
(
window
.
innerWidth
/
-
2
,
window
.
innerWidth
/
2
,
window
.
innerHeight
/
2
,
window
.
innerHeight
/
-
2
,
-
10000
,
10000
);
camera
.
position
.
z
=
1
5
00
;
scene
=
new
THREE
.
Scene
();
// LIGHTS
ambientLight
=
new
THREE
.
AmbientLight
(
0x
444444
);
ambientLight
=
new
THREE
.
AmbientLight
(
0x
111111
);
scene
.
add
(
ambientLight
);
pointLight
=
new
THREE
.
PointLight
(
0xff
ffff
,
1.25
,
1
000
);
pointLight
.
position
.
set
(
0
,
0
,
600
)
;
pointLight
=
new
THREE
.
PointLight
(
0xff
0
000
);
pointLight
.
position
.
z
=
10000
;
pointLight
.
distance
=
4000
;
scene
.
add
(
pointLight
);
directionalLight
=
new
THREE
.
DirectionalLight
(
0xffffff
);
directionalLight
.
position
.
set
(
1
,
-
0.5
,
-
1
);
scene
.
add
(
directionalLight
);
var
material
=
new
THREE
.
MeshPhongMaterial
(
{
color
:
0xdddddd
,
ambient
:
0x111111
,
specular
:
0x222222
,
shininess
:
35
,
map
:
THREE
.
ImageUtils
.
loadTexture
(
"
obj/leeperrysmith/Map-COL.jpg
"
),
specularMap
:
THREE
.
ImageUtils
.
loadTexture
(
"
obj/leeperrysmith/Map-SPEC.jpg
"
),
normalMap
:
THREE
.
ImageUtils
.
loadTexture
(
"
obj/leeperrysmith/Infinite-Level_02_Tangent_SmoothUV.jpg
"
),
normalScale
:
new
THREE
.
Vector2
(
0.8
,
0.8
),
wrapRGB
:
new
THREE
.
Vector3
(
0.575
,
0.5
,
0.5
),
wrapAround
:
true
pointLight2
=
new
THREE
.
PointLight
(
0xff5500
);
pointLight2
.
position
.
z
=
1000
;
pointLight2
.
distance
=
2000
;
scene
.
add
(
pointLight2
);
pointLight3
=
new
THREE
.
PointLight
(
0x0000ff
);
pointLight3
.
position
.
x
=
-
1000
;
pointLight3
.
position
.
z
=
1000
;
pointLight3
.
distance
=
2000
;
scene
.
add
(
pointLight3
);
spotLight
=
new
THREE
.
SpotLight
(
0xaaaaaa
);
spotLight
.
position
.
set
(
1000
,
500
,
1000
);
spotLight
.
castShadow
=
true
;
spotLight
.
shadowCameraNear
=
500
;
spotLight
.
shadowCameraFov
=
70
;
spotLight
.
shadowBias
=
0.001
;
spotLight
.
shadowMapWidth
=
1024
;
spotLight
.
shadowMapHeight
=
1024
;
scene
.
add
(
spotLight
);
directionalLight2
=
new
THREE
.
DirectionalLight
(
0xaaff33
,
0
);
directionalLight2
.
position
.
set
(
-
1
,
1
,
0.5
).
normalize
();
//scene.add( directionalLight2 );
directionalLight3
=
new
THREE
.
DirectionalLight
(
0xaaff33
);
directionalLight3
.
position
.
set
(
-
1
,
1
,
0.5
).
normalize
();
//scene.add( directionalLight3 );
// light representation
var
sphere
=
new
THREE
.
SphereGeometry
(
100
,
16
,
8
);
var
path
=
"
textures/cube/SwedishRoyalCastle/
"
;
var
format
=
'
.jpg
'
;
var
urls
=
[
path
+
'
px
'
+
format
,
path
+
'
nx
'
+
format
,
path
+
'
py
'
+
format
,
path
+
'
ny
'
+
format
,
path
+
'
pz
'
+
format
,
path
+
'
nz
'
+
format
];
var
reflectionCube
=
THREE
.
ImageUtils
.
loadTextureCube
(
urls
);
// common material parameters
var
ambient
=
0x050505
,
diffuse
=
0x331100
,
specular
=
0xffffff
,
shininess
=
10
,
scale
=
23
;
// normal map shader
var
shader
=
THREE
.
NormalDisplacementShader
;
var
uniforms
=
THREE
.
UniformsUtils
.
clone
(
shader
.
uniforms
);
uniforms
[
"
enableAO
"
].
value
=
true
;
uniforms
[
"
enableDiffuse
"
].
value
=
false
;
uniforms
[
"
enableSpecular
"
].
value
=
false
;
uniforms
[
"
enableReflection
"
].
value
=
true
;
uniforms
[
"
enableDisplacement
"
].
value
=
true
;
uniforms
[
"
tNormal
"
].
value
=
THREE
.
ImageUtils
.
loadTexture
(
"
textures/normal/ninja/normal.jpg
"
);
uniforms
[
"
tAO
"
].
value
=
THREE
.
ImageUtils
.
loadTexture
(
"
textures/normal/ninja/ao.jpg
"
);
uniforms
[
"
tDisplacement
"
].
value
=
THREE
.
ImageUtils
.
loadTexture
(
"
textures/normal/ninja/displacement.jpg
"
);
uniforms
[
"
uDisplacementBias
"
].
value
=
-
0.428408
;
uniforms
[
"
uDisplacementScale
"
].
value
=
2.436143
;
uniforms
[
"
uNormalScale
"
].
value
.
y
=
-
1
;
uniforms
[
"
diffuse
"
].
value
.
setHex
(
diffuse
);
uniforms
[
"
specular
"
].
value
.
setHex
(
specular
);
uniforms
[
"
ambient
"
].
value
.
setHex
(
ambient
);
uniforms
[
"
shininess
"
].
value
=
shininess
;
uniforms
[
"
tCube
"
].
value
=
reflectionCube
;
uniforms
[
"
reflectivity
"
].
value
=
0.1
;
uniforms
[
"
diffuse
"
].
value
.
convertGammaToLinear
();
uniforms
[
"
specular
"
].
value
.
convertGammaToLinear
();
uniforms
[
"
ambient
"
].
value
.
convertGammaToLinear
();
var
parameters
=
{
fragmentShader
:
shader
.
fragmentShader
,
vertexShader
:
shader
.
vertexShader
,
uniforms
:
uniforms
,
lights
:
true
,
fog
:
false
};
var
material1
=
new
THREE
.
ShaderMaterial
(
parameters
);
var
material2
=
new
THREE
.
MeshPhongMaterial
(
{
color
:
diffuse
,
specular
:
specular
,
ambient
:
ambient
,
shininess
:
shininess
,
normalMap
:
uniforms
[
"
tNormal
"
].
value
,
normalScale
:
uniforms
[
"
uNormalScale
"
].
value
,
envMap
:
reflectionCube
,
combine
:
THREE
.
MixOperation
,
reflectivity
:
0.1
}
);
loader
=
new
THREE
.
JSONLoader
(
true
);
//
loader
=
new
THREE
.
BinaryLoader
(
true
);
document
.
body
.
appendChild
(
loader
.
statusDomElement
);
loader
.
load
(
"
obj/leeperrysmith/LeePerrySmith.js
"
,
function
(
geometry
)
{
createScene
(
geometry
,
100
,
material
)
}
);
loader
.
load
(
"
obj/ninja/NinjaLo_bin.js
"
,
function
(
geometry
)
{
createScene
(
geometry
,
scale
,
material1
,
material2
)
}
);
//
renderer
=
new
THREE
.
WebGLRenderer
(
{
antialias
:
false
}
);
renderer
.
setClearColor
(
0x111111
,
1
);
renderer
=
new
THREE
.
WebGLRenderer
();
renderer
.
setPixelRatio
(
window
.
devicePixelRatio
);
renderer
.
setSize
(
window
.
innerWidth
,
window
.
innerHeight
);
container
.
appendChild
(
renderer
.
domElement
);
...
...
@@ -149,6 +220,16 @@
//
renderer
.
shadowMapEnabled
=
true
;
renderer
.
shadowMapType
=
THREE
.
PCFShadowMap
;
//
var
description
=
"
normal + ao
"
+
(
renderer
.
supportsVertexTextures
()
?
"
+ displacement + environment + shadow
"
:
"
+ <strike>displacement</strike>
"
);
document
.
getElementById
(
"
description
"
).
innerHTML
=
description
;
document
.
getElementById
(
"
vt
"
).
style
.
display
=
renderer
.
supportsVertexTextures
()
?
"
none
"
:
"
block
"
;
if
(
statsEnabled
)
{
stats
=
new
Stats
();
...
...
@@ -159,70 +240,47 @@
}
// COMPOSER
renderer
.
autoClear
=
false
;
var
renderModel
=
new
THREE
.
RenderPass
(
scene
,
camera
);
var
effectBleach
=
new
THREE
.
ShaderPass
(
THREE
.
BleachBypassShader
);
var
effectColor
=
new
THREE
.
ShaderPass
(
THREE
.
ColorCorrectionShader
);
effectFXAA
=
new
THREE
.
ShaderPass
(
THREE
.
FXAAShader
);
effectFXAA
.
uniforms
[
'
resolution
'
].
value
.
set
(
1
/
window
.
innerWidth
,
1
/
window
.
innerHeight
);
effectBleach
.
uniforms
[
'
opacity
'
].
value
=
0.4
;
effectColor
.
uniforms
[
'
powRGB
'
].
value
.
set
(
1.4
,
1.45
,
1.45
);
effectColor
.
uniforms
[
'
mulRGB
'
].
value
.
set
(
1.1
,
1.1
,
1.1
);
effectFXAA
.
renderToScreen
=
true
;
composer
=
new
THREE
.
EffectComposer
(
renderer
);
composer
.
addPass
(
renderModel
);
composer
.
addPass
(
effectBleach
);
composer
.
addPass
(
effectColor
);
composer
.
addPass
(
effectFXAA
);
// EVENTS
//
document
.
addEventListener
(
'
mousemove
'
,
onDocumentMouseMove
,
false
);
window
.
addEventListener
(
'
resize
'
,
onWindowResize
,
false
);
}
function
createScene
(
geometry
,
scale
,
material
)
{
geometry
.
computeTangents
();
function
onWindowResize
()
{
mesh1
=
new
THREE
.
Mesh
(
geometry
,
material
);
windowHalfX
=
window
.
innerWidth
/
2
;
windowHalfY
=
window
.
innerHeight
/
2
;
mesh1
.
position
.
y
=
-
50
;
mesh1
.
scale
.
x
=
mesh1
.
scale
.
y
=
mesh1
.
scale
.
z
=
scale
;
camera
.
left
=
window
.
innerWidth
/
-
2
;
camera
.
right
=
window
.
innerWidth
/
2
;
camera
.
top
=
window
.
innerHeight
/
2
;
camera
.
bottom
=
window
.
innerHeight
/
-
2
;
scene
.
add
(
mesh1
);
camera
.
updateProjectionMatrix
(
);
loader
.
statusDomElement
.
style
.
display
=
"
none
"
;
renderer
.
setSize
(
window
.
innerWidth
,
window
.
innerHeight
)
;
}
//
function
createScene
(
geometry
,
scale
,
material1
,
material2
)
{
function
onWindowResize
(
event
)
{
SCREEN_WIDTH
=
window
.
innerWidth
;
SCREEN_HEIGHT
=
window
.
innerHeight
;
renderer
.
setSize
(
SCREEN_WIDTH
,
SCREEN_HEIGHT
);
geometry
.
computeTangents
();
camera
.
aspect
=
SCREEN_WIDTH
/
SCREEN_HEIGHT
;
camera
.
updateProjectionMatrix
();
mesh1
=
new
THREE
.
Mesh
(
geometry
,
material1
);
mesh1
.
position
.
x
=
-
scale
*
12
;
mesh1
.
scale
.
set
(
scale
,
scale
,
scale
);
mesh1
.
castShadow
=
true
;
mesh1
.
receiveShadow
=
true
;
scene
.
add
(
mesh1
);
composer
.
reset
();
mesh2
=
new
THREE
.
Mesh
(
geometry
,
material2
);
mesh2
.
position
.
x
=
scale
*
12
;
mesh2
.
scale
.
set
(
scale
,
scale
,
scale
);
mesh2
.
castShadow
=
true
;
mesh2
.
receiveShadow
=
true
;
scene
.
add
(
mesh2
);
effectFXAA
.
uniforms
[
'
resolution
'
].
value
.
set
(
1
/
SCREEN_WIDTH
,
1
/
SCREEN_HEIGHT
)
;
loader
.
statusDomElement
.
style
.
display
=
"
none
"
;
}
...
...
@@ -255,11 +313,23 @@
}
//renderer.render( scene, camera );
composer
.
render
();
if
(
mesh2
)
{
mesh2
.
rotation
.
y
=
ry
;
mesh2
.
rotation
.
x
=
rx
;
}
pointLight
.
position
.
x
=
2500
*
Math
.
cos
(
r
);
pointLight
.
position
.
z
=
2500
*
Math
.
sin
(
r
);
r
+=
0.01
;
renderer
.
render
(
scene
,
camera
);
}
</script>
</body>
...
...
examples/webgl_materials_normalmap.html
浏览文件 @
8a9f5196
<!DOCTYPE html>
<html
lang=
"en"
>
<head>
<title>
three.js webgl - materials - normal map
</title>
<title>
three.js webgl - materials - normal map
[Lee Perry-Smith]
</title>
<meta
charset=
"utf-8"
>
<meta
name=
"viewport"
content=
"width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0"
>
<style>
...
...
@@ -14,7 +14,9 @@
overflow
:
hidden
;
}
a
{
color
:
#ffffff
;
}
a
{
color
:
#ffffff
;
}
#info
{
position
:
absolute
;
...
...
@@ -34,26 +36,38 @@
#vt
{
display
:
none
}
#vt
,
#vt
a
{
color
:
orange
;
}
.code
{
}
</style>
</head>
<body>
<div
id=
"info"
>
<a
href=
"http://threejs.org"
target=
"_blank"
>
three.js
</a>
- webgl
(
<span
id=
"description"
>
normal + ao + displacement + environment + shadow
</span>
)
map demo.
ninja head from
<a
href=
"http://developer.amd.com/archive/gpu/MeshMapper/pages/default.aspx"
target=
"_blank"
>
AMD GPU MeshMapper
</a>
<a
href=
"http://threejs.org"
target=
"_blank"
>
three.js
</a>
- webgl
normal
map demo.
<a
href=
"http://www.ir-ltd.net/infinite-3d-head-scan-released/"
target=
"_blank"
>
Lee Perry-Smith
</a>
head.
<div
id=
"vt"
>
displacement mapping needs vertex textures (GPU with Shader Model 3.0)
</div>
<div
id=
"vt"
>
displacement mapping needs vertex textures (GPU with Shader Model 3.0)
<br/>
on Windows use
<span
class=
"code"
>
Chrome --use-gl=desktop
</span>
or Firefox 4
<br/>
please star this
<a
href=
"http://code.google.com/p/chromium/issues/detail?id=52497"
>
Chrome issue
</a>
to get ANGLE support
</div>
</div>
<script
src=
"../build/three.min.js"
></script>
<script
src=
"js/loaders/BinaryLoader.js"
></script>
<script
src=
"js/shaders/NormalDisplacementShader.js"
></script>
<script
src=
"js/Detector.js"
></script>
<script
src=
"js/libs/stats.min.js"
></script>
<script
src=
"js/shaders/BleachBypassShader.js"
></script>
<script
src=
"js/shaders/ColorCorrectionShader.js"
></script>
<script
src=
"js/shaders/CopyShader.js"
></script>
<script
src=
"js/shaders/FXAAShader.js"
></script>
<script
src=
"js/postprocessing/EffectComposer.js"
></script>
<script
src=
"js/postprocessing/RenderPass.js"
></script>
<script
src=
"js/postprocessing/ShaderPass.js"
></script>
<script
src=
"js/postprocessing/MaskPass.js"
></script>
<script>
if
(
!
Detector
.
webgl
)
Detector
.
addGetWebGLMessage
();
...
...
@@ -64,10 +78,10 @@
var
camera
,
scene
,
renderer
;
var
mesh
,
zmesh
,
geometry
;
var
mesh1
,
mesh2
;
var
mesh
,
zmesh
,
lightMesh
,
geometry
;
var
mesh1
;
var
spot
Light
,
pointLight
,
ambientLight
;
var
directional
Light
,
pointLight
,
ambientLight
;
var
mouseX
=
0
;
var
mouseY
=
0
;
...
...
@@ -75,9 +89,7 @@
var
windowHalfX
=
window
.
innerWidth
/
2
;
var
windowHalfY
=
window
.
innerHeight
/
2
;
var
r
=
0.0
;
document
.
addEventListener
(
'
mousemove
'
,
onDocumentMouseMove
,
false
);
var
composer
,
effectFXAA
;
init
();
animate
();
...
...
@@ -87,128 +99,45 @@
container
=
document
.
createElement
(
'
div
'
);
document
.
body
.
appendChild
(
container
);
camera
=
new
THREE
.
OrthographicCamera
(
window
.
innerWidth
/
-
2
,
window
.
innerWidth
/
2
,
window
.
innerHeight
/
2
,
window
.
innerHeight
/
-
2
,
-
10000
,
10000
);
camera
.
position
.
z
=
1
5
00
;
camera
=
new
THREE
.
PerspectiveCamera
(
27
,
window
.
innerWidth
/
window
.
innerHeight
,
1
,
10000
);
camera
.
position
.
z
=
1
2
00
;
scene
=
new
THREE
.
Scene
();
// LIGHTS
ambientLight
=
new
THREE
.
AmbientLight
(
0x
111111
);
ambientLight
=
new
THREE
.
AmbientLight
(
0x
444444
);
scene
.
add
(
ambientLight
);
pointLight
=
new
THREE
.
PointLight
(
0xff0000
);
pointLight
.
position
.
z
=
10000
;
pointLight
.
distance
=
4000
;
scene
.
add
(
pointLight
);
pointLight2
=
new
THREE
.
PointLight
(
0xff5500
);
pointLight2
.
position
.
z
=
1000
;
pointLight2
.
distance
=
2000
;
scene
.
add
(
pointLight2
);
pointLight3
=
new
THREE
.
PointLight
(
0x0000ff
);
pointLight3
.
position
.
x
=
-
1000
;
pointLight3
.
position
.
z
=
1000
;
pointLight3
.
distance
=
2000
;
scene
.
add
(
pointLight3
);
spotLight
=
new
THREE
.
SpotLight
(
0xaaaaaa
);
spotLight
.
position
.
set
(
1000
,
500
,
1000
);
spotLight
.
castShadow
=
true
;
spotLight
.
shadowCameraNear
=
500
;
spotLight
.
shadowCameraFov
=
70
;
spotLight
.
shadowBias
=
0.001
;
spotLight
.
shadowMapWidth
=
1024
;
spotLight
.
shadowMapHeight
=
1024
;
scene
.
add
(
spotLight
);
directionalLight2
=
new
THREE
.
DirectionalLight
(
0xaaff33
,
0
);
directionalLight2
.
position
.
set
(
-
1
,
1
,
0.5
).
normalize
();
//scene.add( directionalLight2 );
directionalLight3
=
new
THREE
.
DirectionalLight
(
0xaaff33
);
directionalLight3
.
position
.
set
(
-
1
,
1
,
0.5
).
normalize
();
//scene.add( directionalLight3 );
// light representation
var
sphere
=
new
THREE
.
SphereGeometry
(
100
,
16
,
8
);
var
path
=
"
textures/cube/SwedishRoyalCastle/
"
;
var
format
=
'
.jpg
'
;
var
urls
=
[
path
+
'
px
'
+
format
,
path
+
'
nx
'
+
format
,
path
+
'
py
'
+
format
,
path
+
'
ny
'
+
format
,
path
+
'
pz
'
+
format
,
path
+
'
nz
'
+
format
];
pointLight
=
new
THREE
.
PointLight
(
0xffffff
,
1.25
,
1000
);
pointLight
.
position
.
set
(
0
,
0
,
600
);
var
reflectionCube
=
THREE
.
ImageUtils
.
loadTextureCube
(
urls
);
// common material parameters
var
ambient
=
0x050505
,
diffuse
=
0x331100
,
specular
=
0xffffff
,
shininess
=
10
,
scale
=
23
;
// normal map shader
var
shader
=
THREE
.
NormalDisplacementShader
;
var
uniforms
=
THREE
.
UniformsUtils
.
clone
(
shader
.
uniforms
);
uniforms
[
"
enableAO
"
].
value
=
true
;
uniforms
[
"
enableDiffuse
"
].
value
=
false
;
uniforms
[
"
enableSpecular
"
].
value
=
false
;
uniforms
[
"
enableReflection
"
].
value
=
true
;
uniforms
[
"
enableDisplacement
"
].
value
=
true
;
uniforms
[
"
tNormal
"
].
value
=
THREE
.
ImageUtils
.
loadTexture
(
"
textures/normal/ninja/normal.jpg
"
);
uniforms
[
"
tAO
"
].
value
=
THREE
.
ImageUtils
.
loadTexture
(
"
textures/normal/ninja/ao.jpg
"
);
uniforms
[
"
tDisplacement
"
].
value
=
THREE
.
ImageUtils
.
loadTexture
(
"
textures/normal/ninja/displacement.jpg
"
);
uniforms
[
"
uDisplacementBias
"
].
value
=
-
0.428408
;
uniforms
[
"
uDisplacementScale
"
].
value
=
2.436143
;
uniforms
[
"
uNormalScale
"
].
value
.
y
=
-
1
;
uniforms
[
"
diffuse
"
].
value
.
setHex
(
diffuse
);
uniforms
[
"
specular
"
].
value
.
setHex
(
specular
);
uniforms
[
"
ambient
"
].
value
.
setHex
(
ambient
);
uniforms
[
"
shininess
"
].
value
=
shininess
;
uniforms
[
"
tCube
"
].
value
=
reflectionCube
;
uniforms
[
"
reflectivity
"
].
value
=
0.1
;
uniforms
[
"
diffuse
"
].
value
.
convertGammaToLinear
();
uniforms
[
"
specular
"
].
value
.
convertGammaToLinear
();
uniforms
[
"
ambient
"
].
value
.
convertGammaToLinear
();
var
parameters
=
{
fragmentShader
:
shader
.
fragmentShader
,
vertexShader
:
shader
.
vertexShader
,
uniforms
:
uniforms
,
lights
:
true
,
fog
:
false
};
var
material1
=
new
THREE
.
ShaderMaterial
(
parameters
);
scene
.
add
(
pointLight
);
var
material2
=
new
THREE
.
MeshPhongMaterial
(
{
color
:
diffuse
,
specular
:
specular
,
ambient
:
ambient
,
shininess
:
shininess
,
normalMap
:
uniforms
[
"
tNormal
"
].
value
,
normalScale
:
uniforms
[
"
uNormalScale
"
].
value
,
envMap
:
reflectionCube
,
combine
:
THREE
.
MixOperation
,
reflectivity
:
0.1
directionalLight
=
new
THREE
.
DirectionalLight
(
0xffffff
);
directionalLight
.
position
.
set
(
1
,
-
0.5
,
-
1
);
scene
.
add
(
directionalLight
);
var
material
=
new
THREE
.
MeshPhongMaterial
(
{
color
:
0xdddddd
,
ambient
:
0x111111
,
specular
:
0x222222
,
shininess
:
35
,
map
:
THREE
.
ImageUtils
.
loadTexture
(
"
obj/leeperrysmith/Map-COL.jpg
"
),
specularMap
:
THREE
.
ImageUtils
.
loadTexture
(
"
obj/leeperrysmith/Map-SPEC.jpg
"
),
normalMap
:
THREE
.
ImageUtils
.
loadTexture
(
"
obj/leeperrysmith/Infinite-Level_02_Tangent_SmoothUV.jpg
"
),
normalScale
:
new
THREE
.
Vector2
(
0.8
,
0.8
),
wrapRGB
:
new
THREE
.
Vector3
(
0.575
,
0.5
,
0.5
),
wrapAround
:
true
}
);
//
loader
=
new
THREE
.
BinaryLoader
(
true
);
loader
=
new
THREE
.
JSONLoader
(
true
);
document
.
body
.
appendChild
(
loader
.
statusDomElement
);
loader
.
load
(
"
obj/ninja/NinjaLo_bin.js
"
,
function
(
geometry
)
{
createScene
(
geometry
,
scale
,
material1
,
material2
)
}
);
//
loader
.
load
(
"
obj/leeperrysmith/LeePerrySmith.js
"
,
function
(
geometry
)
{
createScene
(
geometry
,
100
,
material
)
}
);
renderer
=
new
THREE
.
WebGLRenderer
();
renderer
=
new
THREE
.
WebGLRenderer
(
{
antialias
:
false
}
);
renderer
.
setClearColor
(
0x111111
,
1
);
renderer
.
setPixelRatio
(
window
.
devicePixelRatio
);
renderer
.
setSize
(
window
.
innerWidth
,
window
.
innerHeight
);
container
.
appendChild
(
renderer
.
domElement
);
...
...
@@ -220,16 +149,6 @@
//
renderer
.
shadowMapEnabled
=
true
;
renderer
.
shadowMapType
=
THREE
.
PCFShadowMap
;
//
var
description
=
"
normal + ao
"
+
(
renderer
.
supportsVertexTextures
()
?
"
+ displacement + environment + shadow
"
:
"
+ <strike>displacement</strike>
"
);
document
.
getElementById
(
"
description
"
).
innerHTML
=
description
;
document
.
getElementById
(
"
vt
"
).
style
.
display
=
renderer
.
supportsVertexTextures
()
?
"
none
"
:
"
block
"
;
if
(
statsEnabled
)
{
stats
=
new
Stats
();
...
...
@@ -240,50 +159,73 @@
}
//
//
COMPOSER
window
.
addEventListener
(
'
resize
'
,
onWindowResize
,
false
)
;
renderer
.
autoClear
=
false
;
}
var
renderModel
=
new
THREE
.
RenderPass
(
scene
,
camera
);
function
onWindowResize
()
{
var
effectBleach
=
new
THREE
.
ShaderPass
(
THREE
.
BleachBypassShader
);
var
effectColor
=
new
THREE
.
ShaderPass
(
THREE
.
ColorCorrectionShader
);
effectFXAA
=
new
THREE
.
ShaderPass
(
THREE
.
FXAAShader
);
windowHalfX
=
window
.
innerWidth
/
2
;
windowHalfY
=
window
.
innerHeight
/
2
;
effectFXAA
.
uniforms
[
'
resolution
'
].
value
.
set
(
1
/
window
.
innerWidth
,
1
/
window
.
innerHeight
);
camera
.
left
=
window
.
innerWidth
/
-
2
;
camera
.
right
=
window
.
innerWidth
/
2
;
camera
.
top
=
window
.
innerHeight
/
2
;
camera
.
bottom
=
window
.
innerHeight
/
-
2
;
effectBleach
.
uniforms
[
'
opacity
'
].
value
=
0.4
;
camera
.
updateProjectionMatrix
();
effectColor
.
uniforms
[
'
powRGB
'
].
value
.
set
(
1.4
,
1.45
,
1.45
);
effectColor
.
uniforms
[
'
mulRGB
'
].
value
.
set
(
1.1
,
1.1
,
1.1
);
renderer
.
setSize
(
window
.
innerWidth
,
window
.
innerHeight
);
effectFXAA
.
renderToScreen
=
true
;
composer
=
new
THREE
.
EffectComposer
(
renderer
);
composer
.
addPass
(
renderModel
);
composer
.
addPass
(
effectBleach
);
composer
.
addPass
(
effectColor
);
composer
.
addPass
(
effectFXAA
);
// EVENTS
document
.
addEventListener
(
'
mousemove
'
,
onDocumentMouseMove
,
false
);
window
.
addEventListener
(
'
resize
'
,
onWindowResize
,
false
);
}
function
createScene
(
geometry
,
scale
,
material
1
,
material2
)
{
function
createScene
(
geometry
,
scale
,
material
)
{
geometry
.
computeTangents
();
mesh1
=
new
THREE
.
Mesh
(
geometry
,
material1
);
mesh1
.
position
.
x
=
-
scale
*
12
;
mesh1
.
scale
.
set
(
scale
,
scale
,
scale
);
mesh1
.
castShadow
=
true
;
mesh1
.
receiveShadow
=
true
;
scene
.
add
(
mesh1
);
mesh1
=
new
THREE
.
Mesh
(
geometry
,
material
);
mesh2
=
new
THREE
.
Mesh
(
geometry
,
material2
);
mesh2
.
position
.
x
=
scale
*
12
;
mesh2
.
scale
.
set
(
scale
,
scale
,
scale
);
mesh2
.
castShadow
=
true
;
mesh2
.
receiveShadow
=
true
;
scene
.
add
(
mesh2
);
mesh1
.
position
.
y
=
-
50
;
mesh1
.
scale
.
x
=
mesh1
.
scale
.
y
=
mesh1
.
scale
.
z
=
scale
;
scene
.
add
(
mesh1
);
loader
.
statusDomElement
.
style
.
display
=
"
none
"
;
}
//
function
onWindowResize
(
event
)
{
SCREEN_WIDTH
=
window
.
innerWidth
;
SCREEN_HEIGHT
=
window
.
innerHeight
;
renderer
.
setSize
(
SCREEN_WIDTH
,
SCREEN_HEIGHT
);
camera
.
aspect
=
SCREEN_WIDTH
/
SCREEN_HEIGHT
;
camera
.
updateProjectionMatrix
();
composer
.
reset
();
effectFXAA
.
uniforms
[
'
resolution
'
].
value
.
set
(
1
/
SCREEN_WIDTH
,
1
/
SCREEN_HEIGHT
);
}
function
onDocumentMouseMove
(
event
)
{
mouseX
=
(
event
.
clientX
-
windowHalfX
)
*
10
;
...
...
@@ -313,23 +255,11 @@
}
if
(
mesh2
)
{
mesh2
.
rotation
.
y
=
ry
;
mesh2
.
rotation
.
x
=
rx
;
}
pointLight
.
position
.
x
=
2500
*
Math
.
cos
(
r
);
pointLight
.
position
.
z
=
2500
*
Math
.
sin
(
r
);
r
+=
0.01
;
renderer
.
render
(
scene
,
camera
);
//renderer.render( scene, camera );
composer
.
render
();
}
</script>
</body>
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录