在three.js中勾勒出一个三维对象的轮廓
outline a 3d object in three.js
在许多视频游戏中,我看到一种模式,当你将鼠标悬停在对象上时,它会在对象的2D形式周围显示一个很好的渐变高亮。我设置了一个相当基本的Three.js场景,其中有一个球体
首先,我设置了我的光线投射器变量:
var projector = new THREE.Projector();
var mouse2D = new THREE.Vector2(0, 0);
var mouse3D = new THREE.Vector3(0, 0, 0);
然后我做了一个光线投射功能
document.body.onmousemove = function highlightObject(event) {
mouse3D.x = mouse2D.x = mouse2D.x = (event.clientX / window.innerWidth) * 2 - 1;
mouse3D.y = mouse2D.y = mouse2D.y = -(event.clientY / window.innerHeight) * 2 + 1;
mouse3D.z = 0.5;
projector.unprojectVector(mouse3D, camera);
var raycaster = new THREE.Raycaster(camera.position, mouse3D.sub(camera.position).normalize());
var intersects = raycaster.intersectObject(mesh);
if (intersects.length > 0) {
var obj = intersects[0].object; //the object that was intersected
rotate = false;
} else {
rotate = true;
}
}
这将使我获得他们当前悬停的对象悬停。现在,如何在物体周围绘制轮廓呢?
您需要在编码中使用OutlinePass
。
在init()
函数中创建outlinepass
outlinePass = new THREE.OutlinePass(new THREE.Vector2(window.innerWidth, window.innerHeight), scene, camera);
composer.addPass( outlinePass );
然后设置选定对象的轮廓。
if (intersects.length > 0) {
var obj = intersects[0].object; // the object that was intersected
rotate = false;
outlinePass.selectedObjects = obj;
} else {
rotate = true;
}
看看这个例子:https://threejs.org/examples/?q=out#webgl_postprocessing_outline
相关文章:
- 作为一个二维数组,从ajax接收
- 通过拖动可以更改三维模型对象在Three.js场景中的位置
- 在哪里可以找到可用的开源三维图表
- 如何在three.js中加载指定文件内容而非路径的三维模型
- 创建三维维度数组
- 尝试将一个三.js OBJLoader 放入 HTML 画布中
- 将一个二维数组传递给javascript中的函数
- 如何用javascript创建三维数组我想把数据插入数组中,这有助于我的代码
- 使用三个js加载三维模型示例
- CSS三维旋转;不能在Chrome上使用列布局
- 方向感知三维立方体动画
- Three.js:将三维位置转换为二维屏幕位置
- JavaScript交互式三维对象
- 在线显示三维模型
- Javascript:一个二维数组的字符串
- 在处理中围绕三维球体动态观察
- Chrome动画CSS3三维立方体与悬停状态问题
- 将一个外部二维数组映射到另一个二维数组(javascript)
- 在three.js中勾勒出一个三维对象的轮廓
- 渐进地“;揭示“;Three.js中的一个三维对象--我做得对吗