Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Ablesons
three.js
提交
e0d0b2f1
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,发现更多精彩内容 >>
未验证
提交
e0d0b2f1
编写于
11月 04, 2019
作者:
M
Michael Herzog
提交者:
GitHub
11月 04, 2019
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #17853 from Mugen87/dev11
3MFLoader: Add support for metallic display properties.
上级
2de07650
4ca830db
变更
2
显示空白变更内容
内联
并排
Showing
2 changed file
with
132 addition
and
4 deletion
+132
-4
examples/js/loaders/3MFLoader.js
examples/js/loaders/3MFLoader.js
+66
-2
examples/jsm/loaders/3MFLoader.js
examples/jsm/loaders/3MFLoader.js
+66
-2
未找到文件。
examples/js/loaders/3MFLoader.js
浏览文件 @
e0d0b2f1
...
...
@@ -15,6 +15,7 @@
* - Texture 2D
* - Texture 2D Groups
* - Color Groups (Vertex Colors)
* - Metallic Display Properties (PBR)
*/
THREE
.
ThreeMFLoader
=
function
(
manager
)
{
...
...
@@ -261,6 +262,7 @@ THREE.ThreeMFLoader.prototype = Object.assign( Object.create( THREE.Loader.proto
var
basematerialNode
=
basematerialNodes
[
i
];
var
basematerialData
=
parseBasematerialNode
(
basematerialNode
);
basematerialData
.
index
=
i
;
// the order and count of the material nodes form an implicit 0-based index
basematerialsData
.
basematerials
.
push
(
basematerialData
);
}
...
...
@@ -342,12 +344,41 @@ THREE.ThreeMFLoader.prototype = Object.assign( Object.create( THREE.Loader.proto
}
function
parseMetallicDisplaypropertiesNode
(
metallicDisplaypropetiesNode
)
{
var
metallicDisplaypropertiesData
=
{
id
:
metallicDisplaypropetiesNode
.
getAttribute
(
'
id
'
)
// required
};
var
metallicNodes
=
metallicDisplaypropetiesNode
.
querySelectorAll
(
'
pbmetallic
'
);
var
metallicData
=
[];
for
(
var
i
=
0
;
i
<
metallicNodes
.
length
;
i
++
)
{
var
metallicNode
=
metallicNodes
[
i
];
metallicData
.
push
(
{
name
:
metallicNode
.
getAttribute
(
'
name
'
),
// required
metallicness
:
parseFloat
(
metallicNode
.
getAttribute
(
'
metallicness
'
)
),
// required
roughness
:
parseFloat
(
metallicNode
.
getAttribute
(
'
roughness
'
)
)
// required
}
);
}
metallicDisplaypropertiesData
.
data
=
metallicData
;
return
metallicDisplaypropertiesData
;
}
function
parseBasematerialNode
(
basematerialNode
)
{
var
basematerialData
=
{};
basematerialData
[
'
name
'
]
=
basematerialNode
.
getAttribute
(
'
name
'
);
// required
basematerialData
[
'
displaycolor
'
]
=
basematerialNode
.
getAttribute
(
'
displaycolor
'
);
// required
basematerialData
[
'
displaypropertiesid
'
]
=
basematerialNode
.
getAttribute
(
'
displaypropertiesid
'
);
return
basematerialData
;
...
...
@@ -611,6 +642,19 @@ THREE.ThreeMFLoader.prototype = Object.assign( Object.create( THREE.Loader.proto
//
resourcesData
[
'
pbmetallicdisplayproperties
'
]
=
{};
var
pbmetallicdisplaypropertiesNodes
=
resourcesNode
.
querySelectorAll
(
'
pbmetallicdisplayproperties
'
);
for
(
var
i
=
0
;
i
<
pbmetallicdisplaypropertiesNodes
.
length
;
i
++
)
{
var
pbmetallicdisplaypropertiesNode
=
pbmetallicdisplaypropertiesNodes
[
i
];
var
pbmetallicdisplaypropertiesData
=
parseMetallicDisplaypropertiesNode
(
pbmetallicdisplaypropertiesNode
);
resourcesData
[
'
pbmetallicdisplayproperties
'
][
pbmetallicdisplaypropertiesData
[
'
id
'
]
]
=
pbmetallicdisplaypropertiesData
;
}
//
resourcesData
[
'
texture2dgroup
'
]
=
{};
var
textures2DGroupNodes
=
resourcesNode
.
querySelectorAll
(
'
texture2dgroup
'
);
...
...
@@ -1159,9 +1203,29 @@ THREE.ThreeMFLoader.prototype = Object.assign( Object.create( THREE.Loader.proto
}
function
buildBasematerial
(
materialData
)
{
function
buildBasematerial
(
materialData
,
objects
,
modelData
)
{
var
material
;
var
displaypropertiesid
=
materialData
.
displaypropertiesid
;
var
pbmetallicdisplayproperties
=
modelData
.
resources
.
pbmetallicdisplayproperties
;
if
(
displaypropertiesid
!==
null
&&
pbmetallicdisplayproperties
[
displaypropertiesid
]
!==
undefined
)
{
var
material
=
new
THREE
.
MeshPhongMaterial
(
{
flatShading
:
true
}
);
// metallic display property, use StandardMaterial
var
pbmetallicdisplayproperty
=
pbmetallicdisplayproperties
[
displaypropertiesid
];
var
metallicData
=
pbmetallicdisplayproperty
.
data
[
materialData
.
index
];
material
=
new
THREE
.
MeshStandardMaterial
(
{
flatShading
:
true
,
roughness
:
metallicData
.
roughness
,
metalness
:
metallicData
.
metallicness
}
);
}
else
{
// otherwise use PhongMaterial
material
=
new
THREE
.
MeshPhongMaterial
(
{
flatShading
:
true
}
);
}
material
.
name
=
materialData
.
name
;
...
...
examples/jsm/loaders/3MFLoader.js
浏览文件 @
e0d0b2f1
...
...
@@ -32,6 +32,7 @@ import {
Matrix4
,
Mesh
,
MeshPhongMaterial
,
MeshStandardMaterial
,
MirroredRepeatWrapping
,
NearestFilter
,
RepeatWrapping
,
...
...
@@ -284,6 +285,7 @@ ThreeMFLoader.prototype = Object.assign( Object.create( Loader.prototype ), {
var
basematerialNode
=
basematerialNodes
[
i
];
var
basematerialData
=
parseBasematerialNode
(
basematerialNode
);
basematerialData
.
index
=
i
;
// the order and count of the material nodes form an implicit 0-based index
basematerialsData
.
basematerials
.
push
(
basematerialData
);
}
...
...
@@ -365,12 +367,41 @@ ThreeMFLoader.prototype = Object.assign( Object.create( Loader.prototype ), {
}
function
parseMetallicDisplaypropertiesNode
(
metallicDisplaypropetiesNode
)
{
var
metallicDisplaypropertiesData
=
{
id
:
metallicDisplaypropetiesNode
.
getAttribute
(
'
id
'
)
// required
};
var
metallicNodes
=
metallicDisplaypropetiesNode
.
querySelectorAll
(
'
pbmetallic
'
);
var
metallicData
=
[];
for
(
var
i
=
0
;
i
<
metallicNodes
.
length
;
i
++
)
{
var
metallicNode
=
metallicNodes
[
i
];
metallicData
.
push
(
{
name
:
metallicNode
.
getAttribute
(
'
name
'
),
// required
metallicness
:
parseFloat
(
metallicNode
.
getAttribute
(
'
metallicness
'
)
),
// required
roughness
:
parseFloat
(
metallicNode
.
getAttribute
(
'
roughness
'
)
)
// required
}
);
}
metallicDisplaypropertiesData
.
data
=
metallicData
;
return
metallicDisplaypropertiesData
;
}
function
parseBasematerialNode
(
basematerialNode
)
{
var
basematerialData
=
{};
basematerialData
[
'
name
'
]
=
basematerialNode
.
getAttribute
(
'
name
'
);
// required
basematerialData
[
'
displaycolor
'
]
=
basematerialNode
.
getAttribute
(
'
displaycolor
'
);
// required
basematerialData
[
'
displaypropertiesid
'
]
=
basematerialNode
.
getAttribute
(
'
displaypropertiesid
'
);
return
basematerialData
;
...
...
@@ -634,6 +665,19 @@ ThreeMFLoader.prototype = Object.assign( Object.create( Loader.prototype ), {
//
resourcesData
[
'
pbmetallicdisplayproperties
'
]
=
{};
var
pbmetallicdisplaypropertiesNodes
=
resourcesNode
.
querySelectorAll
(
'
pbmetallicdisplayproperties
'
);
for
(
var
i
=
0
;
i
<
pbmetallicdisplaypropertiesNodes
.
length
;
i
++
)
{
var
pbmetallicdisplaypropertiesNode
=
pbmetallicdisplaypropertiesNodes
[
i
];
var
pbmetallicdisplaypropertiesData
=
parseMetallicDisplaypropertiesNode
(
pbmetallicdisplaypropertiesNode
);
resourcesData
[
'
pbmetallicdisplayproperties
'
][
pbmetallicdisplaypropertiesData
[
'
id
'
]
]
=
pbmetallicdisplaypropertiesData
;
}
//
resourcesData
[
'
texture2dgroup
'
]
=
{};
var
textures2DGroupNodes
=
resourcesNode
.
querySelectorAll
(
'
texture2dgroup
'
);
...
...
@@ -1182,9 +1226,29 @@ ThreeMFLoader.prototype = Object.assign( Object.create( Loader.prototype ), {
}
function
buildBasematerial
(
materialData
)
{
function
buildBasematerial
(
materialData
,
objects
,
modelData
)
{
var
material
;
var
displaypropertiesid
=
materialData
.
displaypropertiesid
;
var
pbmetallicdisplayproperties
=
modelData
.
resources
.
pbmetallicdisplayproperties
;
if
(
displaypropertiesid
!==
null
&&
pbmetallicdisplayproperties
[
displaypropertiesid
]
!==
undefined
)
{
var
material
=
new
MeshPhongMaterial
(
{
flatShading
:
true
}
);
// metallic display property, use StandardMaterial
var
pbmetallicdisplayproperty
=
pbmetallicdisplayproperties
[
displaypropertiesid
];
var
metallicData
=
pbmetallicdisplayproperty
.
data
[
materialData
.
index
];
material
=
new
MeshStandardMaterial
(
{
flatShading
:
true
,
roughness
:
metallicData
.
roughness
,
metalness
:
metallicData
.
metallicness
}
);
}
else
{
// otherwise use PhongMaterial
material
=
new
MeshPhongMaterial
(
{
flatShading
:
true
}
);
}
material
.
name
=
materialData
.
name
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录