使用经度纬度创建地形(以三.js为单位)
Create terrain using longitude latitude in three.js
我想根据纬度和经度数据在立方体几何图形之上创建一个地形。我有一个对象数组,其中包含使特定坐标变形的纬度、经度和数量。
var geo = new THREE.CubeGeometry( 10, 20, 40, 40, worldWidth, worldDepth);
var worldWidth = 100, worldDepth = 100;
for ( var i = 0; i < worldWidth; i++ ) {
for ( var j = 0; j < worldDepth; j++ ){
for (var k = 0; k < locations.length; k++ ) {
var index = j * worldWidth + i;
var x = worldWidth * (locations[k].lng + 180) / (2 * 180);
var y = worldDepth * (locations[k].lat + 180) / (2 * 180);
var dx = i - x;
var dy = j - y;
var dist = Math.sqrt( dx*dx + dy*dy );
if ( dist < .5 ) {
geo.vertices[index].x += locations[k].count * .05;
}
}
}
}
现在,此代码只是向上推送最接近纬度和经度的每个单独坐标。有没有办法可以平滑每个定位坐标周围的区域,使其看起来像地形而不是尖峰?
美好的一天,在我看来,您希望细分网格,从而"平滑"峰值到谷值的效果。这可以使用修饰符来完成,如以下 Three.js 示例所示:
http://threejs.org/examples/#webgl_geometry_subdivision
现在这里的基本原则是:
1)使用最新版本的三.js
2) 下拉 SubdivisionModifier.js 文件并将其链接到:
<script src="js/modifiers/SubdivisionModifier.js"></script>
3)在初始化期间创建修饰符(使用值,我尝试了3):
var modifier = new THREE.SubdivisionModifier( 3 );
4) 然后在顶点操作之后,在将几何体添加到网格进行渲染之前,应用修改器,如下所示:
geometry.mergeVertices();
geometry.computeCentroids();
geometry.computeFaceNormals();
geometry.computeVertexNormals();
modifier.modify( geometry );
试一试,让我们知道它是如何工作的,我非常渴望自己找出答案。
相关文章:
- 三js黑色材质,透明
- 三js浏览器兼容性
- 以angular.js显示数组
- 三.js - 自 r69 以来如何链接/添加相机灯
- 我是否可以在渲染过程中使用三.js合并每一帧中的几何体
- 三.js:如何将边缘助手与网格匹配
- 三.js - 没有纹理绑定到单元 0 错误
- 如何制作三.js的礼品丝带
- 三.js - 如何获取相机相对于原点的位置
- 三Js 渲染问题
- 更新纹理的正确方法(三.JS)
- 如何使粒子发光三.js
- 控制立方体或其他几何体的每个面,分为三.js
- 三.js轨道控制.js可以改变反Y轴旋转吗?
- 三.JS AngularJS 指令中的对象渲染
- 三.js:如何从Web-worker加载动画.json模型
- 调整相机以显示三.js形状
- 移动摄像机以使所有对象完全适合视锥体 - 三.js
- 使用经度纬度创建地形(以三.js为单位)
- 计算骨骼的矩阵以在三.js中查看对象