Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
车家大少爷
three.js
提交
571347f5
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 搜索 >>
提交
571347f5
编写于
5月 06, 2021
作者:
M
Mr.doob
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fixed code WebXR Hands code.
上级
2c9b1438
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
23 addition
and
43 deletion
+23
-43
examples/jsm/webxr/OculusHandModel.js
examples/jsm/webxr/OculusHandModel.js
+2
-16
examples/jsm/webxr/XRHandMeshModel.js
examples/jsm/webxr/XRHandMeshModel.js
+13
-4
examples/jsm/webxr/XRHandModelFactory.js
examples/jsm/webxr/XRHandModelFactory.js
+5
-20
examples/webxr_vr_handinput.html
examples/webxr_vr_handinput.html
+1
-1
examples/webxr_vr_handinput_cubes.html
examples/webxr_vr_handinput_cubes.html
+1
-1
examples/webxr_vr_handinput_profiles.html
examples/webxr_vr_handinput_profiles.html
+1
-1
未找到文件。
examples/jsm/webxr/OculusHandModel.js
浏览文件 @
571347f5
import
{
Object3D
,
Sphere
,
Box3
}
from
'
../../../build/three.module.js
'
;
import
{
fetchProfile
}
from
'
../libs/motion-controllers.module.js
'
;
import
{
XRHandMeshModel
}
from
'
./XRHandMeshModel.js
'
;
const
DEFAULT_PROFILES_PATH
=
'
https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles
'
;
const
DEFAULT_PROFILE
=
'
generic-hand
'
;
const
TOUCH_RADIUS
=
0.01
;
const
POINTING_JOINT
=
'
index-finger-tip
'
;
...
...
@@ -23,23 +19,13 @@ class OculusHandModel extends Object3D {
controller
.
addEventListener
(
'
connected
'
,
(
event
)
=>
{
const
xrInputSource
=
event
.
data
;
if
(
xrInputSource
.
hand
&&
!
this
.
motionController
)
{
this
.
visible
=
true
;
this
.
xrInputSource
=
xrInputSource
;
fetchProfile
(
xrInputSource
,
DEFAULT_PROFILES_PATH
,
DEFAULT_PROFILE
).
then
(
(
{
profile
,
assetPath
}
)
=>
{
this
.
motionController
=
new
XRHandMeshModel
(
this
,
controller
,
assetPath
);
}
).
catch
(
(
err
)
=>
{
console
.
warn
(
err
);
}
);
this
.
motionController
=
new
XRHandMeshModel
(
this
,
controller
,
this
.
path
,
xrInputSource
.
handedness
);
}
...
...
examples/jsm/webxr/XRHandMeshModel.js
浏览文件 @
571347f5
import
{
GLTFLoader
}
from
'
../loaders/GLTFLoader.js
'
;
const
DEFAULT_HAND_PROFILE_PATH
=
'
https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles/generic-hand/
'
;
class
XRHandMeshModel
{
constructor
(
handModel
,
controller
,
assetUrl
)
{
constructor
(
handModel
,
controller
,
path
,
handedness
)
{
this
.
controller
=
controller
;
this
.
handModel
=
handModel
;
this
.
bones
=
[];
const
loader
=
new
GLTFLoader
();
loader
.
setPath
(
''
);
loader
.
load
(
assetUrl
,
gltf
=>
{
const
loader
=
new
GLTFLoader
();
loader
.
setPath
(
path
||
DEFAULT_HAND_PROFILE_PATH
);
loader
.
load
(
`
${
handedness
}
.glb`
,
gltf
=>
{
const
object
=
gltf
.
scene
.
children
[
0
];
this
.
handModel
.
add
(
object
);
...
...
@@ -21,6 +23,8 @@ class XRHandMeshModel {
mesh
.
castShadow
=
true
;
mesh
.
receiveShadow
=
true
;
mesh
.
material
.
side
=
0
;
// Workaround: force FrontSide
const
joints
=
[
'
wrist
'
,
'
thumb-metacarpal
'
,
...
...
@@ -52,6 +56,7 @@ class XRHandMeshModel {
joints
.
forEach
(
jointName
=>
{
const
bone
=
object
.
getObjectByName
(
jointName
);
if
(
bone
!==
undefined
)
{
bone
.
jointName
=
jointName
;
...
...
@@ -74,15 +79,19 @@ class XRHandMeshModel {
// XR Joints
const
XRJoints
=
this
.
controller
.
joints
;
for
(
let
i
=
0
;
i
<
this
.
bones
.
length
;
i
++
)
{
const
bone
=
this
.
bones
[
i
];
if
(
bone
)
{
const
XRJoint
=
XRJoints
[
bone
.
jointName
];
if
(
XRJoint
.
visible
)
{
const
position
=
XRJoint
.
position
;
if
(
bone
)
{
bone
.
position
.
copy
(
position
);
...
...
examples/jsm/webxr/XRHandModelFactory.js
浏览文件 @
571347f5
...
...
@@ -10,13 +10,6 @@ import {
XRHandMeshModel
}
from
'
./XRHandMeshModel.js
'
;
import
{
fetchProfile
}
from
'
../libs/motion-controllers.module.js
'
;
const
DEFAULT_PROFILES_PATH
=
'
https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles
'
;
const
DEFAULT_PROFILE
=
'
generic-hand
'
;
class
XRHandModel
extends
Object3D
{
constructor
(
controller
)
{
...
...
@@ -49,18 +42,19 @@ class XRHandModelFactory {
constructor
()
{
this
.
path
=
''
;
this
.
path
=
null
;
}
setPath
(
path
)
{
this
.
path
=
path
;
return
this
;
}
createHandModel
(
controller
,
profile
,
options
)
{
createHandModel
(
controller
,
profile
)
{
const
handModel
=
new
XRHandModel
(
controller
);
...
...
@@ -70,7 +64,6 @@ class XRHandModelFactory {
if
(
xrInputSource
.
hand
&&
!
handModel
.
motionController
)
{
handModel
.
visible
=
true
;
handModel
.
xrInputSource
=
xrInputSource
;
// @todo Detect profile if not provided
...
...
@@ -82,17 +75,9 @@ class XRHandModelFactory {
handModel
.
motionController
=
new
XRHandPrimitiveModel
(
handModel
,
controller
,
this
.
path
,
xrInputSource
.
handedness
,
{
primitive
:
'
box
'
}
);
}
else
if
(
profile
===
'
oculus
'
)
{
fetchProfile
(
xrInputSource
,
DEFAULT_PROFILES_PATH
,
DEFAULT_PROFILE
).
then
(
(
{
profile
,
assetPath
}
)
=>
{
handModel
.
motionController
=
new
XRHandMeshModel
(
handModel
,
controller
,
assetPath
);
}
).
catch
(
(
err
)
=>
{
console
.
warn
(
err
);
}
else
if
(
profile
===
'
mesh
'
)
{
}
);
handModel
.
motionController
=
new
XRHandMeshModel
(
handModel
,
controller
,
this
.
path
,
xrInputSource
.
handedness
);
}
...
...
examples/webxr_vr_handinput.html
浏览文件 @
571347f5
...
...
@@ -87,7 +87,7 @@
scene
.
add
(
controller2
);
const
controllerModelFactory
=
new
XRControllerModelFactory
();
const
handModelFactory
=
new
XRHandModelFactory
()
.
setPath
(
"
./models/gltf/
"
)
;
const
handModelFactory
=
new
XRHandModelFactory
();
// Hand 1
controllerGrip1
=
renderer
.
xr
.
getControllerGrip
(
0
);
...
...
examples/webxr_vr_handinput_cubes.html
浏览文件 @
571347f5
...
...
@@ -100,7 +100,7 @@
scene
.
add
(
controller2
);
const
controllerModelFactory
=
new
XRControllerModelFactory
();
const
handModelFactory
=
new
XRHandModelFactory
()
.
setPath
(
"
./models/gltf/
"
)
;
const
handModelFactory
=
new
XRHandModelFactory
();
// Hand 1
controllerGrip1
=
renderer
.
xr
.
getControllerGrip
(
0
);
...
...
examples/webxr_vr_handinput_profiles.html
浏览文件 @
571347f5
...
...
@@ -99,7 +99,7 @@
scene
.
add
(
controller2
);
const
controllerModelFactory
=
new
XRControllerModelFactory
();
const
handModelFactory
=
new
XRHandModelFactory
()
.
setPath
(
"
./models/gltf/
"
)
;
const
handModelFactory
=
new
XRHandModelFactory
();
// Hand 1
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录