这里测试
效果
这个网站上面有一些threejs的例子,我今天尝试的这个其实是在这个基础上改进的。
我添加了一个GUI可以修改文字,修改颜色,修改字体大小,并且让画布可以自适应屏幕大小和双击进入全屏。
事先说明,本人目前前端知识接近于0,本次只是对WebGL的一次好奇的尝试
更改文字等
这个例子中的文字是通过THREE.TextGeometry
创建的。
javascript
1 | var geometry = new THREE.TextGeometry(text, params); |
但遗憾的是,想要在threeJS中动态的更改TextGeometry的文字是不可行的 [1]。
必须得删除然后添加新的文本网络。这有一个巨大的性能损失,但不幸的是现在就是这样。
例如:
javascript
1 | //Group to hold mesh |
这个例子中,文字和扩散的那个特效是两个东西,如果只是删掉文字,特效也是不会消失的。
这里有个坑,我也不懂为什么,就是 添加的这个最好是在一个外部的函数中。
javascript
1 | function init() { |
- init():
- 初始化设置 gui 里的参数
- textAnim_g 添加
- root.gui.add… GUI ,当里面数值更改后,会调用 reset_g() 函数
- reset_g() 主要是 从scene中移除 textAnimation
- textAnim_g:
- createTextAnimation
- 向scene中add新的textAnimation
GUI
首先需要配置GUI里有哪些参数:
javascript
1 | let gui_params = { |
文字(默认表现为输入框)后面的 onFinishChange
表示改变后执行里面的函数(这里可能有些多余了,可能不需要function了)
javascript
1 | root.gui.add(gui_params, 'text_a').name('文本(不支持中文)').onFinishChange(function() {reset_g();}) |
字体大小(是可以调节的块)
javascript
1 | root.gui.add(gui_params, 'size_g', 10,150,1).name('字的大小').onFinishChange(function() {reset_g();}) |
颜色控制搞了一个折叠的
javascript
1 | var folder1 = root.gui.addFolder('颜色控制'); |
颜色这个就不加事件检测了,onFinishChange
加了没有用,onChange
加了对于这个例子会变的卡,我也解决不了,所以办法是添加一个充值颜色的按钮,里面的函数是 reset_g
自适应屏幕大小、全屏
javascript
1 | function THREERoot(params) { |
当窗口变小时候自动关闭GUI
javascript
1 | this.gui = new dat.GUI |
url 传入参数
javascript
1 | let searchContent = decodeURIComponent(window.location.href); |
改控制器文本
javascript
1 | dat.GUI.TEXT_CLOSED = "关闭控制器" |
想法
这个网站上还有很多例子,可以都玩一玩,他这个是可以在线改的

image-20221029223912528
右边的代码的话,想复制在HTML中,模板如下
html
1 |
|
就是在body中添加 外链的JS代码,网站的JS代码复制到 js/test.js
这个文件中,CSS 短的话就head中写一写。
外链的JS代码,可以在左下角那个 文件里面看
这里面就是
但是有个坑是,这种链接(开头没有https的)最好是在浏览器中粘贴一下再复制
官方上面也有教程