gitee 地址

gitee地址: gittee地址

本篇目标

  • 结合dat.gui实现界面可视化修改及调试

下载 dat.gui

1
pnpm i dat.gui

引入及创建

引入

1
import * as Dat from "dat.gui";

创建

1
2
/// 创建 dat
const dat = new Dat.GUI();

使用

这里我是装在一个函数里的,但不影响

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/// 添加菜单
function addMenuItem () {
// x 轴坐标
dat
.add(cube.position, 'x')
.max(10)
.min(0)
.step(0.01)
.name('移动x轴')
.onChange(value => {
console.log('我是当前正在移动的x轴', value);
})
.onFinishChange(value => {
console.log('我是当前移动结束的x轴', value);
})
}


// 添加菜单
addMenuItem ()

效果图

image.png

这样我们设置和退出画布全屏的这个功能就做好了。

完整代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127

import * as THREE from "three"

// 目标:使用 dat.gui 进行 可视化调试
import * as Dat from "dat.gui";


/// 创建场景

const scene = new THREE.Scene()

/// 创建 dat
const dat = new Dat.GUI();


/// 创建相机

/*
PerspectiveCamera( fov : Number, aspect : Number, near : Number, far : Number )
fov — 摄像机视锥体垂直视野角度
aspect — 摄像机视锥体长宽比
near — 摄像机视锥体近端面
far — 摄像机视锥体远端面
*/

/// 透视相机
const camera = new THREE.PerspectiveCamera(
75, // 摄像机视锥体垂直视野角度,从视图的底部到顶部,以角度来表示。默认值是50。
window.innerWidth / window.innerHeight, // 摄像机视锥体的长宽比,通常是使用画布的宽/画布的高。默认值是1(正方形画布)。
0.1, // 摄像机的近端面,默认值是0.1。
1000 // 摄像机的远端面,默认值 2000
)

/// 创建渲染器
const renderer = new THREE.WebGLRenderer();

/// 设置大小
renderer.setSize(
1000, // 宽度
500 // 高度
);
/// 挂载到页面
document.body.appendChild(renderer.domElement)






/// 添加物体

/*
width:立方体x轴的长度,
height:立方体y轴的长度,
depth:立方体z轴的长度也是深度
*/
let geometry = new THREE.BoxGeometry(10, 10, 10);



/// 添加材质
// const material = new THREE.MeshBasicMaterial({ color: 0xffff0000 });

/// 添加材质
const materials = []

for(let i = 0; i < 6; i++){
materials.push(new THREE.MeshBasicMaterial({ color: Math.random() * 0x00ff0000 }))
}



/// 添加网格
const cube = new THREE.Mesh( geometry, materials );
scene.add( cube );


// 设置相机位置
camera.position.z = 50;

// 修改场景背景颜色
scene.background = new THREE.Color(0xffffcc99)


/// 添加 三色坐标轴
const axesHelper = new THREE.AxesHelper(20)
scene.add( axesHelper )


/// 渲染
function animate() {

// 使用 requestAnimationFrame 执行动画
requestAnimationFrame(animate)

// 修改其旋转的度数,让其每次渲染增加0.01的弧段进行渲染
cube.rotation.x += 0.01;
cube.rotation.y += 0.01;

//scene:前面定义的场景,camera:前面定义的相机
//renderTarget:渲染的目标默认是是渲染到前面定义的render变量中
//forceClear:每次绘制之前都将画布的内容给清除,即使自动清除标志autoClear为false,也会清除
renderer.render(scene, camera)
}

/// 添加菜单
function addMenuItem () {
// x 轴坐标
dat
.add(cube.position, 'x')
.max(10)
.min(0)
.step(0.01)
.name('移动x轴')
.onChange(value => {
console.log('我是当前正在移动的x轴', value);
})
.onFinishChange(value => {
console.log('我是当前移动结束的x轴', value);
})
}

// 渲染
animate()

// 添加菜单
addMenuItem ()

下期预告

根据 BufferGeometry 设置的顶点创建几何矩形

所有操作实现案例均以上传gitee,地址在文章开篇处。