Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Ablesons
three.js
提交
9963eed1
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,发现更多精彩内容 >>
提交
9963eed1
编写于
6月 05, 2016
作者:
M
Mr.doob
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Added new WIP GLTFLoader (Basic support of glTF-Embedded)
上级
9c872b1c
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
294 addition
and
5 deletion
+294
-5
editor/index.html
editor/index.html
+6
-5
editor/js/Loader.js
editor/js/Loader.js
+19
-0
examples/js/loaders/GLTFLoader.js
examples/js/loaders/GLTFLoader.js
+269
-0
未找到文件。
editor/index.html
浏览文件 @
9963eed1
...
...
@@ -21,6 +21,7 @@
<script
src=
"../examples/js/loaders/BabylonLoader.js"
></script>
<script
src=
"../examples/js/loaders/ColladaLoader2.js"
></script>
<script
src=
"../examples/js/loaders/FBXLoader.js"
></script>
<script
src=
"../examples/js/loaders/GLTFLoader.js"
></script>
<script
src=
"../examples/js/loaders/KMZLoader.js"
></script>
<script
src=
"../examples/js/loaders/MD2Loader.js"
></script>
<script
src=
"../examples/js/loaders/OBJLoader.js"
></script>
...
...
@@ -285,9 +286,9 @@
switch
(
event
.
keyCode
)
{
case
8
:
// backspace
event
.
preventDefault
();
// prevent browser back
case
46
:
// delete
var
object
=
editor
.
selected
;
...
...
@@ -314,19 +315,19 @@
break
;
case
87
:
// Register W for translation transform mode
editor
.
signals
.
transformModeChanged
.
dispatch
(
'
translate
'
);
break
;
case
69
:
// Register E for rotation transform mode
editor
.
signals
.
transformModeChanged
.
dispatch
(
'
rotate
'
);
break
;
case
82
:
// Register R for scaling transform mode
editor
.
signals
.
transformModeChanged
.
dispatch
(
'
scale
'
);
break
;
...
...
editor/js/Loader.js
浏览文件 @
9963eed1
...
...
@@ -155,6 +155,25 @@ var Loader = function ( editor ) {
break
;
case
'
gltf
'
:
reader
.
addEventListener
(
'
load
'
,
function
(
event
)
{
var
contents
=
event
.
target
.
result
;
var
json
=
JSON
.
parse
(
contents
);
var
loader
=
new
THREE
.
GLTFLoader
();
var
collada
=
loader
.
parse
(
json
);
collada
.
scene
.
name
=
filename
;
editor
.
execute
(
new
AddObjectCommand
(
collada
.
scene
)
);
},
false
);
reader
.
readAsText
(
file
);
break
;
case
'
js
'
:
case
'
json
'
:
...
...
examples/js/loaders/GLTFLoader.js
0 → 100644
浏览文件 @
9963eed1
/**
* @author mrdoob / http://mrdoob.com/
*/
THREE
.
GLTFLoader
=
function
(
manager
)
{
this
.
manager
=
(
manager
!==
undefined
)
?
manager
:
THREE
.
DefaultLoadingManager
;
};
THREE
.
GLTFLoader
.
prototype
=
{
constructor
:
THREE
.
GLTFLoader
,
load
:
function
(
url
,
onLoad
,
onProgress
,
onError
)
{
var
scope
=
this
;
var
loader
=
new
THREE
.
XHRLoader
(
scope
.
manager
);
loader
.
load
(
url
,
function
(
text
)
{
onLoad
(
scope
.
parse
(
JSON
.
parse
(
text
)
)
);
},
onProgress
,
onError
);
},
setCrossOrigin
:
function
(
value
)
{
this
.
crossOrigin
=
value
;
},
parse
:
function
(
json
)
{
function
stringToArrayBuffer
(
string
)
{
var
bytes
=
atob
(
string
);
var
buffer
=
new
ArrayBuffer
(
bytes
.
length
);
var
bufferView
=
new
Uint8Array
(
buffer
);
for
(
var
i
=
0
;
i
<
bytes
.
length
;
i
++
)
{
bufferView
[
i
]
=
bytes
.
charCodeAt
(
i
);
}
return
buffer
;
}
console
.
time
(
'
GLTFLoader
'
);
// buffers
var
buffers
=
json
.
buffers
;
for
(
var
bufferId
in
buffers
)
{
var
buffer
=
buffers
[
bufferId
];
if
(
buffer
.
type
===
'
arraybuffer
'
)
{
var
header
=
'
data:application/octet-stream;base64,
'
;
if
(
buffer
.
uri
.
indexOf
(
header
)
===
0
)
{
buffer
.
_arraybuffer
=
stringToArrayBuffer
(
buffer
.
uri
.
substr
(
header
.
length
)
);
}
}
}
// buffer views
var
bufferViews
=
json
.
bufferViews
;
for
(
var
bufferViewId
in
bufferViews
)
{
var
bufferView
=
bufferViews
[
bufferViewId
];
var
arraybuffer
=
buffers
[
bufferView
.
buffer
].
_arraybuffer
;
bufferView
.
_arraybuffer
=
arraybuffer
.
slice
(
bufferView
.
byteOffset
,
bufferView
.
byteOffset
+
bufferView
.
byteLength
);
}
// accessors
var
COMPONENT_TYPES
=
{
5120
:
Int8Array
,
5121
:
Uint8Array
,
5122
:
Int16Array
,
5123
:
Uint16Array
,
5126
:
Float32Array
,
};
var
TYPE_SIZES
=
{
'
SCALAR
'
:
1
,
'
VEC2
'
:
2
,
'
VEC3
'
:
3
,
'
VEC4
'
:
4
,
'
MAT2
'
:
4
,
'
MAT3
'
:
9
,
'
MAT4
'
:
16
};
var
accessors
=
json
.
accessors
;
for
(
var
accessorId
in
accessors
)
{
var
accessor
=
accessors
[
accessorId
];
var
arraybuffer
=
bufferViews
[
accessor
.
bufferView
].
_arraybuffer
;
var
itemSize
=
TYPE_SIZES
[
accessor
.
type
];
var
TypedArray
=
COMPONENT_TYPES
[
accessor
.
componentType
];
var
array
=
new
TypedArray
(
arraybuffer
,
accessor
.
byteOffset
,
accessor
.
count
*
itemSize
);
accessor
.
_bufferattribute
=
new
THREE
.
BufferAttribute
(
array
,
itemSize
);
}
// meshes
var
meshes
=
json
.
meshes
;
for
(
var
meshId
in
meshes
)
{
var
mesh
=
meshes
[
meshId
];
var
geometry
=
new
THREE
.
BufferGeometry
();
geometry
.
name
=
mesh
.
name
;
var
primitives
=
mesh
.
primitives
;
for
(
var
i
=
0
;
i
<
1
;
/*primitives.length;*/
i
++
)
{
var
primitive
=
primitives
[
0
];
var
attributes
=
primitive
.
attributes
;
if
(
primitive
.
indices
)
{
geometry
.
setIndex
(
accessors
[
primitive
.
indices
].
_bufferattribute
);
}
for
(
var
attributeId
in
attributes
)
{
var
attribute
=
attributes
[
attributeId
];
var
bufferAttribute
=
accessors
[
attribute
].
_bufferattribute
;
switch
(
attributeId
)
{
case
'
POSITION
'
:
geometry
.
addAttribute
(
'
position
'
,
bufferAttribute
);
break
;
case
'
NORMAL
'
:
geometry
.
addAttribute
(
'
normal
'
,
bufferAttribute
);
break
;
case
'
TEXCOORD_0
'
:
geometry
.
addAttribute
(
'
uv
'
,
bufferAttribute
);
break
;
}
}
}
mesh
.
_geometry
=
geometry
;
}
// nodes
var
nodes
=
json
.
nodes
;
var
matrix
=
new
THREE
.
Matrix4
();
for
(
var
nodeId
in
nodes
)
{
var
node
=
nodes
[
nodeId
];
var
object
=
new
THREE
.
Group
();
object
.
name
=
node
.
name
;
if
(
node
.
translation
!==
undefined
)
{
object
.
position
.
fromArray
(
node
.
translation
);
}
if
(
node
.
rotation
!==
undefined
)
{
object
.
quaternion
.
fromArray
(
node
.
rotation
);
}
if
(
node
.
scale
!==
undefined
)
{
object
.
scale
.
fromArray
(
node
.
scale
);
}
if
(
node
.
matrix
!==
undefined
)
{
matrix
.
fromArray
(
node
.
matrix
);
matrix
.
decompose
(
object
.
position
,
object
.
quaternion
,
object
.
scale
);
}
if
(
node
.
meshes
!==
undefined
)
{
for
(
var
i
=
0
;
i
<
node
.
meshes
.
length
;
i
++
)
{
var
meshId
=
node
.
meshes
[
i
];
object
.
add
(
new
THREE
.
Mesh
(
meshes
[
meshId
].
_geometry
,
new
THREE
.
MeshNormalMaterial
()
)
);
}
}
node
.
_object
=
object
;
}
for
(
var
nodeId
in
nodes
)
{
var
node
=
nodes
[
nodeId
];
for
(
var
i
=
0
;
i
<
node
.
children
.
length
;
i
++
)
{
var
child
=
node
.
children
[
i
];
node
.
_object
.
add
(
nodes
[
child
].
_object
);
}
}
// scenes
var
scenes
=
json
.
scenes
;
for
(
var
sceneId
in
scenes
)
{
var
scene
=
scenes
[
sceneId
];
var
container
=
new
THREE
.
Scene
();
for
(
var
i
=
0
;
i
<
scene
.
nodes
.
length
;
i
++
)
{
var
node
=
scene
.
nodes
[
i
];
container
.
add
(
nodes
[
node
].
_object
);
}
scene
.
_container
=
container
;
}
console
.
timeEnd
(
'
GLTFLoader
'
);
return
{
scene
:
json
.
scenes
[
json
.
scene
].
_container
};
}
};
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录