Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
车家大少爷
three.js
提交
37db3e5a
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,发现更多精彩内容 >>
提交
37db3e5a
编写于
12月 02, 2014
作者:
M
mschuetz
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
added raycasting to lines with buffered geometry
上级
80ee86b4
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
94 addition
and
6 deletion
+94
-6
src/objects/Line.js
src/objects/Line.js
+94
-6
未找到文件。
src/objects/Line.js
浏览文件 @
37db3e5a
...
...
@@ -49,16 +49,104 @@ THREE.Line.prototype.raycast = ( function () {
inverseMatrix
.
getInverse
(
this
.
matrixWorld
);
ray
.
copy
(
raycaster
.
ray
).
applyMatrix4
(
inverseMatrix
);
var
vStart
=
new
THREE
.
Vector3
();
var
vEnd
=
new
THREE
.
Vector3
();
var
interSegment
=
new
THREE
.
Vector3
();
var
interRay
=
new
THREE
.
Vector3
();
var
step
=
this
.
mode
===
THREE
.
LineStrip
?
1
:
2
;
if
(
geometry
instanceof
THREE
.
BufferGeometry
)
{
var
attributes
=
geometry
.
attributes
;
if
(
attributes
.
index
!==
undefined
)
{
var
indices
=
attributes
.
index
.
array
;
var
positions
=
attributes
.
position
.
array
;
var
offsets
=
geometry
.
offsets
;
if
(
offsets
.
length
===
0
)
{
offsets
=
[
{
start
:
0
,
count
:
indices
.
length
,
index
:
0
}
];
}
for
(
var
oi
=
0
;
oi
<
offsets
.
length
;
oi
++
){
var
start
=
offsets
[
oi
].
start
;
var
count
=
offsets
[
oi
].
count
;
var
index
=
offsets
[
oi
].
index
;
for
(
var
i
=
start
;
i
<
start
+
count
-
1
;
i
+=
step
)
{
var
a
=
index
+
indices
[
i
];
var
b
=
index
+
indices
[
i
+
1
];
vStart
.
fromArray
(
positions
,
a
*
3
);
vEnd
.
fromArray
(
positions
,
b
*
3
);
var
distSq
=
ray
.
distanceSqToSegment
(
vStart
,
vEnd
,
interRay
,
interSegment
);
if
(
distSq
>
precisionSq
)
continue
;
var
distance
=
ray
.
origin
.
distanceTo
(
interRay
);
if
(
distance
<
raycaster
.
near
||
distance
>
raycaster
.
far
)
continue
;
intersects
.
push
(
{
distance
:
distance
,
// What do we want? intersection point on the ray or on the segment??
// point: raycaster.ray.at( distance ),
point
:
interSegment
.
clone
().
applyMatrix4
(
this
.
matrixWorld
),
face
:
null
,
faceIndex
:
null
,
object
:
this
}
);
}
}
}
else
{
var
positions
=
attributes
.
position
.
array
;
for
(
var
i
=
0
;
i
<
positions
.
length
/
3
-
1
;
i
+=
step
)
{
vStart
.
fromArray
(
positions
,
3
*
i
);
vEnd
.
fromArray
(
positions
,
3
*
i
+
3
);
var
distSq
=
ray
.
distanceSqToSegment
(
vStart
,
vEnd
,
interRay
,
interSegment
);
if
(
distSq
>
precisionSq
)
continue
;
var
distance
=
ray
.
origin
.
distanceTo
(
interRay
);
if
(
distance
<
raycaster
.
near
||
distance
>
raycaster
.
far
)
continue
;
intersects
.
push
(
{
distance
:
distance
,
// What do we want? intersection point on the ray or on the segment??
// point: raycaster.ray.at( distance ),
point
:
interSegment
.
clone
().
applyMatrix4
(
this
.
matrixWorld
),
face
:
null
,
faceIndex
:
null
,
object
:
this
}
);
}
}
/* if ( geometry instanceof THREE.BufferGeometry ) {
} else */
if
(
geometry
instanceof
THREE
.
Geometry
)
{
}
else
if
(
geometry
instanceof
THREE
.
Geometry
)
{
var
vertices
=
geometry
.
vertices
;
var
nbVertices
=
vertices
.
length
;
var
interSegment
=
new
THREE
.
Vector3
();
var
interRay
=
new
THREE
.
Vector3
();
var
step
=
this
.
mode
===
THREE
.
LineStrip
?
1
:
2
;
for
(
var
i
=
0
;
i
<
nbVertices
-
1
;
i
=
i
+
step
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录