Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Ablesons
three.js
提交
52a7137f
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,发现更多精彩内容 >>
提交
52a7137f
编写于
9月 25, 2015
作者:
T
tschw
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
ShadowMap: Refactored repetitive code.
Includes more robust handling of custom materials (see #7153).
上级
30a5fb2d
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
56 addition
and
103 deletion
+56
-103
src/renderers/webgl/WebGLShadowMap.js
src/renderers/webgl/WebGLShadowMap.js
+56
-103
未找到文件。
src/renderers/webgl/WebGLShadowMap.js
浏览文件 @
52a7137f
...
...
@@ -16,10 +16,15 @@ THREE.WebGLShadowMap = function ( _renderer, _lights, _objects ) {
_lookTarget
=
new
THREE
.
Vector3
(),
_lightPositionWorld
=
new
THREE
.
Vector3
(),
_renderList
=
[]
;
_renderList
=
[]
,
var
_depthMaterial
,
_depthMaterialMorph
,
_depthMaterialSkin
,
_depthMaterialMorphSkin
,
_distanceMaterial
,
_distanceMaterialMorph
,
_distanceMaterialSkin
,
_distanceMaterialMorphSkin
;
_MorphingFlag
=
1
,
_SkinningFlag
=
2
,
_NumberOfMaterialVariants
=
_MorphingFlag
|
_SkinningFlag
,
_depthMaterials
=
new
Array
(
_NumberOfMaterialVariants
),
_distanceMaterials
=
new
Array
(
_NumberOfMaterialVariants
);
var
cubeDirections
=
[
new
THREE
.
Vector3
(
1
,
0
,
0
),
new
THREE
.
Vector3
(
-
1
,
0
,
0
),
new
THREE
.
Vector3
(
0
,
0
,
1
),
new
THREE
.
Vector3
(
0
,
0
,
-
1
),
new
THREE
.
Vector3
(
0
,
1
,
0
),
new
THREE
.
Vector3
(
0
,
-
1
,
0
)
];
...
...
@@ -37,75 +42,41 @@ THREE.WebGLShadowMap = function ( _renderer, _lights, _objects ) {
var
depthShader
=
THREE
.
ShaderLib
[
"
depthRGBA
"
];
var
depthUniforms
=
THREE
.
UniformsUtils
.
clone
(
depthShader
.
uniforms
);
_depthMaterial
=
new
THREE
.
ShaderMaterial
(
{
uniforms
:
depthUniforms
,
vertexShader
:
depthShader
.
vertexShader
,
fragmentShader
:
depthShader
.
fragmentShader
}
);
_depthMaterialMorph
=
new
THREE
.
ShaderMaterial
(
{
uniforms
:
depthUniforms
,
vertexShader
:
depthShader
.
vertexShader
,
fragmentShader
:
depthShader
.
fragmentShader
,
morphTargets
:
true
}
);
_depthMaterialSkin
=
new
THREE
.
ShaderMaterial
(
{
uniforms
:
depthUniforms
,
vertexShader
:
depthShader
.
vertexShader
,
fragmentShader
:
depthShader
.
fragmentShader
,
skinning
:
true
}
);
_depthMaterialMorphSkin
=
new
THREE
.
ShaderMaterial
(
{
uniforms
:
depthUniforms
,
vertexShader
:
depthShader
.
vertexShader
,
fragmentShader
:
depthShader
.
fragmentShader
,
morphTargets
:
true
,
skinning
:
true
}
);
_depthMaterial
.
_shadowPass
=
true
;
_depthMaterialMorph
.
_shadowPass
=
true
;
_depthMaterialSkin
.
_shadowPass
=
true
;
_depthMaterialMorphSkin
.
_shadowPass
=
true
;
var
distanceShader
=
THREE
.
ShaderLib
[
"
distanceRGBA
"
];
var
distanceUniforms
=
THREE
.
UniformsUtils
.
clone
(
distanceShader
.
uniforms
);
_distanceMaterial
=
new
THREE
.
ShaderMaterial
(
{
uniforms
:
distanceUniforms
,
v
ertexShader
:
distanceShader
.
vertexShader
,
fragmentShader
:
distanceShader
.
fragmentShader
}
);
_distanceMaterialMorph
=
new
THREE
.
ShaderMaterial
(
{
uniforms
:
distance
Uniforms
,
vertexShader
:
distance
Shader
.
vertexShader
,
fragmentShader
:
distance
Shader
.
fragmentShader
,
morphTargets
:
true
}
);
_distanceMaterialSkin
=
new
THREE
.
ShaderMaterial
(
{
uniforms
:
distanceUniforms
,
vertexShader
:
distanceShader
.
vertexShader
,
fragmentShader
:
distanceShader
.
fragmentShader
,
skinning
:
true
}
);
_distanceMaterialMorphSkin
=
new
THREE
.
ShaderMaterial
(
{
uniforms
:
distanceUniforms
,
vertexShader
:
distanceShader
.
vertex
Shader
,
fragmentShader
:
distanceShader
.
fragmentShader
,
morphTargets
:
true
,
skinning
:
true
}
);
_distanceMaterial
.
_shadowPass
=
true
;
_distanceMaterialMorph
.
_shadowPass
=
true
;
_distanceMaterialSkin
.
_shadowPass
=
true
;
_distanceMaterialMorphSkin
.
_shadowPass
=
true
;
for
(
var
i
=
0
;
i
!==
_NumberOfMaterialVariants
;
++
i
)
{
v
ar
useMorphing
=
(
i
&
_MorphingFlag
)
!==
0
;
var
useSkinning
=
(
i
&
_SkinningFlag
)
!==
0
;
var
depthMaterial
=
new
THREE
.
ShaderMaterial
(
{
uniforms
:
depth
Uniforms
,
vertexShader
:
depth
Shader
.
vertexShader
,
fragmentShader
:
depth
Shader
.
fragmentShader
,
morphTargets
:
useMorphing
,
skinning
:
useSkinning
}
);
depthMaterial
.
_shadowPass
=
true
;
_depthMaterials
[
i
]
=
depthMaterial
;
var
distanceMaterial
=
new
THREE
.
ShaderMaterial
(
{
uniforms
:
distanceUniforms
,
vertexShader
:
distanceShader
.
vertexShader
,
fragmentShader
:
distanceShader
.
fragment
Shader
,
morphTargets
:
useMorphing
,
skinning
:
useSkinning
}
);
distanceMaterial
.
_shadowPass
=
true
;
_distanceMaterials
[
i
]
=
distanceMaterial
;
}
//
...
...
@@ -373,48 +344,34 @@ THREE.WebGLShadowMap = function ( _renderer, _lights, _objects ) {
var
geometry
=
object
.
geometry
;
var
useMorphing
=
geometry
.
morphTargets
!==
undefined
&&
geometry
.
morphTargets
.
length
>
0
&&
material
.
morphTargets
;
var
useSkinning
=
object
instanceof
THREE
.
SkinnedMesh
&&
material
.
skinning
;
var
newMaterial
;
var
newMaterial
=
null
;
var
depthMaterial
=
_depthMaterial
;
var
depthMaterialMorph
=
_depthMaterialMorph
;
var
depthMaterialSkin
=
_depthMaterialSkin
;
var
depthMaterialMorphSkin
=
_depthMaterialMorphSkin
;
var
materialVariants
=
_depthMaterials
;
var
customMaterial
=
object
.
customDepthMaterial
;
if
(
isPointLight
)
{
depthMaterial
=
_distanceMaterial
;
depthMaterialMorph
=
_distanceMaterialMorph
;
depthMaterialSkin
=
_distanceMaterialSkin
;
depthMaterialMorphSkin
=
_distanceMaterialMorphSkin
;
materialVariants
=
_distanceMaterials
;
customMaterial
=
object
.
customDistanceMaterial
;
}
if
(
object
.
customDepthMaterial
||
object
.
customDistance
Material
)
{
if
(
!
custom
Material
)
{
if
(
isPointLight
)
{
var
useMorphing
=
geometry
.
morphTargets
!==
undefined
&&
geometry
.
morphTargets
.
length
>
0
&&
material
.
morphTargets
;
newMaterial
=
object
.
customDistanceMaterial
;
}
else
{
newMaterial
=
object
.
customDepthMaterial
;
}
var
useSkinning
=
object
instanceof
THREE
.
SkinnedMesh
&&
material
.
skinning
;
}
else
if
(
useSkinning
)
{
var
variantIndex
=
0
;
if
(
useMorphing
)
variantIndex
|=
_MorphingFlag
;
if
(
useSkinning
)
variantIndex
|=
_SkinningFlag
;
newMaterial
=
useMorphing
?
depthMaterialMorphSkin
:
depthMaterialSkin
;
}
else
if
(
useMorphing
)
{
newMaterial
=
depthMaterialMorph
;
newMaterial
=
materialVariants
[
variantIndex
];
}
else
{
newMaterial
=
depth
Material
;
newMaterial
=
custom
Material
;
}
...
...
@@ -422,13 +379,9 @@ THREE.WebGLShadowMap = function ( _renderer, _lights, _objects ) {
newMaterial
.
wireframe
=
material
.
wireframe
;
newMaterial
.
wireframeLinewidth
=
material
.
wireframeLinewidth
;
if
(
isPointLight
)
{
if
(
newMaterial
.
uniforms
.
lightPos
)
{
newMaterial
.
uniforms
.
lightPos
.
value
.
copy
(
lightPositionWorld
);
if
(
isPointLight
&&
newMaterial
.
uniforms
.
lightPos
!==
undefined
)
{
}
newMaterial
.
uniforms
.
lightPos
.
value
.
copy
(
lightPositionWorld
);
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录