Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Ablesons
three.js
提交
f0b64a9b
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,发现更多精彩内容 >>
未验证
提交
f0b64a9b
编写于
11月 01, 2019
作者:
M
Michael Herzog
提交者:
GitHub
11月 01, 2019
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #17847 from Mugen87/dev11
3MFLoader: Add support for vertex colors.
上级
8cc6e042
bcce0337
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
232 addition
and
6 deletion
+232
-6
examples/js/loaders/3MFLoader.js
examples/js/loaders/3MFLoader.js
+115
-3
examples/jsm/loaders/3MFLoader.js
examples/jsm/loaders/3MFLoader.js
+117
-3
examples/models/3mf/vertexcolor.3mf
examples/models/3mf/vertexcolor.3mf
+0
-0
未找到文件。
examples/js/loaders/3MFLoader.js
浏览文件 @
f0b64a9b
...
...
@@ -14,6 +14,7 @@
*
* - Texture 2D
* - Texture 2D Groups
* - Color Groups (Vertex Colors)
*/
THREE
.
ThreeMFLoader
=
function
(
manager
)
{
...
...
@@ -311,6 +312,36 @@ THREE.ThreeMFLoader.prototype = Object.assign( Object.create( THREE.Loader.proto
}
function
parseColorGroupNodes
(
colorGroupNode
)
{
var
colorGroupData
=
{
id
:
colorGroupNode
.
getAttribute
(
'
id
'
),
// required
displaypropertiesid
:
colorGroupNode
.
getAttribute
(
'
displaypropertiesid
'
)
};
var
colorNodes
=
colorGroupNode
.
querySelectorAll
(
'
color
'
);
var
colors
=
[];
var
colorObject
=
new
THREE
.
Color
();
for
(
var
i
=
0
;
i
<
colorNodes
.
length
;
i
++
)
{
var
colorNode
=
colorNodes
[
i
];
var
color
=
colorNode
.
getAttribute
(
'
color
'
);
colorObject
.
setStyle
(
color
.
substring
(
0
,
7
)
);
colorObject
.
convertSRGBToLinear
();
// color is in sRGB
colors
.
push
(
colorObject
.
r
,
colorObject
.
g
,
colorObject
.
b
);
}
colorGroupData
[
'
colors
'
]
=
new
Float32Array
(
colors
);
return
colorGroupData
;
}
function
parseBasematerialNode
(
basematerialNode
)
{
var
basematerialData
=
{};
...
...
@@ -567,6 +598,19 @@ THREE.ThreeMFLoader.prototype = Object.assign( Object.create( THREE.Loader.proto
//
resourcesData
[
'
colorgroup
'
]
=
{};
var
colorGroupNodes
=
resourcesNode
.
querySelectorAll
(
'
colorgroup
'
);
for
(
var
i
=
0
;
i
<
colorGroupNodes
.
length
;
i
++
)
{
var
colorGroupNode
=
colorGroupNodes
[
i
];
var
colorGroupData
=
parseColorGroupNodes
(
colorGroupNode
);
resourcesData
[
'
colorgroup
'
][
colorGroupData
[
'
id
'
]
]
=
colorGroupData
;
}
//
resourcesData
[
'
texture2dgroup
'
]
=
{};
var
textures2DGroupNodes
=
resourcesNode
.
querySelectorAll
(
'
texture2dgroup
'
);
...
...
@@ -877,6 +921,65 @@ THREE.ThreeMFLoader.prototype = Object.assign( Object.create( THREE.Loader.proto
}
function
buildVertexColorMesh
(
colorgroup
,
triangleProperties
,
modelData
,
meshData
)
{
// geometry
var
geometry
=
new
THREE
.
BufferGeometry
();
var
positionData
=
[];
var
colorData
=
[];
var
vertices
=
meshData
.
vertices
;
var
colors
=
colorgroup
.
colors
;
for
(
var
i
=
0
,
l
=
triangleProperties
.
length
;
i
<
l
;
i
++
)
{
var
triangleProperty
=
triangleProperties
[
i
];
positionData
.
push
(
vertices
[
(
triangleProperty
.
v1
*
3
)
+
0
]
);
positionData
.
push
(
vertices
[
(
triangleProperty
.
v1
*
3
)
+
1
]
);
positionData
.
push
(
vertices
[
(
triangleProperty
.
v1
*
3
)
+
2
]
);
positionData
.
push
(
vertices
[
(
triangleProperty
.
v2
*
3
)
+
0
]
);
positionData
.
push
(
vertices
[
(
triangleProperty
.
v2
*
3
)
+
1
]
);
positionData
.
push
(
vertices
[
(
triangleProperty
.
v2
*
3
)
+
2
]
);
positionData
.
push
(
vertices
[
(
triangleProperty
.
v3
*
3
)
+
0
]
);
positionData
.
push
(
vertices
[
(
triangleProperty
.
v3
*
3
)
+
1
]
);
positionData
.
push
(
vertices
[
(
triangleProperty
.
v3
*
3
)
+
2
]
);
//
colorData
.
push
(
colors
[
(
triangleProperty
.
p1
*
3
)
+
0
]
);
colorData
.
push
(
colors
[
(
triangleProperty
.
p1
*
3
)
+
1
]
);
colorData
.
push
(
colors
[
(
triangleProperty
.
p1
*
3
)
+
3
]
);
colorData
.
push
(
colors
[
(
triangleProperty
.
p2
*
3
)
+
0
]
);
colorData
.
push
(
colors
[
(
triangleProperty
.
p2
*
3
)
+
1
]
);
colorData
.
push
(
colors
[
(
triangleProperty
.
p2
*
3
)
+
2
]
);
colorData
.
push
(
colors
[
(
triangleProperty
.
p3
*
3
)
+
0
]
);
colorData
.
push
(
colors
[
(
triangleProperty
.
p3
*
3
)
+
1
]
);
colorData
.
push
(
colors
[
(
triangleProperty
.
p3
*
3
)
+
2
]
);
}
geometry
.
setAttribute
(
'
position
'
,
new
THREE
.
Float32BufferAttribute
(
positionData
,
3
)
);
geometry
.
setAttribute
(
'
color
'
,
new
THREE
.
Float32BufferAttribute
(
colorData
,
3
)
);
// material
var
material
=
new
THREE
.
MeshPhongMaterial
(
{
vertexColors
:
THREE
.
VertexColors
}
);
// mesh
var
mesh
=
new
THREE
.
Mesh
(
geometry
,
material
);
return
mesh
;
}
function
buildDefaultMesh
(
meshData
)
{
var
geometry
=
new
THREE
.
BufferGeometry
();
...
...
@@ -896,7 +999,7 @@ THREE.ThreeMFLoader.prototype = Object.assign( Object.create( THREE.Loader.proto
var
keys
=
Object
.
keys
(
resourceMap
);
var
meshes
=
[];
for
(
var
i
=
0
;
i
<
keys
.
length
;
i
++
)
{
for
(
var
i
=
0
,
il
=
keys
.
length
;
i
<
il
;
i
++
)
{
var
resourceId
=
keys
[
i
];
var
triangleProperties
=
resourceMap
[
resourceId
];
...
...
@@ -908,9 +1011,9 @@ THREE.ThreeMFLoader.prototype = Object.assign( Object.create( THREE.Loader.proto
var
basematerials
=
modelData
.
resources
.
basematerials
[
resourceId
];
var
newMeshes
=
buildBasematerialsMeshes
(
basematerials
,
triangleProperties
,
modelData
,
meshData
,
textureData
,
objectData
);
for
(
var
i
=
0
,
l
=
newMeshes
.
length
;
i
<
l
;
i
++
)
{
for
(
var
j
=
0
,
jl
=
newMeshes
.
length
;
j
<
jl
;
j
++
)
{
meshes
.
push
(
newMeshes
[
i
]
);
meshes
.
push
(
newMeshes
[
j
]
);
}
break
;
...
...
@@ -920,6 +1023,11 @@ THREE.ThreeMFLoader.prototype = Object.assign( Object.create( THREE.Loader.proto
meshes
.
push
(
buildTexturedMesh
(
texture2dgroup
,
triangleProperties
,
modelData
,
meshData
,
textureData
)
);
break
;
case
'
vertexColors
'
:
var
colorgroup
=
modelData
.
resources
.
colorgroup
[
resourceId
];
meshes
.
push
(
buildVertexColorMesh
(
colorgroup
,
triangleProperties
,
modelData
,
meshData
,
textureData
)
);
break
;
case
'
default
'
:
meshes
.
push
(
buildDefaultMesh
(
meshData
)
);
break
;
...
...
@@ -945,6 +1053,10 @@ THREE.ThreeMFLoader.prototype = Object.assign( Object.create( THREE.Loader.proto
return
'
material
'
;
}
else
if
(
modelData
.
resources
.
colorgroup
[
pid
]
!==
undefined
)
{
return
'
vertexColors
'
;
}
else
if
(
pid
===
'
default
'
)
{
return
'
default
'
;
...
...
examples/jsm/loaders/3MFLoader.js
浏览文件 @
f0b64a9b
...
...
@@ -14,12 +14,14 @@
*
* - Texture 2D
* - Texture 2D Groups
* - Color Groups (Vertex Colors)
*/
import
{
BufferAttribute
,
BufferGeometry
,
ClampToEdgeWrapping
,
Color
,
FileLoader
,
Float32BufferAttribute
,
Group
,
...
...
@@ -34,6 +36,7 @@ import {
NearestFilter
,
RepeatWrapping
,
TextureLoader
,
VertexColors
,
sRGBEncoding
}
from
"
../../../build/three.module.js
"
;
...
...
@@ -332,6 +335,36 @@ ThreeMFLoader.prototype = Object.assign( Object.create( Loader.prototype ), {
}
function
parseColorGroupNodes
(
colorGroupNode
)
{
var
colorGroupData
=
{
id
:
colorGroupNode
.
getAttribute
(
'
id
'
),
// required
displaypropertiesid
:
colorGroupNode
.
getAttribute
(
'
displaypropertiesid
'
)
};
var
colorNodes
=
colorGroupNode
.
querySelectorAll
(
'
color
'
);
var
colors
=
[];
var
colorObject
=
new
Color
();
for
(
var
i
=
0
;
i
<
colorNodes
.
length
;
i
++
)
{
var
colorNode
=
colorNodes
[
i
];
var
color
=
colorNode
.
getAttribute
(
'
color
'
);
colorObject
.
setStyle
(
color
.
substring
(
0
,
7
)
);
colorObject
.
convertSRGBToLinear
();
// color is in sRGB
colors
.
push
(
colorObject
.
r
,
colorObject
.
g
,
colorObject
.
b
);
}
colorGroupData
[
'
colors
'
]
=
new
Float32Array
(
colors
);
return
colorGroupData
;
}
function
parseBasematerialNode
(
basematerialNode
)
{
var
basematerialData
=
{};
...
...
@@ -588,6 +621,19 @@ ThreeMFLoader.prototype = Object.assign( Object.create( Loader.prototype ), {
//
resourcesData
[
'
colorgroup
'
]
=
{};
var
colorGroupNodes
=
resourcesNode
.
querySelectorAll
(
'
colorgroup
'
);
for
(
var
i
=
0
;
i
<
colorGroupNodes
.
length
;
i
++
)
{
var
colorGroupNode
=
colorGroupNodes
[
i
];
var
colorGroupData
=
parseColorGroupNodes
(
colorGroupNode
);
resourcesData
[
'
colorgroup
'
][
colorGroupData
[
'
id
'
]
]
=
colorGroupData
;
}
//
resourcesData
[
'
texture2dgroup
'
]
=
{};
var
textures2DGroupNodes
=
resourcesNode
.
querySelectorAll
(
'
texture2dgroup
'
);
...
...
@@ -898,6 +944,65 @@ ThreeMFLoader.prototype = Object.assign( Object.create( Loader.prototype ), {
}
function
buildVertexColorMesh
(
colorgroup
,
triangleProperties
,
modelData
,
meshData
)
{
// geometry
var
geometry
=
new
BufferGeometry
();
var
positionData
=
[];
var
colorData
=
[];
var
vertices
=
meshData
.
vertices
;
var
colors
=
colorgroup
.
colors
;
for
(
var
i
=
0
,
l
=
triangleProperties
.
length
;
i
<
l
;
i
++
)
{
var
triangleProperty
=
triangleProperties
[
i
];
positionData
.
push
(
vertices
[
(
triangleProperty
.
v1
*
3
)
+
0
]
);
positionData
.
push
(
vertices
[
(
triangleProperty
.
v1
*
3
)
+
1
]
);
positionData
.
push
(
vertices
[
(
triangleProperty
.
v1
*
3
)
+
2
]
);
positionData
.
push
(
vertices
[
(
triangleProperty
.
v2
*
3
)
+
0
]
);
positionData
.
push
(
vertices
[
(
triangleProperty
.
v2
*
3
)
+
1
]
);
positionData
.
push
(
vertices
[
(
triangleProperty
.
v2
*
3
)
+
2
]
);
positionData
.
push
(
vertices
[
(
triangleProperty
.
v3
*
3
)
+
0
]
);
positionData
.
push
(
vertices
[
(
triangleProperty
.
v3
*
3
)
+
1
]
);
positionData
.
push
(
vertices
[
(
triangleProperty
.
v3
*
3
)
+
2
]
);
//
colorData
.
push
(
colors
[
(
triangleProperty
.
p1
*
3
)
+
0
]
);
colorData
.
push
(
colors
[
(
triangleProperty
.
p1
*
3
)
+
1
]
);
colorData
.
push
(
colors
[
(
triangleProperty
.
p1
*
3
)
+
3
]
);
colorData
.
push
(
colors
[
(
triangleProperty
.
p2
*
3
)
+
0
]
);
colorData
.
push
(
colors
[
(
triangleProperty
.
p2
*
3
)
+
1
]
);
colorData
.
push
(
colors
[
(
triangleProperty
.
p2
*
3
)
+
2
]
);
colorData
.
push
(
colors
[
(
triangleProperty
.
p3
*
3
)
+
0
]
);
colorData
.
push
(
colors
[
(
triangleProperty
.
p3
*
3
)
+
1
]
);
colorData
.
push
(
colors
[
(
triangleProperty
.
p3
*
3
)
+
2
]
);
}
geometry
.
setAttribute
(
'
position
'
,
new
Float32BufferAttribute
(
positionData
,
3
)
);
geometry
.
setAttribute
(
'
color
'
,
new
Float32BufferAttribute
(
colorData
,
3
)
);
// material
var
material
=
new
MeshPhongMaterial
(
{
vertexColors
:
VertexColors
}
);
// mesh
var
mesh
=
new
Mesh
(
geometry
,
material
);
return
mesh
;
}
function
buildDefaultMesh
(
meshData
)
{
var
geometry
=
new
BufferGeometry
();
...
...
@@ -917,7 +1022,7 @@ ThreeMFLoader.prototype = Object.assign( Object.create( Loader.prototype ), {
var
keys
=
Object
.
keys
(
resourceMap
);
var
meshes
=
[];
for
(
var
i
=
0
;
i
<
keys
.
length
;
i
++
)
{
for
(
var
i
=
0
,
il
=
keys
.
length
;
i
<
il
;
i
++
)
{
var
resourceId
=
keys
[
i
];
var
triangleProperties
=
resourceMap
[
resourceId
];
...
...
@@ -929,9 +1034,9 @@ ThreeMFLoader.prototype = Object.assign( Object.create( Loader.prototype ), {
var
basematerials
=
modelData
.
resources
.
basematerials
[
resourceId
];
var
newMeshes
=
buildBasematerialsMeshes
(
basematerials
,
triangleProperties
,
modelData
,
meshData
,
textureData
,
objectData
);
for
(
var
i
=
0
,
l
=
newMeshes
.
length
;
i
<
l
;
i
++
)
{
for
(
var
j
=
0
,
jl
=
newMeshes
.
length
;
j
<
jl
;
j
++
)
{
meshes
.
push
(
newMeshes
[
i
]
);
meshes
.
push
(
newMeshes
[
j
]
);
}
break
;
...
...
@@ -941,6 +1046,11 @@ ThreeMFLoader.prototype = Object.assign( Object.create( Loader.prototype ), {
meshes
.
push
(
buildTexturedMesh
(
texture2dgroup
,
triangleProperties
,
modelData
,
meshData
,
textureData
)
);
break
;
case
'
vertexColors
'
:
var
colorgroup
=
modelData
.
resources
.
colorgroup
[
resourceId
];
meshes
.
push
(
buildVertexColorMesh
(
colorgroup
,
triangleProperties
,
modelData
,
meshData
,
textureData
)
);
break
;
case
'
default
'
:
meshes
.
push
(
buildDefaultMesh
(
meshData
)
);
break
;
...
...
@@ -966,6 +1076,10 @@ ThreeMFLoader.prototype = Object.assign( Object.create( Loader.prototype ), {
return
'
material
'
;
}
else
if
(
modelData
.
resources
.
colorgroup
[
pid
]
!==
undefined
)
{
return
'
vertexColors
'
;
}
else
if
(
pid
===
'
default
'
)
{
return
'
default
'
;
...
...
examples/models/3mf/vertexcolor.3mf
0 → 100644
浏览文件 @
f0b64a9b
文件已添加
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录