Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Ablesons
three.js
提交
9e602ec6
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,发现更多精彩内容 >>
未验证
提交
9e602ec6
编写于
10月 07, 2019
作者:
M
Mr.doob
提交者:
GitHub
10月 07, 2019
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #17680 from mrdoob/shadowmap
WebGLShadowMap: Refactored MaterialVariants code and clean up
上级
d0644ed7
7600a380
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
71 addition
and
54 deletion
+71
-54
src/renderers/webgl/WebGLShadowMap.js
src/renderers/webgl/WebGLShadowMap.js
+71
-54
未找到文件。
src/renderers/webgl/WebGLShadowMap.js
浏览文件 @
9e602ec6
...
...
@@ -27,13 +27,8 @@ function WebGLShadowMap( _renderer, _objects, maxTextureSize ) {
_viewport
=
new
Vector4
(),
_MorphingFlag
=
1
,
_SkinningFlag
=
2
,
_NumberOfMaterialVariants
=
(
_MorphingFlag
|
_SkinningFlag
)
+
1
,
_depthMaterials
=
new
Array
(
_NumberOfMaterialVariants
),
_distanceMaterials
=
new
Array
(
_NumberOfMaterialVariants
),
_depthMaterials
=
[],
_distanceMaterials
=
[],
_materialCache
=
{};
...
...
@@ -72,35 +67,6 @@ function WebGLShadowMap( _renderer, _objects, maxTextureSize ) {
var
fullScreenMesh
=
new
Mesh
(
fullScreenTri
,
shadowMaterialVertical
);
// init
for
(
var
i
=
0
;
i
!==
_NumberOfMaterialVariants
;
++
i
)
{
var
useMorphing
=
(
i
&
_MorphingFlag
)
!==
0
;
var
useSkinning
=
(
i
&
_SkinningFlag
)
!==
0
;
var
depthMaterial
=
new
MeshDepthMaterial
(
{
depthPacking
:
RGBADepthPacking
,
morphTargets
:
useMorphing
,
skinning
:
useSkinning
}
);
_depthMaterials
[
i
]
=
depthMaterial
;
var
distanceMaterial
=
new
MeshDistanceMaterial
(
{
morphTargets
:
useMorphing
,
skinning
:
useSkinning
}
);
_distanceMaterials
[
i
]
=
distanceMaterial
;
}
var
scope
=
this
;
this
.
enabled
=
false
;
...
...
@@ -263,33 +229,81 @@ function WebGLShadowMap( _renderer, _objects, maxTextureSize ) {
}
function
getDepthMaterialVariant
(
useMorphing
,
useSkinning
)
{
var
index
=
useMorphing
<<
0
|
useSkinning
<<
1
;
var
material
=
_depthMaterials
[
index
];
if
(
material
===
undefined
)
{
material
=
new
MeshDepthMaterial
(
{
depthPacking
:
RGBADepthPacking
,
morphTargets
:
useMorphing
,
skinning
:
useSkinning
}
);
_depthMaterials
[
index
]
=
material
;
}
return
material
;
}
function
getDistanceMaterialVariant
(
useMorphing
,
useSkinning
)
{
var
index
=
useMorphing
<<
0
|
useSkinning
<<
1
;
var
material
=
_distanceMaterials
[
index
];
if
(
material
===
undefined
)
{
material
=
new
MeshDistanceMaterial
(
{
morphTargets
:
useMorphing
,
skinning
:
useSkinning
}
);
_distanceMaterials
[
index
]
=
material
;
}
return
material
;
}
function
getDepthMaterial
(
object
,
material
,
light
,
shadowCameraNear
,
shadowCameraFar
,
type
)
{
var
geometry
=
object
.
geometry
;
var
result
=
null
;
var
materialVariants
=
_depthMaterials
;
var
getMaterialVariant
=
getDepthMaterialVariant
;
var
customMaterial
=
object
.
customDepthMaterial
;
if
(
light
.
isPointLight
)
{
if
(
light
.
isPointLight
===
true
)
{
materialVariants
=
_distanceMaterials
;
getMaterialVariant
=
getDistanceMaterialVariant
;
customMaterial
=
object
.
customDistanceMaterial
;
}
if
(
!
customMaterial
)
{
if
(
customMaterial
===
undefined
)
{
var
useMorphing
=
false
;
if
(
material
.
morphTargets
)
{
if
(
material
.
morphTargets
===
true
)
{
if
(
geometry
&&
geometry
.
isBufferGeometry
)
{
if
(
geometry
.
isBufferGeometry
===
true
)
{
useMorphing
=
geometry
.
morphAttributes
&&
geometry
.
morphAttributes
.
position
&&
geometry
.
morphAttributes
.
position
.
length
>
0
;
}
else
if
(
geometry
&&
geometry
.
isGeometry
)
{
}
else
if
(
geometry
.
isGeometry
===
true
)
{
useMorphing
=
geometry
.
morphTargets
&&
geometry
.
morphTargets
.
length
>
0
;
...
...
@@ -297,20 +311,23 @@ function WebGLShadowMap( _renderer, _objects, maxTextureSize ) {
}
if
(
object
.
isSkinnedMesh
&&
material
.
skinning
===
false
)
{
var
useSkinning
=
false
;
console
.
warn
(
'
THREE.WebGLShadowMap: THREE.SkinnedMesh with material.skinning set to false:
'
,
object
);
if
(
object
.
isSkinnedMesh
===
true
)
{
}
if
(
material
.
skinning
===
true
)
{
useSkinning
=
true
;
var
useSkinning
=
object
.
isSkinnedMesh
&&
material
.
skinning
;
}
else
{
var
variantIndex
=
0
;
console
.
warn
(
'
THREE.WebGLShadowMap: THREE.SkinnedMesh with material.skinning set to false:
'
,
object
)
;
if
(
useMorphing
)
variantIndex
|=
_MorphingFlag
;
if
(
useSkinning
)
variantIndex
|=
_SkinningFlag
;
}
}
result
=
materialVariants
[
variantIndex
]
;
result
=
getMaterialVariant
(
useMorphing
,
useSkinning
)
;
}
else
{
...
...
@@ -354,11 +371,11 @@ function WebGLShadowMap( _renderer, _objects, maxTextureSize ) {
if
(
type
===
VSMShadowMap
)
{
result
.
side
=
(
material
.
shadowSide
!=
null
)
?
material
.
shadowSide
:
material
.
side
;
result
.
side
=
(
material
.
shadowSide
!=
=
null
)
?
material
.
shadowSide
:
material
.
side
;
}
else
{
result
.
side
=
(
material
.
shadowSide
!=
null
)
?
material
.
shadowSide
:
shadowSide
[
material
.
side
];
result
.
side
=
(
material
.
shadowSide
!=
=
null
)
?
material
.
shadowSide
:
shadowSide
[
material
.
side
];
}
...
...
@@ -369,7 +386,7 @@ function WebGLShadowMap( _renderer, _objects, maxTextureSize ) {
result
.
wireframeLinewidth
=
material
.
wireframeLinewidth
;
result
.
linewidth
=
material
.
linewidth
;
if
(
light
.
isPointLight
&&
result
.
isMeshDistanceMaterial
)
{
if
(
light
.
isPointLight
===
true
&&
result
.
isMeshDistanceMaterial
===
true
)
{
result
.
referencePosition
.
setFromMatrixPosition
(
light
.
matrixWorld
);
result
.
nearDistance
=
shadowCameraNear
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录