Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Ablesons
three.js
提交
e4977c1e
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,体验更适合开发者的 AI 搜索 >>
提交
e4977c1e
编写于
11月 19, 2020
作者:
D
Don McCurdy
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Examples: Tidy up glTF Variants example.
上级
f43ec7c8
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
27 addition
and
66 deletion
+27
-66
examples/files.json
examples/files.json
+1
-1
examples/webgl_loader_gltf_variants.html
examples/webgl_loader_gltf_variants.html
+26
-65
未找到文件。
examples/files.json
浏览文件 @
e4977c1e
...
...
@@ -92,7 +92,7 @@
"webgl_loader_gcode"
,
"webgl_loader_gltf"
,
"webgl_loader_gltf_extensions"
,
"webgl_loader_gltf_variant"
,
"webgl_loader_gltf_variant
s
"
,
"webgl_loader_imagebitmap"
,
"webgl_loader_kmz"
,
"webgl_loader_ldraw"
,
...
...
examples/webgl_loader_gltf_variant.html
→
examples/webgl_loader_gltf_variant
s
.html
浏览文件 @
e4977c1e
...
...
@@ -23,14 +23,11 @@
import
{
OrbitControls
}
from
'
./jsm/controls/OrbitControls.js
'
;
import
{
GLTFLoader
}
from
'
./jsm/loaders/GLTFLoader.js
'
;
import
{
RGBELoader
}
from
'
./jsm/loaders/RGBELoader.js
'
;
import
{
RoughnessMipmapper
}
from
'
./jsm/utils/RoughnessMipmapper.js
'
;
let
camera
,
scene
,
renderer
;
let
gui
;
const
state
=
{
variant
:
"
midnight
"
};
const
state
=
{
variant
:
'
midnight
'
};
init
();
render
();
...
...
@@ -41,7 +38,7 @@
document
.
body
.
appendChild
(
container
);
camera
=
new
THREE
.
PerspectiveCamera
(
45
,
window
.
innerWidth
/
window
.
innerHeight
,
0.25
,
20
);
camera
.
position
.
set
(
3.0
,
3.0
,
-
3.0
);
camera
.
position
.
set
(
3.0
,
3.0
,
-
3.0
);
scene
=
new
THREE
.
Scene
();
...
...
@@ -62,25 +59,11 @@
// model
// use of RoughnessMipmapper is optional
const
roughnessMipmapper
=
new
RoughnessMipmapper
(
renderer
);
const
loader
=
new
GLTFLoader
().
setPath
(
'
models/gltf/MaterialsVariantsShoe/glTF/
'
);
loader
.
load
(
'
MaterialsVariantsShoe.gltf
'
,
function
(
gltf
)
{
gltf
.
scene
.
scale
.
set
(
10.0
,
10.0
,
10.0
);
gltf
.
scene
.
traverse
(
function
(
child
)
{
if
(
child
.
isMesh
)
{
// TOFIX RoughnessMipmapper seems to be broken with WebGL 2.0
// roughnessMipmapper.generateMipmaps( child.material );
}
}
);
scene
.
add
(
gltf
.
scene
);
// GUI
...
...
@@ -88,31 +71,14 @@
// Details of the KHR_materials_variants extension used here can be found below
// https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_variants
if
(
gltf
.
userData
.
gltfExtensions
!==
undefined
)
{
let
parser
=
gltf
.
parser
;
const
extension
=
gltf
.
userData
.
gltfExtensions
[
'
KHR_materials_variants
'
];
if
(
extension
!==
undefined
)
{
let
variants
=
extension
.
variants
.
map
(
variant
=>
variant
.
name
);
let
guiVariants
=
gui
.
add
(
state
,
'
variant
'
,
variants
).
name
(
'
Variant
'
);
changeMaterialByVariantName
(
scene
,
parser
,
extension
,
state
.
variant
);
const
parser
=
gltf
.
parser
;
const
variantsExtension
=
gltf
.
userData
.
gltfExtensions
[
'
KHR_materials_variants
'
];
const
variants
=
variantsExtension
.
variants
.
map
(
(
variant
)
=>
variant
.
name
);
const
variantsCtrl
=
gui
.
add
(
state
,
'
variant
'
,
variants
).
name
(
'
Variant
'
);
guiVariants
.
onChange
(
function
(
value
)
{
selectVariant
(
scene
,
parser
,
variantsExtension
,
state
.
variant
);
changeMaterialByVariantName
(
scene
,
parser
,
extension
,
value
);
});
}
}
roughnessMipmapper
.
dispose
();
variantsCtrl
.
onChange
(
(
value
)
=>
selectVariant
(
scene
,
parser
,
variantsExtension
,
value
)
);
render
();
...
...
@@ -135,52 +101,47 @@
controls
.
addEventListener
(
'
change
'
,
render
);
// use if there is no animation loop
controls
.
minDistance
=
2
;
controls
.
maxDistance
=
10
;
controls
.
target
.
set
(
0
,
0
,
-
0.2
);
controls
.
target
.
set
(
0
,
0
.5
,
-
0.2
);
controls
.
update
();
window
.
addEventListener
(
'
resize
'
,
onWindowResize
,
false
);
}
function
changeMaterialByVariantName
(
scene
,
parser
,
extension
,
variantName
)
{
function
selectVariant
(
scene
,
parser
,
extension
,
variantName
)
{
const
variantIndex
=
extension
.
variants
.
findIndex
(
(
v
)
=>
v
.
name
.
includes
(
variantName
)
);
scene
.
traverse
(
async
(
object
)
=>
{
if
(
!
object
.
isMesh
)
return
;
const
meshVariantData
=
object
.
userData
.
gltfExtensions
[
'
KHR_materials_variants
'
];
if
(
meshVariantData
!==
undefined
)
{
if
(
!
object
.
isMesh
||
!
object
.
userData
.
gltfExtensions
)
return
;
let
materialIndex
=
-
1
;
const
meshVariantDef
=
object
.
userData
.
gltfExtensions
[
'
KHR_materials_variants
'
]
;
for
(
let
i
=
0
;
i
<
meshVariantData
.
mappings
.
length
;
i
++
)
{
if
(
!
meshVariantDef
)
return
;
const
mapping
=
meshVariantData
.
mappings
[
i
];
if
(
!
object
.
userData
.
originalMaterial
)
{
if
(
mapping
.
variants
.
indexOf
(
variantIndex
)
!=
-
1
)
{
object
.
userData
.
originalMaterial
=
object
.
material
;
materialIndex
=
mapping
.
material
;
break
;
}
}
const
mapping
=
meshVariantDef
.
mappings
.
find
(
(
mapping
)
=>
mapping
.
variants
.
includes
(
variantIndex
)
);
}
if
(
mapping
)
{
if
(
materialIndex
!=
-
1
)
{
object
.
material
=
await
parser
.
getDependency
(
'
material
'
,
mapping
.
material
);
object
.
material
=
await
parser
.
getDependency
(
'
material
'
,
materialIndex
);
}
else
{
render
();
}
object
.
material
=
object
.
originalMaterial
;
}
});
render
();
}
);
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录