<
/
style
>
<
!
--
引入three
.
js三维引擎
--
>
<
script src
=
"http://www.yanhuangxueyuan.com/threejs/build/three.js"
>
<
/
script
>
<
script src
=
"http://www.yanhuangxueyuan.com/threejs/examples/js/controls/OrbitControls.js"
>
<
/
script
>
<
script src
=
"http://www.yanhuangxueyuan.com/threejs/build/three.min.js"
>
<
/
script
>
<
!
--
<
script src
=
"http://www.yanhuangxueyuan.com/threejs/examples/js/loaders/STLLoader.js"
>
<
/
script
>
<
script src
=
"http://www.yanhuangxueyuan.com/threejs/examples/js/loaders/STLLoader.js"
>
<
/
script
>
<
script src
=
"http://www.yanhuangxueyuan.com/threejs/examples/js/loaders/STLLoader.js"
>
<
/
script
>
--
>
<
!
--
<
script src
=
"./three.js"
>
<
/
script
>
--
>
<
!
--
<
script src
=
"http://www.yanhuangxueyuan.com/threejs/build/three.js"
>
<
/
script
>
--
>
<
/
head
>
<
script
>
* 创建场景对象Scene
var
scene
=
new
THREE
.
Scene
(
)
;
* 创建网格模型
var
geometry
=
new
THREE
.
Geometry
(
)
;
var
p1
=
new
THREE
.
Vector3
(
0
,
0
,
0
)
;
var
p2
=
new
THREE
.
Vector3
(
0
,
100
,
0
)
;
var
p3
=
new
THREE
.
Vector3
(
50
,
0
,
0
)
;
var
p4
=
new
THREE
.
Vector3
(
0
,
0
,
100
)
;
geometry
.
vertices
.
push
(
p1
,
p2
,
p3
,
p4
)
;
var
face1
=
new
THREE
.
Face3
(
0
,
1
,
2
)
;
var
face2
=
new
THREE
.
Face3
(
0
,
2
,
3
)
;
var
face3
=
new
THREE
.
Face3
(
0
,
1
,
3
)
;
var
n1
=
new
THREE
.
Vector3
(
0
,
0
,
-
1
)
;
var
n2
=
new
THREE
.
Vector3
(
0
,
0
,
-
1
)
;
var
n3
=
new
THREE
.
Vector3
(
0
,
0
,
-
1
)
;
face1
.
vertexNormals
.
push
(
n1
,
n2
,
n3
)
;
face2
.
normal
=
new
THREE
.
Vector3
(
0
,
-
1
,
0
)
;
face3
.
normal
=
new
THREE
.
Vector3
(
0
,
0
,
-
1
)
;
<
!
--
face1
.
color
=
new
THREE
.
Color
(
0xffff00
)
;
--
>
<
!
--
face2
.
color
=
new
THREE
.
Color
(
0xff00ff
)
;
face3
.
color
=
new
THREE
.
Color
(
0xfff0ff
)
;
face1
.
vertexColors
=
[
new
THREE
.
Color
(
0xffff00
)
,
new
THREE
.
Color
(
0xff00ff
)
,
new
THREE
.
Color
(
0x00ffff
)
,
geometry
.
faces
.
push
(
face1
,
face2
,
face3
)
;
var
material
=
new
THREE
.
MeshLambertMaterial
(
{
vertexColors
:
THREE
.
VertexColors
,
side
:
THREE
.
DoubleSide
,
}
)
;
var
mesh
=
new
THREE
.
Mesh
(
geometry
,
material
)
;
scene
.
add
(
mesh
)
;
<
!
--
var
material
=
new
THREE
.
PointsMaterial
(
{
--
>
<
!
--
color
:
0xff0000
,
--
>
<
!
--
size
:
10.0
<
!
--
}
)
;
<
!
--
var
points
=
new
THREE
.
Points
(
geometry
,
material
)
;
<
!
--
scene
.
add
(
points
)
;
<
!
--
var
material
=
new
THREE
.
LineBasicMaterial
(
{
--
>
<
!
--
color
:
0xff0000
<
!
--
}
)
;
<
!
--
var
line
=
new
THREE
.
Line
(
geometry
,
material
)
;
<
!
--
scene
.
add
(
line
)
;
var
geometry
=
new
THREE
.
BoxGeometry
(
100
,
100
,
100
)
;
console
.
log
(
geometry
)
;
console
.
log
(
'几何体顶点位置数据'
,
geometry
.
vertices
)
;
console
.
log
(
'三角行面数据'
,
geometry
.
faces
)
;
var
geometrybox
=
new
THREE
.
BoxGeometry
(
20
,
200
,
100
)
;
geometrybox
.
faces
.
forEach
(
face
=
>
{
face
.
vertexColors
=
[
new
THREE
.
Color
(
0xffff00
)
,
new
THREE
.
Color
(
0xff00ff
)
,
new
THREE
.
Color
(
0x00ffff
)
,
}
)
;
var
materialbox
=
new
THREE
.
MeshBasicMaterial
(
{
vertexColors
:
THREE
.
FaceColors
,
}
)
;
<
!
--
var
geometry
=
new
THREE
.
BoxGeometry
(
100
,
100
,
100
)
;
<
!
--
geometry
.
faces
.
pop
(
)
;
--
>
<
!
--
geometry
.
faces
.
pop
(
)
;
--
>
<
!
--
geometry
.
faces
.
shift
(
)
;
--
>
<
!
--
geometry
.
faces
.
shift
(
)
;
--
>
<
!
--
var
material
=
new
THREE
.
MeshLambertMaterial
(
{
--
>
<
!
--
color
:
0x0000ff
,
--
>
<
!
--
side
:
THREE
.
DoubleSide
,
<
!
--
}
)
;
<
!
--
var
geometry
=
new
THREE
.
BoxGeometry
(
100
,
100
,
100
)
;
geometrybox
.
scale
(
2
,
2
,
2
)
;
geometrybox
.
translate
(
50
,
0
,
0
)
;
geometrybox
.
rotateX
(
Math
.
PI
/
4
)
;
geometrybox
.
center
(
)
;
console
.
log
(
geometrybox
.
vertices
)
;
var
mesh2
=
new
THREE
.
Mesh
(
geometrybox
,
materialbox
)
;
scene
.
add
(
mesh2
)
;
* 光源设置
var
point
=
new
THREE
.
PointLight
(
0xffffff
)
;
point
.
position
.
set
(
400
,
200
,
300
)
;
scene
.
add
(
point
)
;
var
ambient
=
new
THREE
.
AmbientLight
(
0x444444
)
;
scene
.
add
(
ambient
)
;
* 相机设置
var
width
=
window
.
innerWidth
;
var
height
=
window
.
innerHeight
;
var
k
=
width
/
height
;
var
s
=
200
;
var
camera
=
new
THREE
.
OrthographicCamera
(
-
s
*
k
,
s
*
k
,
s
,
-
s
,
1
,
1000
)
;
camera
.
position
.
set
(
200
,
300
,
200
)
;
camera
.
lookAt
(
scene
.
position
)
;
* 创建渲染器对象
var
renderer
=
new
THREE
.
WebGLRenderer
(
)
;
renderer
.
setSize
(
width
,
height
)
;
renderer
.
setClearColor
(
0xb9d3ff
,
1
)
;
document
.
body
.
appendChild
(
renderer
.
domElement
)
;
renderer
.
render
(
scene
,
camera
)
;
x轴
渐变
从圆点向右,由0到1,越来越不透明,vPosition.x的-1到0的部分,透明度按0处理。[-1,0]的部分相乘的结果和[0,1]相乘的结果是一样的,会得到对称的从两边到中间越来越透明,x*x得到x镜像叠加x*x==-x*-x;x相加,透明度超过1的,按1处理,所以范围只有x的一半。[0,1]透明度由0到1,超过1的透明度都按1处理。x+y的基础上范围缩小,透明度超过1的,按1处理。x*y的基础上范围缩小,透明度超过1的,按1处理。.................................
着色器材质可以自定义几何体面的
颜色
。进一步学习后就会知道,
thre
e.js就是对GLSL语言进行了多方面的封装,下面我们就使用着色器语言来绘制一个正方体。
绘制一个有着色器材质的几何体
<!DOCTYPE html>
<html lang="en">
<meta charset="UTF-8" />
<title>学习</title>
</head>
THRE
E.js仅提供了创建粒子系统的基础,但是要真正拥有有效的粒子,需要大量的工作。 这就是这个库的目的。
那里有
THRE
E.js的许多替代方案和更强大的粒子系统,但是在编写这些行(2019年12月15日)时,我发现这些行都没有适用于最新的三个版本(r111)。
要开始使用Partykals, dist/partykals.js在HTML页面中包含脚本dist/partykals.js ,或通过NPM导入:
npm install partykals
Partykals将尝试在全局空间(在window对象下)或使用require('
thre
e')查找
THRE
E.js。 这些选项之一必须可用才能正常工作。
与“导入”一起使用
要与“导入”一起使用,请参见此处的讨论:
Thre
e.js访问几何体
顶点
数据
本文是
Thre
e.js电子书的2.7节
实际开发项目的时候,可能会加载外部模型,有些时候需要获取模型几何体的
顶点
数据,如果想获取几何体的
顶点
数据首先要熟悉
thre
e.js几何体的结构。
访问几何体
顶点
数据其实很简单,刚开始学习不用刻意记忆,直接查看
thre
ejs
文档,就像访问javascript对象的属性一样。
测试BoxGeometry
调用BoxGeomet...