Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
车家大少爷
three.js
提交
cdd956ed
T
three.js
项目概览
车家大少爷
/
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,发现更多精彩内容 >>
未验证
提交
cdd956ed
编写于
1月 19, 2020
作者:
M
Michael Herzog
提交者:
GitHub
1月 19, 2020
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #18425 from WestLangley/dev_outline_pass
OutlinePass: avoid unnecessary instantiation of objects
上级
3346310a
898020be
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
14 addition
and
14 deletion
+14
-14
examples/js/postprocessing/OutlinePass.js
examples/js/postprocessing/OutlinePass.js
+7
-7
examples/jsm/postprocessing/OutlinePass.js
examples/jsm/postprocessing/OutlinePass.js
+7
-7
未找到文件。
examples/js/postprocessing/OutlinePass.js
浏览文件 @
cdd956ed
...
@@ -67,10 +67,10 @@ THREE.OutlinePass = function ( resolution, scene, camera, selectedObjects ) {
...
@@ -67,10 +67,10 @@ THREE.OutlinePass = function ( resolution, scene, camera, selectedObjects ) {
var
MAX_EDGE_GLOW
=
4
;
var
MAX_EDGE_GLOW
=
4
;
this
.
separableBlurMaterial1
=
this
.
getSeperableBlurMaterial
(
MAX_EDGE_THICKNESS
);
this
.
separableBlurMaterial1
=
this
.
getSeperableBlurMaterial
(
MAX_EDGE_THICKNESS
);
this
.
separableBlurMaterial1
.
uniforms
[
"
texSize
"
].
value
=
new
THREE
.
Vector2
(
resx
,
resy
);
this
.
separableBlurMaterial1
.
uniforms
[
"
texSize
"
].
value
.
set
(
resx
,
resy
);
this
.
separableBlurMaterial1
.
uniforms
[
"
kernelRadius
"
].
value
=
1
;
this
.
separableBlurMaterial1
.
uniforms
[
"
kernelRadius
"
].
value
=
1
;
this
.
separableBlurMaterial2
=
this
.
getSeperableBlurMaterial
(
MAX_EDGE_GLOW
);
this
.
separableBlurMaterial2
=
this
.
getSeperableBlurMaterial
(
MAX_EDGE_GLOW
);
this
.
separableBlurMaterial2
.
uniforms
[
"
texSize
"
].
value
=
new
THREE
.
Vector2
(
Math
.
round
(
resx
/
2
),
Math
.
round
(
resy
/
2
)
);
this
.
separableBlurMaterial2
.
uniforms
[
"
texSize
"
].
value
.
set
(
Math
.
round
(
resx
/
2
),
Math
.
round
(
resy
/
2
)
);
this
.
separableBlurMaterial2
.
uniforms
[
"
kernelRadius
"
].
value
=
MAX_EDGE_GLOW
;
this
.
separableBlurMaterial2
.
uniforms
[
"
kernelRadius
"
].
value
=
MAX_EDGE_GLOW
;
// Overlay material
// Overlay material
...
@@ -142,7 +142,7 @@ THREE.OutlinePass.prototype = Object.assign( Object.create( THREE.Pass.prototype
...
@@ -142,7 +142,7 @@ THREE.OutlinePass.prototype = Object.assign( Object.create( THREE.Pass.prototype
this
.
renderTargetMaskDownSampleBuffer
.
setSize
(
resx
,
resy
);
this
.
renderTargetMaskDownSampleBuffer
.
setSize
(
resx
,
resy
);
this
.
renderTargetBlurBuffer1
.
setSize
(
resx
,
resy
);
this
.
renderTargetBlurBuffer1
.
setSize
(
resx
,
resy
);
this
.
renderTargetEdgeBuffer1
.
setSize
(
resx
,
resy
);
this
.
renderTargetEdgeBuffer1
.
setSize
(
resx
,
resy
);
this
.
separableBlurMaterial1
.
uniforms
[
"
texSize
"
].
value
=
new
THREE
.
Vector2
(
resx
,
resy
);
this
.
separableBlurMaterial1
.
uniforms
[
"
texSize
"
].
value
.
set
(
resx
,
resy
);
resx
=
Math
.
round
(
resx
/
2
);
resx
=
Math
.
round
(
resx
/
2
);
resy
=
Math
.
round
(
resy
/
2
);
resy
=
Math
.
round
(
resy
/
2
);
...
@@ -150,7 +150,7 @@ THREE.OutlinePass.prototype = Object.assign( Object.create( THREE.Pass.prototype
...
@@ -150,7 +150,7 @@ THREE.OutlinePass.prototype = Object.assign( Object.create( THREE.Pass.prototype
this
.
renderTargetBlurBuffer2
.
setSize
(
resx
,
resy
);
this
.
renderTargetBlurBuffer2
.
setSize
(
resx
,
resy
);
this
.
renderTargetEdgeBuffer2
.
setSize
(
resx
,
resy
);
this
.
renderTargetEdgeBuffer2
.
setSize
(
resx
,
resy
);
this
.
separableBlurMaterial2
.
uniforms
[
"
texSize
"
].
value
=
new
THREE
.
Vector2
(
resx
,
resy
);
this
.
separableBlurMaterial2
.
uniforms
[
"
texSize
"
].
value
.
set
(
resx
,
resy
);
},
},
...
@@ -285,7 +285,7 @@ THREE.OutlinePass.prototype = Object.assign( Object.create( THREE.Pass.prototype
...
@@ -285,7 +285,7 @@ THREE.OutlinePass.prototype = Object.assign( Object.create( THREE.Pass.prototype
// Make non selected objects invisible, and draw only the selected objects, by comparing the depth buffer of non selected objects
// Make non selected objects invisible, and draw only the selected objects, by comparing the depth buffer of non selected objects
this
.
changeVisibilityOfNonSelectedObjects
(
false
);
this
.
changeVisibilityOfNonSelectedObjects
(
false
);
this
.
renderScene
.
overrideMaterial
=
this
.
prepareMaskMaterial
;
this
.
renderScene
.
overrideMaterial
=
this
.
prepareMaskMaterial
;
this
.
prepareMaskMaterial
.
uniforms
[
"
cameraNearFar
"
].
value
=
new
THREE
.
Vector2
(
this
.
renderCamera
.
near
,
this
.
renderCamera
.
far
);
this
.
prepareMaskMaterial
.
uniforms
[
"
cameraNearFar
"
].
value
.
set
(
this
.
renderCamera
.
near
,
this
.
renderCamera
.
far
);
this
.
prepareMaskMaterial
.
uniforms
[
"
depthTexture
"
].
value
=
this
.
renderTargetDepthBuffer
.
texture
;
this
.
prepareMaskMaterial
.
uniforms
[
"
depthTexture
"
].
value
=
this
.
renderTargetDepthBuffer
.
texture
;
this
.
prepareMaskMaterial
.
uniforms
[
"
textureMatrix
"
].
value
=
this
.
textureMatrix
;
this
.
prepareMaskMaterial
.
uniforms
[
"
textureMatrix
"
].
value
=
this
.
textureMatrix
;
renderer
.
setRenderTarget
(
this
.
renderTargetMaskBuffer
);
renderer
.
setRenderTarget
(
this
.
renderTargetMaskBuffer
);
...
@@ -317,7 +317,7 @@ THREE.OutlinePass.prototype = Object.assign( Object.create( THREE.Pass.prototype
...
@@ -317,7 +317,7 @@ THREE.OutlinePass.prototype = Object.assign( Object.create( THREE.Pass.prototype
// 3. Apply Edge Detection Pass
// 3. Apply Edge Detection Pass
this
.
fsQuad
.
material
=
this
.
edgeDetectionMaterial
;
this
.
fsQuad
.
material
=
this
.
edgeDetectionMaterial
;
this
.
edgeDetectionMaterial
.
uniforms
[
"
maskTexture
"
].
value
=
this
.
renderTargetMaskDownSampleBuffer
.
texture
;
this
.
edgeDetectionMaterial
.
uniforms
[
"
maskTexture
"
].
value
=
this
.
renderTargetMaskDownSampleBuffer
.
texture
;
this
.
edgeDetectionMaterial
.
uniforms
[
"
texSize
"
].
value
=
new
THREE
.
Vector2
(
this
.
renderTargetMaskDownSampleBuffer
.
width
,
this
.
renderTargetMaskDownSampleBuffer
.
height
);
this
.
edgeDetectionMaterial
.
uniforms
[
"
texSize
"
].
value
.
set
(
this
.
renderTargetMaskDownSampleBuffer
.
width
,
this
.
renderTargetMaskDownSampleBuffer
.
height
);
this
.
edgeDetectionMaterial
.
uniforms
[
"
visibleEdgeColor
"
].
value
=
this
.
tempPulseColor1
;
this
.
edgeDetectionMaterial
.
uniforms
[
"
visibleEdgeColor
"
].
value
=
this
.
tempPulseColor1
;
this
.
edgeDetectionMaterial
.
uniforms
[
"
hiddenEdgeColor
"
].
value
=
this
.
tempPulseColor2
;
this
.
edgeDetectionMaterial
.
uniforms
[
"
hiddenEdgeColor
"
].
value
=
this
.
tempPulseColor2
;
renderer
.
setRenderTarget
(
this
.
renderTargetEdgeBuffer1
);
renderer
.
setRenderTarget
(
this
.
renderTargetEdgeBuffer1
);
...
@@ -390,7 +390,7 @@ THREE.OutlinePass.prototype = Object.assign( Object.create( THREE.Pass.prototype
...
@@ -390,7 +390,7 @@ THREE.OutlinePass.prototype = Object.assign( Object.create( THREE.Pass.prototype
uniforms
:
{
uniforms
:
{
"
depthTexture
"
:
{
value
:
null
},
"
depthTexture
"
:
{
value
:
null
},
"
cameraNearFar
"
:
{
value
:
new
THREE
.
Vector2
(
0.5
,
0.5
)
},
"
cameraNearFar
"
:
{
value
:
new
THREE
.
Vector2
(
0.5
,
0.5
)
},
"
textureMatrix
"
:
{
value
:
n
ew
THREE
.
Matrix4
()
}
"
textureMatrix
"
:
{
value
:
n
ull
}
},
},
vertexShader
:
[
vertexShader
:
[
...
...
examples/jsm/postprocessing/OutlinePass.js
浏览文件 @
cdd956ed
...
@@ -87,10 +87,10 @@ var OutlinePass = function ( resolution, scene, camera, selectedObjects ) {
...
@@ -87,10 +87,10 @@ var OutlinePass = function ( resolution, scene, camera, selectedObjects ) {
var
MAX_EDGE_GLOW
=
4
;
var
MAX_EDGE_GLOW
=
4
;
this
.
separableBlurMaterial1
=
this
.
getSeperableBlurMaterial
(
MAX_EDGE_THICKNESS
);
this
.
separableBlurMaterial1
=
this
.
getSeperableBlurMaterial
(
MAX_EDGE_THICKNESS
);
this
.
separableBlurMaterial1
.
uniforms
[
"
texSize
"
].
value
=
new
Vector2
(
resx
,
resy
);
this
.
separableBlurMaterial1
.
uniforms
[
"
texSize
"
].
value
.
set
(
resx
,
resy
);
this
.
separableBlurMaterial1
.
uniforms
[
"
kernelRadius
"
].
value
=
1
;
this
.
separableBlurMaterial1
.
uniforms
[
"
kernelRadius
"
].
value
=
1
;
this
.
separableBlurMaterial2
=
this
.
getSeperableBlurMaterial
(
MAX_EDGE_GLOW
);
this
.
separableBlurMaterial2
=
this
.
getSeperableBlurMaterial
(
MAX_EDGE_GLOW
);
this
.
separableBlurMaterial2
.
uniforms
[
"
texSize
"
].
value
=
new
Vector2
(
Math
.
round
(
resx
/
2
),
Math
.
round
(
resy
/
2
)
);
this
.
separableBlurMaterial2
.
uniforms
[
"
texSize
"
].
value
.
set
(
Math
.
round
(
resx
/
2
),
Math
.
round
(
resy
/
2
)
);
this
.
separableBlurMaterial2
.
uniforms
[
"
kernelRadius
"
].
value
=
MAX_EDGE_GLOW
;
this
.
separableBlurMaterial2
.
uniforms
[
"
kernelRadius
"
].
value
=
MAX_EDGE_GLOW
;
// Overlay material
// Overlay material
...
@@ -162,7 +162,7 @@ OutlinePass.prototype = Object.assign( Object.create( Pass.prototype ), {
...
@@ -162,7 +162,7 @@ OutlinePass.prototype = Object.assign( Object.create( Pass.prototype ), {
this
.
renderTargetMaskDownSampleBuffer
.
setSize
(
resx
,
resy
);
this
.
renderTargetMaskDownSampleBuffer
.
setSize
(
resx
,
resy
);
this
.
renderTargetBlurBuffer1
.
setSize
(
resx
,
resy
);
this
.
renderTargetBlurBuffer1
.
setSize
(
resx
,
resy
);
this
.
renderTargetEdgeBuffer1
.
setSize
(
resx
,
resy
);
this
.
renderTargetEdgeBuffer1
.
setSize
(
resx
,
resy
);
this
.
separableBlurMaterial1
.
uniforms
[
"
texSize
"
].
value
=
new
Vector2
(
resx
,
resy
);
this
.
separableBlurMaterial1
.
uniforms
[
"
texSize
"
].
value
.
set
(
resx
,
resy
);
resx
=
Math
.
round
(
resx
/
2
);
resx
=
Math
.
round
(
resx
/
2
);
resy
=
Math
.
round
(
resy
/
2
);
resy
=
Math
.
round
(
resy
/
2
);
...
@@ -170,7 +170,7 @@ OutlinePass.prototype = Object.assign( Object.create( Pass.prototype ), {
...
@@ -170,7 +170,7 @@ OutlinePass.prototype = Object.assign( Object.create( Pass.prototype ), {
this
.
renderTargetBlurBuffer2
.
setSize
(
resx
,
resy
);
this
.
renderTargetBlurBuffer2
.
setSize
(
resx
,
resy
);
this
.
renderTargetEdgeBuffer2
.
setSize
(
resx
,
resy
);
this
.
renderTargetEdgeBuffer2
.
setSize
(
resx
,
resy
);
this
.
separableBlurMaterial2
.
uniforms
[
"
texSize
"
].
value
=
new
Vector2
(
resx
,
resy
);
this
.
separableBlurMaterial2
.
uniforms
[
"
texSize
"
].
value
.
set
(
resx
,
resy
);
},
},
...
@@ -305,7 +305,7 @@ OutlinePass.prototype = Object.assign( Object.create( Pass.prototype ), {
...
@@ -305,7 +305,7 @@ OutlinePass.prototype = Object.assign( Object.create( Pass.prototype ), {
// Make non selected objects invisible, and draw only the selected objects, by comparing the depth buffer of non selected objects
// Make non selected objects invisible, and draw only the selected objects, by comparing the depth buffer of non selected objects
this
.
changeVisibilityOfNonSelectedObjects
(
false
);
this
.
changeVisibilityOfNonSelectedObjects
(
false
);
this
.
renderScene
.
overrideMaterial
=
this
.
prepareMaskMaterial
;
this
.
renderScene
.
overrideMaterial
=
this
.
prepareMaskMaterial
;
this
.
prepareMaskMaterial
.
uniforms
[
"
cameraNearFar
"
].
value
=
new
Vector2
(
this
.
renderCamera
.
near
,
this
.
renderCamera
.
far
);
this
.
prepareMaskMaterial
.
uniforms
[
"
cameraNearFar
"
].
value
.
set
(
this
.
renderCamera
.
near
,
this
.
renderCamera
.
far
);
this
.
prepareMaskMaterial
.
uniforms
[
"
depthTexture
"
].
value
=
this
.
renderTargetDepthBuffer
.
texture
;
this
.
prepareMaskMaterial
.
uniforms
[
"
depthTexture
"
].
value
=
this
.
renderTargetDepthBuffer
.
texture
;
this
.
prepareMaskMaterial
.
uniforms
[
"
textureMatrix
"
].
value
=
this
.
textureMatrix
;
this
.
prepareMaskMaterial
.
uniforms
[
"
textureMatrix
"
].
value
=
this
.
textureMatrix
;
renderer
.
setRenderTarget
(
this
.
renderTargetMaskBuffer
);
renderer
.
setRenderTarget
(
this
.
renderTargetMaskBuffer
);
...
@@ -337,7 +337,7 @@ OutlinePass.prototype = Object.assign( Object.create( Pass.prototype ), {
...
@@ -337,7 +337,7 @@ OutlinePass.prototype = Object.assign( Object.create( Pass.prototype ), {
// 3. Apply Edge Detection Pass
// 3. Apply Edge Detection Pass
this
.
fsQuad
.
material
=
this
.
edgeDetectionMaterial
;
this
.
fsQuad
.
material
=
this
.
edgeDetectionMaterial
;
this
.
edgeDetectionMaterial
.
uniforms
[
"
maskTexture
"
].
value
=
this
.
renderTargetMaskDownSampleBuffer
.
texture
;
this
.
edgeDetectionMaterial
.
uniforms
[
"
maskTexture
"
].
value
=
this
.
renderTargetMaskDownSampleBuffer
.
texture
;
this
.
edgeDetectionMaterial
.
uniforms
[
"
texSize
"
].
value
=
new
Vector2
(
this
.
renderTargetMaskDownSampleBuffer
.
width
,
this
.
renderTargetMaskDownSampleBuffer
.
height
);
this
.
edgeDetectionMaterial
.
uniforms
[
"
texSize
"
].
value
.
set
(
this
.
renderTargetMaskDownSampleBuffer
.
width
,
this
.
renderTargetMaskDownSampleBuffer
.
height
);
this
.
edgeDetectionMaterial
.
uniforms
[
"
visibleEdgeColor
"
].
value
=
this
.
tempPulseColor1
;
this
.
edgeDetectionMaterial
.
uniforms
[
"
visibleEdgeColor
"
].
value
=
this
.
tempPulseColor1
;
this
.
edgeDetectionMaterial
.
uniforms
[
"
hiddenEdgeColor
"
].
value
=
this
.
tempPulseColor2
;
this
.
edgeDetectionMaterial
.
uniforms
[
"
hiddenEdgeColor
"
].
value
=
this
.
tempPulseColor2
;
renderer
.
setRenderTarget
(
this
.
renderTargetEdgeBuffer1
);
renderer
.
setRenderTarget
(
this
.
renderTargetEdgeBuffer1
);
...
@@ -410,7 +410,7 @@ OutlinePass.prototype = Object.assign( Object.create( Pass.prototype ), {
...
@@ -410,7 +410,7 @@ OutlinePass.prototype = Object.assign( Object.create( Pass.prototype ), {
uniforms
:
{
uniforms
:
{
"
depthTexture
"
:
{
value
:
null
},
"
depthTexture
"
:
{
value
:
null
},
"
cameraNearFar
"
:
{
value
:
new
Vector2
(
0.5
,
0.5
)
},
"
cameraNearFar
"
:
{
value
:
new
Vector2
(
0.5
,
0.5
)
},
"
textureMatrix
"
:
{
value
:
n
ew
Matrix4
()
}
"
textureMatrix
"
:
{
value
:
n
ull
}
},
},
vertexShader
:
[
vertexShader
:
[
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录