Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Ablesons
three.js
提交
2af891d7
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,发现更多精彩内容 >>
提交
2af891d7
编写于
7月 21, 2011
作者:
Z
zz85
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
change bevel vertices order
上级
ca40f42e
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
123 addition
and
83 deletion
+123
-83
src/extras/geometries/ExtrudeGeometry.js
src/extras/geometries/ExtrudeGeometry.js
+123
-83
未找到文件。
src/extras/geometries/ExtrudeGeometry.js
浏览文件 @
2af891d7
/**
* @author zz85 / http://www.lab4games.net/zz85/blog
* Creates extruded geometry f
orm path
.
* Creates extruded geometry f
rom a path shape
.
**/
THREE
.
ExtrudeGeometry
=
function
(
shape
,
options
)
{
...
...
@@ -8,14 +8,17 @@ THREE.ExtrudeGeometry = function( shape, options ) {
var
amount
=
options
.
amount
!==
undefined
?
options
.
amount
:
100
;
// todo: bevel
var
bevelThickness
=
options
.
bevelThickness
!==
undefined
?
options
.
bevelThickness
:
4
;
// 10
var
bevelSize
=
options
.
bevelSize
!==
undefined
?
options
.
bevelSize
:
6
;
// 8
var
bevelEnabled
=
options
.
bevelEnabled
!==
undefined
?
options
.
bevelEnabled
:
false
;
var
bevelSegments
=
4
;
var
bevelThickness
=
options
.
bevelThickness
!==
undefined
?
options
.
bevelThickness
:
8
;
// 10
var
bevelSize
=
options
.
bevelSize
!==
undefined
?
options
.
bevelSize
:
bevelThickness
;
// 8
var
bevelEnabled
=
options
.
bevelEnabled
!==
undefined
?
options
.
bevelEnabled
:
true
;
// false
var
bevelSegments
=
options
.
bevelSegments
!==
undefined
?
options
.
bevelSegments
:
6
;
// We should set bevel segments to 0 if bevel is not enabled.
if
(
!
bevelEnabled
)
bevelSegments
=
0
;
var
steps
=
options
.
steps
!==
undefined
?
options
.
steps
:
1
;
var
extrudePath
=
options
.
path
!==
undefined
?
options
.
path
:
null
;
var
extrudePts
,
extrudeByPath
=
false
;
if
(
extrudePath
)
{
...
...
@@ -26,7 +29,6 @@ THREE.ExtrudeGeometry = function( shape, options ) {
}
bevelEnabled
=
true
;
// TODO, extrude by path's tangents? also via 3d path?
...
...
@@ -40,7 +42,7 @@ THREE.ExtrudeGeometry = function( shape, options ) {
// getPoints
var
shapePoints
=
shape
.
extractAllPoints
(
tru
e
);
var
shapePoints
=
shape
.
extractAllPoints
(
fals
e
);
// getPoints | getSpacedPoints() you can get variable divisions by dividing by total length
var
vertices
=
shapePoints
.
shape
;
...
...
@@ -92,61 +94,9 @@ THREE.ExtrudeGeometry = function( shape, options ) {
}
console
.
log
(
"
same?
"
,
contour
.
length
==
vertices
.
length
);
var
i
,
vert
,
vlen
=
vertices
.
length
,
face
,
flen
=
faces
.
length
,
cont
,
clen
=
contour
.
length
,
hol
,
hlen
;
var
bevelPt
,
blen
=
bevelPoints
.
length
;
// Back facing vertices
for
(
i
=
0
;
i
<
vlen
;
i
++
)
{
vert
=
vertices
[
i
];
v
(
vert
.
x
,
vert
.
y
,
0
);
}
// Add steped vertices...
// Including front facing vertices
var
s
=
1
;
for
(
;
s
<=
steps
;
s
++
)
{
for
(
i
=
0
;
i
<
vlen
;
i
++
)
{
vert
=
vertices
[
i
];
if
(
!
extrudeByPath
)
{
v
(
vert
.
x
,
vert
.
y
,
amount
/
steps
*
s
);
}
else
{
v
(
vert
.
x
,
vert
.
y
+
extrudePts
[
s
-
1
].
y
,
extrudePts
[
s
-
1
].
x
);
}
}
}
// Add bevel planes
// Loop bevelSegments, 1 for the front, 1 for the back
var
b
;
// Find all centroids of shapes and holes
var
b
;
var
sum
=
new
THREE
.
Vector2
();
var
contourCentroid
,
holesCentroids
;
...
...
@@ -188,18 +138,25 @@ THREE.ExtrudeGeometry = function( shape, options ) {
return
vectorFromCentroid
.
multiplyScalar
(
adj
).
addSelf
(
centroid
);
}
var
i
,
vert
,
vlen
=
vertices
.
length
,
face
,
flen
=
faces
.
length
,
cont
,
clen
=
contour
.
length
,
hol
,
hlen
;
var
bs
;
// Loop bevelSegments, 1 for the front, 1 for the back
for
(
b
=
bevelSegments
;
b
>
0
;
b
--
)
{
// z
// ****
t
=
b
/
bevelSegments
;
z
=
bevelThickness
*
t
;
bs
=
bevelSize
*
(
1
-
Math
.
sin
((
1
-
t
)
*
Math
.
PI
/
2
));
//bevelSize * t ;
// Formula could probably be simplified
bs
=
bevelSize
*
(
1
-
Math
.
sin
((
1
-
t
)
*
Math
.
PI
/
2
))
;
//bevelSize * t ;
//bs = Math.sqrt(- (t* t) - 2 * t * bevelThickness);
// contract shape
for
(
i
=
0
,
il
=
contour
.
length
;
i
<
il
;
i
++
)
{
...
...
@@ -221,6 +178,54 @@ THREE.ExtrudeGeometry = function( shape, options ) {
}
// Back facing vertices
for
(
i
=
0
;
i
<
vlen
;
i
++
)
{
vert
=
vertices
[
i
];
//v( vert.x, vert.y, 0 );
if
(
!
extrudeByPath
)
{
v
(
vert
.
x
,
vert
.
y
,
0
);
}
else
{
v
(
vert
.
x
,
vert
.
y
+
extrudePts
[
0
].
y
,
extrudePts
[
0
].
x
);
}
}
// Add steped vertices...
// Including front facing vertices
var
s
=
1
;
for
(
;
s
<=
steps
;
s
++
)
{
for
(
i
=
0
;
i
<
vlen
;
i
++
)
{
vert
=
vertices
[
i
];
if
(
!
extrudeByPath
)
{
v
(
vert
.
x
,
vert
.
y
,
amount
/
steps
*
s
);
}
else
{
v
(
vert
.
x
,
vert
.
y
+
extrudePts
[
s
-
1
].
y
,
extrudePts
[
s
-
1
].
x
);
}
}
}
// Add Bevel Segments planes
for
(
b
=
1
;
b
<=
bevelSegments
;
b
++
)
{
t
=
b
/
bevelSegments
;
...
...
@@ -240,8 +245,18 @@ THREE.ExtrudeGeometry = function( shape, options ) {
ahole
=
holes
[
h
];
for
(
i
=
0
,
il
=
ahole
.
length
;
i
<
il
;
i
++
)
{
vert
=
scalePt
(
ahole
[
i
],
holesCentroids
[
h
]
,
bs
,
true
);
v
(
vert
.
x
,
vert
.
y
,
amount
+
z
);
vert
=
scalePt
(
ahole
[
i
],
holesCentroids
[
h
]
,
bs
,
true
);
if
(
!
extrudeByPath
)
{
v
(
vert
.
x
,
vert
.
y
,
amount
+
z
);
}
else
{
v
(
vert
.
x
,
vert
.
y
+
extrudePts
[
steps
-
1
].
y
,
extrudePts
[
steps
-
1
].
x
+
z
);
}
}
}
...
...
@@ -258,10 +273,10 @@ THREE.ExtrudeGeometry = function( shape, options ) {
// Bottom faces
if
(
bevelEnabled
)
{
if
(
true
||
bevelEnabled
)
{
var
layer
=
steps
+
1
;
var
layer
=
0
;
//steps + 1
var
offset
=
vlen
*
layer
;
for
(
i
=
0
;
i
<
flen
;
i
++
)
{
...
...
@@ -271,7 +286,7 @@ THREE.ExtrudeGeometry = function( shape, options ) {
}
layer
=
bevelSegments
*
2
;
layer
=
steps
+
bevelSegments
*
2
;
offset
=
vlen
*
layer
;
// Top faces
...
...
@@ -344,15 +359,47 @@ THREE.ExtrudeGeometry = function( shape, options ) {
var
s
=
0
;
for
(
;
s
<
(
steps
+
bevelSegments
*
2
)
;
s
++
)
{
for
(
;
s
<
(
steps
+
bevelSegments
*
2
)
;
s
++
)
{
var
slen1
=
vlen
*
s
;
var
slen2
=
vlen
*
(
s
+
1
);
f4
(
layeroffset
+
j
+
slen1
,
layeroffset
+
k
+
slen1
,
layeroffset
+
k
+
slen2
,
layeroffset
+
j
+
slen2
);
}
/*
// if we have bevel in the correct order, we could potentially do everything in a loop.
for ( s = steps + 1; s < (steps + bevelSegments) ; s++ ) {
var slen1 = vlen * s;
var slen2 = vlen * ( s + 1 );
if ( (s+1)==(steps + bevelSegments) ) {
slen2 = vlen * 0;
}
f4( layeroffset + j + slen1, layeroffset + k + slen1, layeroffset + k + slen2, layeroffset + j + slen2 );
}
// if we have bevel in the correct order, we could potentially do everything in a loop.
for ( s = (steps + bevelSegments * 2); s > (steps + bevelSegments) ; s-- ) {
var slen1 = vlen * s;
var slen2 = vlen * ( s -1 );
if ( (s )==(steps + bevelSegments) ) {
slen2 = vlen * steps;
}
f4( layeroffset + j + slen1, layeroffset + k + slen1, layeroffset + k + slen2, layeroffset + j + slen2 );
}
*/
//
...
...
@@ -387,15 +434,8 @@ THREE.ExtrudeGeometry = function( shape, options ) {
function
f4
(
a
,
b
,
c
,
d
)
{
// if ( reverse ) {
//
// scope.faces.push( new THREE.Face4( d, c, b, a ) );
//
// } else {
//
scope
.
faces
.
push
(
new
THREE
.
Face4
(
a
,
b
,
c
,
d
)
);
//
// }
scope
.
faces
.
push
(
new
THREE
.
Face4
(
a
,
b
,
c
,
d
)
);
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录