Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
车家大少爷
three.js
提交
54660b0a
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,体验更适合开发者的 AI 搜索 >>
提交
54660b0a
编写于
10月 04, 2017
作者:
M
Mr.doob
提交者:
GitHub
10月 04, 2017
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #12335 from kaisalmen/Issue12324
#12324 OBJLoader2 Parser: Fix slashes in string pattern
上级
72bc4084
c519bc5a
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
86 addition
and
61 deletion
+86
-61
examples/js/loaders/OBJLoader2.js
examples/js/loaders/OBJLoader2.js
+86
-61
未找到文件。
examples/js/loaders/OBJLoader2.js
浏览文件 @
54660b0a
...
...
@@ -15,7 +15,7 @@ if ( THREE.OBJLoader2 === undefined ) { THREE.OBJLoader2 = {} }
*/
THREE
.
OBJLoader2
=
(
function
()
{
var
OBJLOADER2_VERSION
=
'
2.0.
0
'
;
var
OBJLOADER2_VERSION
=
'
2.0.
1
'
;
var
Commons
=
THREE
.
LoaderSupport
.
Commons
;
var
Validator
=
THREE
.
LoaderSupport
.
Validator
;
var
ConsoleLogger
=
THREE
.
LoaderSupport
.
ConsoleLogger
;
...
...
@@ -398,32 +398,34 @@ THREE.OBJLoader2 = (function () {
this
.
totalBytes
=
length
;
var
buffer
=
new
Array
(
128
);
var
bufferPointer
=
0
;
var
slashesCount
=
0
;
var
slashSpacePattern
=
new
Array
(
16
);
var
slashSpacePatternPointer
=
0
;
var
reachedFaces
=
false
;
var
code
;
var
word
=
''
;
var
i
=
0
;
for
(
;
i
<
length
;
i
++
)
{
for
(
;
i
<
length
;
i
++
)
{
code
=
arrayBufferView
[
i
];
switch
(
code
)
{
case
Consts
.
CODE_SPACE
:
if
(
word
.
length
>
0
)
buffer
[
bufferPointer
++
]
=
word
;
if
(
word
.
length
>
0
)
buffer
[
bufferPointer
++
]
=
word
;
slashSpacePattern
[
slashSpacePatternPointer
++
]
=
0
;
word
=
''
;
break
;
case
Consts
.
CODE_SLASH
:
slashesCount
++
;
if
(
word
.
length
>
0
)
buffer
[
bufferPointer
++
]
=
word
;
if
(
word
.
length
>
0
)
buffer
[
bufferPointer
++
]
=
word
;
slashSpacePattern
[
slashSpacePatternPointer
++
]
=
1
;
word
=
''
;
break
;
case
Consts
.
CODE_LF
:
if
(
word
.
length
>
0
)
buffer
[
bufferPointer
++
]
=
word
;
if
(
word
.
length
>
0
)
buffer
[
bufferPointer
++
]
=
word
;
word
=
''
;
reachedFaces
=
this
.
processLine
(
buffer
,
bufferPointer
,
slash
esCount
,
reachedFaces
,
i
);
reachedFaces
=
this
.
processLine
(
buffer
,
bufferPointer
,
slash
SpacePattern
,
slashSpacePatternPointer
,
reachedFaces
,
i
);
bufferPointer
=
0
;
slash
esCount
=
0
;
slash
SpacePatternPointer
=
0
;
break
;
case
Consts
.
CODE_CR
:
...
...
@@ -452,32 +454,34 @@ THREE.OBJLoader2 = (function () {
this
.
totalBytes
=
length
;
var
buffer
=
new
Array
(
128
);
var
bufferPointer
=
0
;
var
slashesCount
=
0
;
var
slashSpacePattern
=
new
Array
(
16
);
var
slashSpacePatternPointer
=
0
;
var
reachedFaces
=
false
;
var
char
;
var
word
=
''
;
var
i
=
0
;
for
(
;
i
<
length
;
i
++
)
{
for
(
;
i
<
length
;
i
++
)
{
char
=
text
[
i
];
switch
(
char
)
{
case
Consts
.
STRING_SPACE
:
if
(
word
.
length
>
0
)
buffer
[
bufferPointer
++
]
=
word
;
if
(
word
.
length
>
0
)
buffer
[
bufferPointer
++
]
=
word
;
slashSpacePattern
[
slashSpacePatternPointer
++
]
=
0
;
word
=
''
;
break
;
case
Consts
.
STRING_SLASH
:
slashesCount
++
;
if
(
word
.
length
>
0
)
buffer
[
bufferPointer
++
]
=
word
;
if
(
word
.
length
>
0
)
buffer
[
bufferPointer
++
]
=
word
;
slashSpacePattern
[
slashSpacePatternPointer
++
]
=
1
;
word
=
''
;
break
;
case
Consts
.
STRING_LF
:
if
(
word
.
length
>
0
)
buffer
[
bufferPointer
++
]
=
word
;
if
(
word
.
length
>
0
)
buffer
[
bufferPointer
++
]
=
word
;
word
=
''
;
reachedFaces
=
this
.
processLine
(
buffer
,
bufferPointer
,
slash
esCount
,
reachedFaces
,
i
);
reachedFaces
=
this
.
processLine
(
buffer
,
bufferPointer
,
slash
SpacePattern
,
slashSpacePatternPointer
,
reachedFaces
,
i
);
bufferPointer
=
0
;
slash
esCount
=
0
;
slash
SpacePatternPointer
=
0
;
break
;
case
Consts
.
STRING_CR
:
...
...
@@ -491,14 +495,45 @@ THREE.OBJLoader2 = (function () {
this
.
logger
.
logTimeEnd
(
'
OBJLoader2.Parser.parseText
'
);
};
Parser
.
prototype
.
processLine
=
function
(
buffer
,
bufferPointer
,
slash
esCount
,
reachedFaces
,
currentByte
)
{
Parser
.
prototype
.
processLine
=
function
(
buffer
,
bufferPointer
,
slash
SpacePattern
,
slashSpacePatternPointer
,
reachedFaces
,
currentByte
)
{
if
(
bufferPointer
<
1
)
return
reachedFaces
;
var
bufferLength
=
bufferPointer
-
1
;
var
concatBuffer
;
var
countSlashes
=
function
(
slashSpacePattern
,
slashSpacePatternPointer
)
{
var
slashesCount
=
0
;
for
(
var
i
=
0
;
i
<
slashSpacePatternPointer
;
i
++
)
{
slashesCount
+=
slashSpacePattern
[
i
];
}
return
slashesCount
;
};
var
concatStringBuffer
=
function
(
buffer
,
bufferPointer
,
slashSpacePattern
)
{
var
concatBuffer
=
''
;
if
(
bufferPointer
===
2
)
{
concatBuffer
=
buffer
[
1
];
}
else
{
var
bufferLength
=
bufferPointer
-
1
;
for
(
var
i
=
1
;
i
<
bufferLength
;
i
++
)
{
concatBuffer
+=
buffer
[
i
]
+
(
slashSpacePattern
[
i
]
===
0
?
'
'
:
'
/
'
);
}
concatBuffer
+=
buffer
[
bufferLength
];
}
return
concatBuffer
;
};
var
flushStringBuffer
=
function
(
buffer
,
bufferPointer
)
{
for
(
var
i
=
0
;
i
<
bufferPointer
;
i
++
)
{
buffer
[
i
]
=
''
;
}
};
switch
(
buffer
[
0
]
)
{
case
Consts
.
LINE_V
:
// object complete instance required if reached faces already (= reached next block of v)
if
(
reachedFaces
)
{
...
...
@@ -511,7 +546,7 @@ THREE.OBJLoader2 = (function () {
reachedFaces
=
false
;
}
if
(
buffer
Length
===
3
)
{
if
(
buffer
Pointer
===
4
)
{
this
.
rawMesh
.
pushVertex
(
buffer
)
...
...
@@ -532,57 +567,45 @@ THREE.OBJLoader2 = (function () {
case
Consts
.
LINE_F
:
reachedFaces
=
true
;
this
.
rawMesh
.
processFaces
(
buffer
,
bufferPointer
,
slashesCount
);
this
.
rawMesh
.
processFaces
(
buffer
,
bufferPointer
,
countSlashes
(
slashSpacePattern
,
slashSpacePatternPointer
)
);
break
;
case
Consts
.
LINE_L
:
if
(
bufferLength
===
slashesCount
*
2
)
{
this
.
rawMesh
.
buildLineVvt
(
buffer
);
}
else
{
this
.
rawMesh
.
buildLineV
(
buffer
);
}
this
.
rawMesh
.
processLines
(
buffer
,
bufferPointer
,
countSlashes
(
slashSpacePattern
,
slashSpacePatternPointer
)
);
break
;
case
Consts
.
LINE_S
:
this
.
rawMesh
.
pushSmoothingGroup
(
buffer
[
1
]
);
this
.
flushStringBuffer
(
buffer
,
bufferPointer
);
flushStringBuffer
(
buffer
,
bufferPointer
);
break
;
case
Consts
.
LINE_G
:
concatBuffer
=
bufferLength
>
1
?
buffer
.
slice
(
1
,
bufferPointer
).
join
(
'
'
)
:
buffer
[
1
];
this
.
processCompletedGroup
(
concatBuffer
,
currentByte
);
this
.
flushStringBuffer
(
buffer
,
bufferPointer
);
this
.
processCompletedGroup
(
concatStringBuffer
(
buffer
,
bufferPointer
,
slashSpacePattern
),
currentByte
);
flushStringBuffer
(
buffer
,
bufferPointer
);
break
;
case
Consts
.
LINE_O
:
concatBuffer
=
bufferLength
>
1
?
buffer
.
slice
(
1
,
bufferPointer
).
join
(
'
'
)
:
buffer
[
1
];
if
(
this
.
rawMesh
.
vertices
.
length
>
0
)
{
this
.
processCompletedObject
(
concat
Buffer
,
null
,
currentByte
);
this
.
processCompletedObject
(
concat
StringBuffer
(
buffer
,
bufferPointer
,
slashSpacePattern
)
,
null
,
currentByte
);
reachedFaces
=
false
;
}
else
{
this
.
rawMesh
.
pushObject
(
concat
Buffer
);
this
.
rawMesh
.
pushObject
(
concat
StringBuffer
(
buffer
,
bufferPointer
,
slashSpacePattern
)
);
}
this
.
flushStringBuffer
(
buffer
,
bufferPointer
);
flushStringBuffer
(
buffer
,
bufferPointer
);
break
;
case
Consts
.
LINE_MTLLIB
:
concatBuffer
=
bufferLength
>
1
?
buffer
.
slice
(
1
,
bufferPointer
).
join
(
'
'
)
:
buffer
[
1
];
this
.
rawMesh
.
pushMtllib
(
concatBuffer
);
this
.
flushStringBuffer
(
buffer
,
bufferPointer
);
this
.
rawMesh
.
pushMtllib
(
concatStringBuffer
(
buffer
,
bufferPointer
,
slashSpacePattern
)
);
flushStringBuffer
(
buffer
,
bufferPointer
);
break
;
case
Consts
.
LINE_USEMTL
:
concatBuffer
=
bufferLength
>
1
?
buffer
.
slice
(
1
,
bufferPointer
).
join
(
'
'
)
:
buffer
[
1
];
this
.
rawMesh
.
pushUsemtl
(
concatBuffer
);
this
.
flushStringBuffer
(
buffer
,
bufferPointer
);
this
.
rawMesh
.
pushUsemtl
(
concatStringBuffer
(
buffer
,
bufferPointer
,
slashSpacePattern
)
);
flushStringBuffer
(
buffer
,
bufferPointer
);
break
;
default
:
...
...
@@ -591,12 +614,6 @@ THREE.OBJLoader2 = (function () {
return
reachedFaces
;
};
Parser
.
prototype
.
flushStringBuffer
=
function
(
buffer
,
bufferLength
)
{
for
(
var
i
=
0
;
i
<
bufferLength
;
i
++
)
{
buffer
[
i
]
=
''
;
}
};
Parser
.
prototype
.
createRawMeshReport
=
function
(
rawMesh
,
inputObjectCount
)
{
var
report
=
rawMesh
.
createReport
(
inputObjectCount
);
return
'
Input Object number:
'
+
inputObjectCount
+
...
...
@@ -1103,19 +1120,27 @@ THREE.OBJLoader2 = (function () {
* 0: "f vertex/uv vertex/uv ..."
* 1: "f vertex vertex ..."
*/
RawMesh
.
prototype
.
buildLineVvt
=
function
(
lineArray
)
{
for
(
var
i
=
1
,
length
=
lineArray
.
length
;
i
<
length
;
i
++
)
{
RawMesh
.
prototype
.
processLines
=
function
(
buffer
,
bufferPointer
,
slashCount
)
{
var
i
=
1
;
var
length
;
var
bufferLength
=
bufferPointer
-
1
;
this
.
vertices
.
push
(
parseInt
(
lineArray
[
i
]
)
);
this
.
uvs
.
push
(
parseInt
(
lineArray
[
i
]
)
);
if
(
bufferLength
===
slashCount
*
2
)
{
}
};
for
(
length
=
bufferLength
-
2
;
i
<
length
;
i
+=
2
)
{
RawMesh
.
prototype
.
buildLineV
=
function
(
lineArray
)
{
for
(
var
i
=
1
,
length
=
lineArray
.
length
;
i
<
length
;
i
++
)
{
this
.
vertices
.
push
(
parseInt
(
buffer
[
i
]
)
);
this
.
uvs
.
push
(
parseInt
(
buffer
[
i
+
1
]
)
);
this
.
vertices
.
push
(
parseInt
(
lineArray
[
i
]
)
);
}
}
else
{
for
(
length
=
bufferLength
-
1
;
i
<
length
;
i
++
)
{
this
.
vertices
.
push
(
parseInt
(
buffer
[
i
]
)
);
}
}
};
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录