three.js - threejs - 为一条线创建 3d 透视图
问题描述
我正在开发一个应用程序,我在其中以 3d 透视图可视化 ATV 轨迹(NAIP 图像覆盖在高程数据上)。我正在为渲染引擎使用three.js。
在上图中,您看到的白线只是一个 THREE.Line 实例,我在其中将 trails gps 坐标转换为 threejs 坐标。我想在这条线上添加更多的 3d 透视图。我尝试实现一个 THREE.TubeGeometry,其中路径是 THREE.CatmullRomCurve3,使用与我在上图中构建线的方式相同的 Vector3 点。这并没有产生理想的结果......
从我看过的很多很多三个例子中,我真的认为挤压几何可以实现我所追求的外观......但我一生都无法弄清楚如何为线条挤压几何。有什么建议/想法吗?
更新 1: 这是我想要的外观(相同的轨迹 - 没有图像)。此图像是使用 Q2Threejs 插件在 QGIS 中生成的
更新2: 这是我尝试创建管几何的代码。也许我在那里搞砸了一些东西......
// trailVectors are an array of Vector3 - same as ones used to create line
var trailCurve = new THREE.CatmullRomCurve3(trailVectors);
var tubeGeometry = new THREE.TubeGeometry(trailCurve,80,1,15,false);
var material = new THREE.MeshBasicMaterial({color:0x00ff00});
var tubeMesh = new THREE.Mesh(tubeGeometry,material);
var wireframeMaterial = new THREE.LineBasicMaterial({color:0xffffff,lineWidth:2});
var wireframe = new THREE.Mesh(tubeGeometry,wireframeMaterial);
tubeMesh.add(wireframe);
scene.add(tubeMesh);
更新 3 THREE.TubeGeometry(trailCurve,80,4,2,false) 每个 mzartman 请求
解决方案
我认为您应该能够使用 TubeGeometry 实现您想要的。我认为最重要的是您的示例(如图所示)有超过 2 个半径段。这使它成为管状形状,使它看起来有点像一团。如果您将径向段数设置为 2(如下所示),那么我认为它看起来会好很多。
tubeGeometry = new THREE.TubeBufferGeometry(
[YOUR_PATH_HERE],
params.extrusionSegments, // <--- Edit this for higher resolution on the spline
3, // <--- This defines the height
2, // <--- This 2 keeps 2D (i.e. not a tube!!!!)
true );
var mesh = new THREE.Mesh( geometry, material );
var wireframe = new THREE.Mesh( geometry, wireframeMaterial );
mesh.add( wireframe );
scene.add( mesh );
更新:
我认为使用像 MeshPhong 这样显示一些阴影的材料可能会做得更好。此外,要制作线框,您希望将其添加为材质初始化中的选项。给它一个展示以下内容:
var tubeGeometry = new THREE.TubeGeometry(curve,80,1,2,false);
var material = new THREE.MeshPhongMaterial({color:0x00ff00, wireframe: true});
var tubeMesh = new THREE.Mesh(tubeGeometry,material);
scene.add(tubeMesh);
推荐阅读
- python-3.x - 将十进制 (ASCII) 数字转换为 128 位二进制 (hex) 值
- apache - 让 Apache 允许通过 HTTPS 访问 Express API
- r - 使用 dplyr 函数进行管道时使用方括号进行子集化
- react-native - Redux 不使用异步方法更新 componentDidMount 中的 this.props
- javascript - 如果未选择文件,则不会调用 OnSubmit
- nginx - NGINX:如何在反向代理中添加查询字符串?
- c# - 使用 selenium webdriver 时新窗口上的登录页面
- python-3.6 - 无法打开与 FTD 232 设备的连接
- date - 如何根据用户的抖动时间显示早安、下午或晚上等问候
- html - 水平显示项目而不是列