three.js - 如何用三个 JS 让直线或曲线发光?
问题描述
我正在寻找一种使线条发光的方法,从而产生如下效果:
这是我正在做的创建我的行:
createLine() {
// Create a curve with the points
var curve = new THREE.CatmullRomCurve3(this.points);
// Get the points
var curvePoints = curve.getPoints(this.pointCount);
// Create the geometry
var curveGeometry = new THREE.BufferGeometry().setFromPoints(curvePoints);
// Create the material
var curveMaterial = new THREE.LineBasicMaterial({
color : 0x00AAFF,
});
// Create the line
var line = new THREE.Line(curveGeometry, curveMaterial);
return line;
}
解决方案
Three.js 不会仅仅通过材质来赋予材质“发光”效果。您需要的是一种称为“bloom”的后处理效果,可以在第一次渲染后添加。请参阅此示例:https ://threejs.org/examples/?q=bloom#webgl_postprocessing_unreal_bloom
该示例基本上执行以下操作:
- 设置效果器。
- 渲染正常场景
- 获取第一次渲染的结果,并为其添加“绽放”效果
- 将结果渲染到屏幕
在该示例的源代码中,魔法发生在第 104 - 115 行,为了清楚起见,这里对其进行了注释:
// Set up an effect composer
composer = new THREE.EffectComposer( renderer );
composer.setSize( window.innerWidth, window.innerHeight );
// Tell composer that first pass is rendering scene to buffer
var renderScene = new THREE.RenderPass( scene, camera );
composer.addPass( renderScene );
// Tell composer that second pass is adding bloom effect
var bloomPass = new THREE.UnrealBloomPass( new THREE.Vector2( window.innerWidth, window.innerHeight ), 1.5, 0.4, 0.85 );
composer.addPass( bloomPass );
// Tells composer that second pass gets rendered to screen
bloomPass.renderToScreen = true;
推荐阅读
- server - Dell R630 服务器的 Openfiler 安装问题
- c++ - 不能从不是原点的其他地方旋转对象
- c# - 在自定义组件中一次只允许一个可编辑字段
- javascript - 如何以编程方式将 JS 包中的特定行/列号映射到其源模块?
- list - Netlogo:如何展平列表列表?
- java - 活动被破坏后服务停止?
- c# - Foreach 对象列表中的组项
- go - 如何通过 http.ServeMux 在 GoLang lang 中使用 swaggo (swagger doc)?
- visual-studio - Visual Studio 2017 Enterprise 的一部分安装在 C 盘上
- python - 通过汉明距离找到最近的子串