Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Ablesons
three.js
提交
447130ed
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,发现更多精彩内容 >>
提交
447130ed
编写于
3月 05, 2018
作者:
G
Garrett Johnson
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add a PLY Exporter
上级
ad227614
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
233 addition
and
0 deletion
+233
-0
examples/js/exporters/PLYExporter.js
examples/js/exporters/PLYExporter.js
+233
-0
未找到文件。
examples/js/exporters/PLYExporter.js
0 → 100644
浏览文件 @
447130ed
/**
* @author Garrett Johnson / http://gkjohnson.github.io/
* https://github.com/gkjohnson/ply-exporter-js
*
* Usage:
* var exporter = new THREE.PLYExporter();
*
* // second argument is an array of attributes to
* // exclude from the format ('color', 'uv', 'normal')
* var data = exporter.parse(mesh, [ 'color' ]);
*
* Format Definition:
* http://paulbourke.net/dataformats/ply/
*/
THREE
.
PLYExporter
=
function
()
{};
THREE
.
PLYExporter
.
prototype
=
{
constructor
:
THREE
.
PLYExporter
,
parse
:
function
(
object
,
excludeProperties
)
{
if
(
Array
.
isArray
(
excludeProperties
)
!==
true
)
{
excludeProperties
=
[];
}
var
includeNormals
=
excludeProperties
.
indexOf
(
'
normal
'
)
===
-
1
;
var
includeColors
=
excludeProperties
.
indexOf
(
'
color
'
)
===
-
1
;
var
includeUVs
=
excludeProperties
.
indexOf
(
'
uv
'
)
===
-
1
;
// count the number of vertices
var
vertexCount
=
0
;
var
faceCount
=
0
;
var
vertexList
=
''
;
var
faceList
=
''
;
var
vertex
=
new
THREE
.
Vector3
();
var
normalMatrixWorld
=
new
THREE
.
Matrix3
();
object
.
traverse
(
function
(
child
)
{
if
(
child
instanceof
THREE
.
Mesh
)
{
var
mesh
=
child
;
var
geometry
=
mesh
.
geometry
;
if
(
geometry
instanceof
THREE
.
Geometry
)
{
geometry
=
new
THREE
.
BufferGeometry
().
setFromObject
(
mesh
);
}
if
(
geometry
instanceof
THREE
.
BufferGeometry
)
{
var
vertices
=
geometry
.
getAttribute
(
'
position
'
);
var
normals
=
geometry
.
getAttribute
(
'
normal
'
);
var
uvs
=
geometry
.
getAttribute
(
'
uv
'
);
var
colors
=
geometry
.
getAttribute
(
'
color
'
);
var
indices
=
geometry
.
getIndex
();
normalMatrixWorld
.
getNormalMatrix
(
mesh
.
matrixWorld
);
if
(
vertices
===
undefined
)
{
return
;
}
// form each line
for
(
i
=
0
,
l
=
vertices
.
count
;
i
<
l
;
i
++
)
{
vertex
.
x
=
vertices
.
getX
(
i
);
vertex
.
y
=
vertices
.
getY
(
i
);
vertex
.
z
=
vertices
.
getZ
(
i
);
vertex
.
applyMatrix4
(
mesh
.
matrixWorld
);
// Position information
var
line
=
vertex
.
x
+
'
'
+
vertex
.
y
+
'
'
+
vertex
.
z
;
// Normal information
if
(
includeNormals
===
true
)
{
if
(
normals
!==
undefined
)
{
vertex
.
x
=
normals
.
getX
(
i
);
vertex
.
y
=
normals
.
getY
(
i
);
vertex
.
z
=
normals
.
getZ
(
i
);
vertex
.
applyMatrix3
(
normalMatrixWorld
);
line
+=
'
'
+
vertex
.
x
+
'
'
+
vertex
.
y
+
'
'
+
vertex
.
z
;
}
else
{
line
+=
'
0 0 0
'
;
}
}
// UV information
if
(
includeUVs
===
true
)
{
if
(
uvs
!==
undefined
)
{
line
+=
'
'
+
uvs
.
getX
(
i
)
+
'
'
+
uvs
.
getY
(
i
);
}
else
if
(
includeUVs
!==
false
)
{
line
+=
'
0 0
'
;
}
}
// Color information
if
(
includeColors
===
true
)
{
if
(
colors
!==
undefined
)
{
line
+=
'
'
+
Math
.
floor
(
colors
.
getX
(
i
)
)
+
'
'
+
Math
.
floor
(
colors
.
getY
(
i
)
)
+
'
'
+
Math
.
floor
(
colors
.
getZ
(
i
)
);
}
else
{
line
+=
'
255 255 255
'
;
}
}
vertexList
+=
line
+
'
\n
'
;
}
// Create the face list
if
(
indices
!==
null
)
{
for
(
i
=
0
,
l
=
indices
.
count
;
i
<
l
;
i
+=
3
)
{
faceList
+=
`3
${
indices
.
getX
(
i
+
0
)
+
vertexCount
}
`
;
faceList
+=
`
${
indices
.
getX
(
i
+
1
)
+
vertexCount
}
`
;
faceList
+=
`
${
indices
.
getX
(
i
+
2
)
+
vertexCount
}
\n`
;
}
}
else
{
for
(
var
i
=
0
,
l
=
vertices
.
count
;
i
<
l
;
i
+=
3
)
{
faceList
+=
`3
${
vertexCount
+
i
}
${
vertexCount
+
i
+
1
}
${
vertexCount
+
i
+
2
}
\n`
;
}
}
vertexCount
+=
vertices
.
count
;
faceCount
+=
indices
?
indices
.
count
/
3
:
vertices
.
count
/
3
;
}
}
}
);
var
output
=
'
ply
\n
'
+
'
format ascii 1.0
\n
'
+
`element vertex
${
vertexCount
}
\n`
+
// position
'
property float x
\n
'
+
'
property float y
\n
'
+
'
property float z
\n
'
;
if
(
includeNormals
===
true
)
{
// normal
output
+=
'
property float nx
\n
'
+
'
property float ny
\n
'
+
'
property float nz
\n
'
;
}
if
(
includeUVs
===
true
)
{
// uvs
output
+=
'
property float s
\n
'
+
'
property float t
\n
'
;
}
if
(
includeColors
===
true
)
{
// colors
output
+=
'
property uchar red
\n
'
+
'
property uchar green
\n
'
+
'
property uchar blue
\n
'
;
}
// faces
output
+=
`element face
${
faceCount
}
\n`
+
'
property list uchar int vertex_index
\n
'
+
'
end_header
\n
'
+
`
${
vertexList
}
\n`
+
`
${
faceList
}
\n`
;
return
output
;
}
};
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录