Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Ablesons
three.js
提交
75fb4c73
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,发现更多精彩内容 >>
提交
75fb4c73
编写于
9月 10, 2011
作者:
A
alteredq
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Added GeometryUtils.center.
上级
3e04cf18
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
23 addition
and
2 deletion
+23
-2
build/Three.js
build/Three.js
+2
-1
build/custom/ThreeExtras.js
build/custom/ThreeExtras.js
+2
-1
src/extras/GeometryUtils.js
src/extras/GeometryUtils.js
+19
-0
未找到文件。
build/Three.js
浏览文件 @
75fb4c73
...
...
@@ -349,7 +349,8 @@ for(k=w.length;f<k;f++)v=w[f],u.vertexNormals.push(v.clone());u.color.copy(n.col
f+h>1&&(f=1-f,h=1-h);m=1-f-h;k.copy(b);k.multiplyScalar(f);n.copy(c);n.multiplyScalar(h);k.addSelf(n);n.copy(e);n.multiplyScalar(m);k.addSelf(n);return k},randomPointInFace:function(b,c,e){var f,h,m;if(b instanceof THREE.Face3)return f=c.vertices[b.a].position,h=c.vertices[b.b].position,m=c.vertices[b.c].position,THREE.GeometryUtils.randomPointInTriangle(f,h,m);else if(b instanceof THREE.Face4){f=c.vertices[b.a].position;h=c.vertices[b.b].position;m=c.vertices[b.c].position;var c=c.vertices[b.d].position,
k;e?b._area1&&b._area2?(e=b._area1,k=b._area2):(e=THREE.GeometryUtils.triangleArea(f,h,c),k=THREE.GeometryUtils.triangleArea(h,m,c),b._area1=e,b._area2=k):(e=THREE.GeometryUtils.triangleArea(f,h,c),k=THREE.GeometryUtils.triangleArea(h,m,c));return THREE.GeometryUtils.random()*(e+k)<e?THREE.GeometryUtils.randomPointInTriangle(f,h,c):THREE.GeometryUtils.randomPointInTriangle(h,m,c)}},randomPointsInGeometry:function(b,c){function e(b){function e(c,f){if(f<c)return c;var h=c+Math.floor((f-c)/2);return v[h]>
b?e(c,h-1):v[h]<b?e(h+1,f):h}return e(0,v.length-1)}var f,h,m=b.faces,k=b.vertices,n=m.length,u=0,v=[],w,t,x,p;for(h=0;h<n;h++){f=m[h];if(f instanceof THREE.Face3)w=k[f.a].position,t=k[f.b].position,x=k[f.c].position,f._area=THREE.GeometryUtils.triangleArea(w,t,x);else if(f instanceof THREE.Face4)w=k[f.a].position,t=k[f.b].position,x=k[f.c].position,p=k[f.d].position,f._area1=THREE.GeometryUtils.triangleArea(w,t,p),f._area2=THREE.GeometryUtils.triangleArea(t,x,p),f._area=f._area1+f._area2;u+=f._area;
v[h]=u}f=[];k={};for(h=0;h<c;h++)n=THREE.GeometryUtils.random()*u,n=e(n),f[h]=THREE.GeometryUtils.randomPointInFace(m[n],b,!0),k[n]?k[n]+=1:k[n]=1;return f},triangleArea:function(b,c,e){var f,h=THREE.GeometryUtils.__v1;h.sub(b,c);f=h.length();h.sub(b,e);b=h.length();h.sub(c,e);e=h.length();c=0.5*(f+b+e);return Math.sqrt(c*(c-f)*(c-b)*(c-e))},random16:function(){return(65280*Math.random()+255*Math.random())/65535}};THREE.GeometryUtils.random=THREE.GeometryUtils.random16;THREE.GeometryUtils.__v1=new THREE.Vector3;
v[h]=u}f=[];k={};for(h=0;h<c;h++)n=THREE.GeometryUtils.random()*u,n=e(n),f[h]=THREE.GeometryUtils.randomPointInFace(m[n],b,!0),k[n]?k[n]+=1:k[n]=1;return f},triangleArea:function(b,c,e){var f,h=THREE.GeometryUtils.__v1;h.sub(b,c);f=h.length();h.sub(b,e);b=h.length();h.sub(c,e);e=h.length();c=0.5*(f+b+e);return Math.sqrt(c*(c-f)*(c-b)*(c-e))},random16:function(){return(65280*Math.random()+255*Math.random())/65535},center:function(b){b.computeBoundingBox();var c=new THREE.Matrix4;c.setTranslation(-0.5*
(b.boundingBox.x[1]+b.boundingBox.x[0]),-0.5*(b.boundingBox.y[1]+b.boundingBox.y[0]),-0.5*(b.boundingBox.z[1]+b.boundingBox.z[0]));b.applyMatrix(c);b.computeBoundingBox()}};THREE.GeometryUtils.random=THREE.GeometryUtils.random16;THREE.GeometryUtils.__v1=new THREE.Vector3;
THREE.ImageUtils={loadTexture:function(b,c,e){var f=new Image,h=new THREE.Texture(f,c);f.onload=function(){h.needsUpdate=!0;e&&e(this)};f.crossOrigin="";f.src=b;return h},loadTextureCube:function(b,c,e){var f,h=[],m=new THREE.Texture(h,c),c=h.loadCount=0;for(f=b.length;c<f;++c)h[c]=new Image,h[c].onload=function(){h.loadCount+=1;if(h.loadCount==6)m.needsUpdate=!0;e&&e(this)},h[c].crossOrigin="",h[c].src=b[c];return m},getNormalMap:function(b,c){var e=function(b){var e=Math.sqrt(b[0]*b[0]+b[1]*b[1]+
b[2]*b[2]);return[b[0]/e,b[1]/e,b[2]/e]};c|=1;var f=b.width,h=b.height,m=document.createElement("canvas");m.width=f;m.height=h;var k=m.getContext("2d");k.drawImage(b,0,0);for(var n=k.getImageData(0,0,f,h).data,u=k.createImageData(f,h),v=u.data,w=0;w<f;w++)for(var t=1;t<h;t++){var x=t-1<0?h-1:t-1,p=(t+1)%h,y=w-1<0?f-1:w-1,z=(w+1)%f,A=[],C=[0,0,n[(t*f+w)*4]/255*c];A.push([-1,0,n[(t*f+y)*4]/255*c]);A.push([-1,-1,n[(x*f+y)*4]/255*c]);A.push([0,-1,n[(x*f+w)*4]/255*c]);A.push([1,-1,n[(x*f+z)*4]/255*c]);
A.push([1,0,n[(t*f+z)*4]/255*c]);A.push([1,1,n[(p*f+z)*4]/255*c]);A.push([0,1,n[(p*f+w)*4]/255*c]);A.push([-1,1,n[(p*f+y)*4]/255*c]);x=[];y=A.length;for(p=0;p<y;p++){var z=A[p],E=A[(p+1)%y],z=[z[0]-C[0],z[1]-C[1],z[2]-C[2]],E=[E[0]-C[0],E[1]-C[1],E[2]-C[2]];x.push(e([z[1]*E[2]-z[2]*E[1],z[2]*E[0]-z[0]*E[2],z[0]*E[1]-z[1]*E[0]]))}A=[0,0,0];for(p=0;p<x.length;p++)A[0]+=x[p][0],A[1]+=x[p][1],A[2]+=x[p][2];A[0]/=x.length;A[1]/=x.length;A[2]/=x.length;C=(t*f+w)*4;v[C]=(A[0]+1)/2*255|0;v[C+1]=(A[1]+0.5)*
...
...
build/custom/ThreeExtras.js
浏览文件 @
75fb4c73
...
...
@@ -8,7 +8,8 @@ for(f=n.length;e<f;e++)m=n[e],l.vertexNormals.push(m.clone());l.color.copy(k.col
e
+
g
>
1
&&
(
e
=
1
-
e
,
g
=
1
-
g
);
h
=
1
-
e
-
g
;
f
.
copy
(
a
);
f
.
multiplyScalar
(
e
);
k
.
copy
(
b
);
k
.
multiplyScalar
(
g
);
f
.
addSelf
(
k
);
k
.
copy
(
c
);
k
.
multiplyScalar
(
h
);
f
.
addSelf
(
k
);
return
f
},
randomPointInFace
:
function
(
a
,
b
,
c
){
var
e
,
g
,
h
;
if
(
a
instanceof
THREE
.
Face3
)
return
e
=
b
.
vertices
[
a
.
a
].
position
,
g
=
b
.
vertices
[
a
.
b
].
position
,
h
=
b
.
vertices
[
a
.
c
].
position
,
THREE
.
GeometryUtils
.
randomPointInTriangle
(
e
,
g
,
h
);
else
if
(
a
instanceof
THREE
.
Face4
){
e
=
b
.
vertices
[
a
.
a
].
position
;
g
=
b
.
vertices
[
a
.
b
].
position
;
h
=
b
.
vertices
[
a
.
c
].
position
;
var
b
=
b
.
vertices
[
a
.
d
].
position
,
f
;
c
?
a
.
_area1
&&
a
.
_area2
?(
c
=
a
.
_area1
,
f
=
a
.
_area2
):(
c
=
THREE
.
GeometryUtils
.
triangleArea
(
e
,
g
,
b
),
f
=
THREE
.
GeometryUtils
.
triangleArea
(
g
,
h
,
b
),
a
.
_area1
=
c
,
a
.
_area2
=
f
):(
c
=
THREE
.
GeometryUtils
.
triangleArea
(
e
,
g
,
b
),
f
=
THREE
.
GeometryUtils
.
triangleArea
(
g
,
h
,
b
));
return
THREE
.
GeometryUtils
.
random
()
*
(
c
+
f
)
<
c
?
THREE
.
GeometryUtils
.
randomPointInTriangle
(
e
,
g
,
b
):
THREE
.
GeometryUtils
.
randomPointInTriangle
(
g
,
h
,
b
)}},
randomPointsInGeometry
:
function
(
a
,
b
){
function
c
(
a
){
function
c
(
b
,
e
){
if
(
e
<
b
)
return
b
;
var
f
=
b
+
Math
.
floor
((
e
-
b
)
/
2
);
return
m
[
f
]
>
a
?
c
(
b
,
f
-
1
):
m
[
f
]
<
a
?
c
(
f
+
1
,
e
):
f
}
return
c
(
0
,
m
.
length
-
1
)}
var
e
,
g
,
h
=
a
.
faces
,
f
=
a
.
vertices
,
k
=
h
.
length
,
l
=
0
,
m
=
[],
n
,
o
,
t
,
p
;
for
(
g
=
0
;
g
<
k
;
g
++
){
e
=
h
[
g
];
if
(
e
instanceof
THREE
.
Face3
)
n
=
f
[
e
.
a
].
position
,
o
=
f
[
e
.
b
].
position
,
t
=
f
[
e
.
c
].
position
,
e
.
_area
=
THREE
.
GeometryUtils
.
triangleArea
(
n
,
o
,
t
);
else
if
(
e
instanceof
THREE
.
Face4
)
n
=
f
[
e
.
a
].
position
,
o
=
f
[
e
.
b
].
position
,
t
=
f
[
e
.
c
].
position
,
p
=
f
[
e
.
d
].
position
,
e
.
_area1
=
THREE
.
GeometryUtils
.
triangleArea
(
n
,
o
,
p
),
e
.
_area2
=
THREE
.
GeometryUtils
.
triangleArea
(
o
,
t
,
p
),
e
.
_area
=
e
.
_area1
+
e
.
_area2
;
l
+=
e
.
_area
;
m
[
g
]
=
l
}
e
=
[];
f
=
{};
for
(
g
=
0
;
g
<
b
;
g
++
)
k
=
THREE
.
GeometryUtils
.
random
()
*
l
,
k
=
c
(
k
),
e
[
g
]
=
THREE
.
GeometryUtils
.
randomPointInFace
(
h
[
k
],
a
,
!
0
),
f
[
k
]?
f
[
k
]
+=
1
:
f
[
k
]
=
1
;
return
e
},
triangleArea
:
function
(
a
,
b
,
c
){
var
e
,
g
=
THREE
.
GeometryUtils
.
__v1
;
g
.
sub
(
a
,
b
);
e
=
g
.
length
();
g
.
sub
(
a
,
c
);
a
=
g
.
length
();
g
.
sub
(
b
,
c
);
c
=
g
.
length
();
b
=
0.5
*
(
e
+
a
+
c
);
return
Math
.
sqrt
(
b
*
(
b
-
e
)
*
(
b
-
a
)
*
(
b
-
c
))},
random16
:
function
(){
return
(
65280
*
Math
.
random
()
+
255
*
Math
.
random
())
/
65535
}};
THREE
.
GeometryUtils
.
random
=
THREE
.
GeometryUtils
.
random16
;
THREE
.
GeometryUtils
.
__v1
=
new
THREE
.
Vector3
;
m
[
g
]
=
l
}
e
=
[];
f
=
{};
for
(
g
=
0
;
g
<
b
;
g
++
)
k
=
THREE
.
GeometryUtils
.
random
()
*
l
,
k
=
c
(
k
),
e
[
g
]
=
THREE
.
GeometryUtils
.
randomPointInFace
(
h
[
k
],
a
,
!
0
),
f
[
k
]?
f
[
k
]
+=
1
:
f
[
k
]
=
1
;
return
e
},
triangleArea
:
function
(
a
,
b
,
c
){
var
e
,
g
=
THREE
.
GeometryUtils
.
__v1
;
g
.
sub
(
a
,
b
);
e
=
g
.
length
();
g
.
sub
(
a
,
c
);
a
=
g
.
length
();
g
.
sub
(
b
,
c
);
c
=
g
.
length
();
b
=
0.5
*
(
e
+
a
+
c
);
return
Math
.
sqrt
(
b
*
(
b
-
e
)
*
(
b
-
a
)
*
(
b
-
c
))},
random16
:
function
(){
return
(
65280
*
Math
.
random
()
+
255
*
Math
.
random
())
/
65535
},
center
:
function
(
a
){
a
.
computeBoundingBox
();
var
b
=
new
THREE
.
Matrix4
;
b
.
setTranslation
(
-
0.5
*
(
a
.
boundingBox
.
x
[
1
]
+
a
.
boundingBox
.
x
[
0
]),
-
0.5
*
(
a
.
boundingBox
.
y
[
1
]
+
a
.
boundingBox
.
y
[
0
]),
-
0.5
*
(
a
.
boundingBox
.
z
[
1
]
+
a
.
boundingBox
.
z
[
0
]));
a
.
applyMatrix
(
b
);
a
.
computeBoundingBox
()}};
THREE
.
GeometryUtils
.
random
=
THREE
.
GeometryUtils
.
random16
;
THREE
.
GeometryUtils
.
__v1
=
new
THREE
.
Vector3
;
THREE
.
ImageUtils
=
{
loadTexture
:
function
(
a
,
b
,
c
){
var
e
=
new
Image
,
g
=
new
THREE
.
Texture
(
e
,
b
);
e
.
onload
=
function
(){
g
.
needsUpdate
=!
0
;
c
&&
c
(
this
)};
e
.
crossOrigin
=
""
;
e
.
src
=
a
;
return
g
},
loadTextureCube
:
function
(
a
,
b
,
c
){
var
e
,
g
=
[],
h
=
new
THREE
.
Texture
(
g
,
b
),
b
=
g
.
loadCount
=
0
;
for
(
e
=
a
.
length
;
b
<
e
;
++
b
)
g
[
b
]
=
new
Image
,
g
[
b
].
onload
=
function
(){
g
.
loadCount
+=
1
;
if
(
g
.
loadCount
==
6
)
h
.
needsUpdate
=!
0
;
c
&&
c
(
this
)},
g
[
b
].
crossOrigin
=
""
,
g
[
b
].
src
=
a
[
b
];
return
h
},
getNormalMap
:
function
(
a
,
b
){
var
c
=
function
(
a
){
var
c
=
Math
.
sqrt
(
a
[
0
]
*
a
[
0
]
+
a
[
1
]
*
a
[
1
]
+
a
[
2
]
*
a
[
2
]);
return
[
a
[
0
]
/
c
,
a
[
1
]
/
c
,
a
[
2
]
/
c
]};
b
|=
1
;
var
e
=
a
.
width
,
g
=
a
.
height
,
h
=
document
.
createElement
(
"
canvas
"
);
h
.
width
=
e
;
h
.
height
=
g
;
var
f
=
h
.
getContext
(
"
2d
"
);
f
.
drawImage
(
a
,
0
,
0
);
for
(
var
k
=
f
.
getImageData
(
0
,
0
,
e
,
g
).
data
,
l
=
f
.
createImageData
(
e
,
g
),
m
=
l
.
data
,
n
=
0
;
n
<
e
;
n
++
)
for
(
var
o
=
1
;
o
<
g
;
o
++
){
var
t
=
o
-
1
<
0
?
g
-
1
:
o
-
1
,
p
=
(
o
+
1
)
%
g
,
x
=
n
-
1
<
0
?
e
-
1
:
n
-
1
,
v
=
(
n
+
1
)
%
e
,
u
=
[],
z
=
[
0
,
0
,
k
[(
o
*
e
+
n
)
*
4
]
/
255
*
b
];
u
.
push
([
-
1
,
0
,
k
[(
o
*
e
+
x
)
*
4
]
/
255
*
b
]);
u
.
push
([
-
1
,
-
1
,
k
[(
t
*
e
+
x
)
*
4
]
/
255
*
b
]);
u
.
push
([
0
,
-
1
,
k
[(
t
*
e
+
n
)
*
4
]
/
255
*
b
]);
u
.
push
([
1
,
-
1
,
k
[(
t
*
e
+
v
)
*
4
]
/
255
*
b
]);
u
.
push
([
1
,
0
,
k
[(
o
*
e
+
v
)
*
4
]
/
255
*
b
]);
u
.
push
([
1
,
1
,
k
[(
p
*
e
+
v
)
*
4
]
/
255
*
b
]);
u
.
push
([
0
,
1
,
k
[(
p
*
e
+
n
)
*
4
]
/
255
*
b
]);
u
.
push
([
-
1
,
1
,
k
[(
p
*
e
+
x
)
*
4
]
/
255
*
b
]);
t
=
[];
x
=
u
.
length
;
for
(
p
=
0
;
p
<
x
;
p
++
){
var
v
=
u
[
p
],
y
=
u
[(
p
+
1
)
%
x
],
v
=
[
v
[
0
]
-
z
[
0
],
v
[
1
]
-
z
[
1
],
v
[
2
]
-
z
[
2
]],
y
=
[
y
[
0
]
-
z
[
0
],
y
[
1
]
-
z
[
1
],
y
[
2
]
-
z
[
2
]];
t
.
push
(
c
([
v
[
1
]
*
y
[
2
]
-
v
[
2
]
*
y
[
1
],
v
[
2
]
*
y
[
0
]
-
v
[
0
]
*
y
[
2
],
v
[
0
]
*
y
[
1
]
-
v
[
1
]
*
y
[
0
]]))}
u
=
[
0
,
0
,
0
];
for
(
p
=
0
;
p
<
t
.
length
;
p
++
)
u
[
0
]
+=
t
[
p
][
0
],
u
[
1
]
+=
t
[
p
][
1
],
u
[
2
]
+=
t
[
p
][
2
];
u
[
0
]
/=
t
.
length
;
u
[
1
]
/=
t
.
length
;
u
[
2
]
/=
t
.
length
;
z
=
(
o
*
e
+
n
)
*
4
;
m
[
z
]
=
(
u
[
0
]
+
1
)
/
2
*
255
|
0
;
m
[
z
+
1
]
=
(
u
[
1
]
+
0.5
)
*
...
...
src/extras/GeometryUtils.js
浏览文件 @
75fb4c73
...
...
@@ -444,8 +444,27 @@ THREE.GeometryUtils = {
return
(
65280
*
Math
.
random
()
+
255
*
Math
.
random
()
)
/
65535
;
},
center
:
function
(
geometry
)
{
geometry
.
computeBoundingBox
();
var
matrix
=
new
THREE
.
Matrix4
();
var
dx
=
-
0.5
*
(
geometry
.
boundingBox
.
x
[
1
]
+
geometry
.
boundingBox
.
x
[
0
]
);
var
dy
=
-
0.5
*
(
geometry
.
boundingBox
.
y
[
1
]
+
geometry
.
boundingBox
.
y
[
0
]
);
var
dz
=
-
0.5
*
(
geometry
.
boundingBox
.
z
[
1
]
+
geometry
.
boundingBox
.
z
[
0
]
);
matrix
.
setTranslation
(
dx
,
dy
,
dz
);
geometry
.
applyMatrix
(
matrix
);
geometry
.
computeBoundingBox
();
}
};
THREE
.
GeometryUtils
.
random
=
THREE
.
GeometryUtils
.
random16
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录