- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
[编辑:参见 this jsfiddle for a live example plus accompanying code ]
我试图使用 three.js 渲染出一些具有突出特征的天体。
遗憾的是,没有提供有关如何使用 threejs 应用球形高度图的示例,但他们确实提供了将高度图应用于平面的示例。
我将上述示例修改为使用 SphereGeometry();
而不是 PlaneGeometry();
显然,球体的几何形状与平面的几何形状截然不同,在渲染结果时,球体显示为一 block 平面纹理。
飞机的高度图代码:
var plane = new THREE.PlaneGeometry( 2000, 2000, quality - 1, quality - 1 );
plane.applyMatrix( new THREE.Matrix4().makeRotationX( - Math.PI / 2 ) );
for ( var i = 0, l = plane.vertices.length; i < l; i ++ ) {
var x = i % quality, y = ~~ ( i / quality );
plane.vertices[ i ].y = data[ ( x * step ) + ( y * step ) * 1024 ] * 2 - 128;
}
现在我猜解决方案相对简单:不是在 for 循环中映射到平面的 2d 坐标,而是必须在 3d 空间中找到球体的表面坐标。不幸的是,我并不是真正的 3d 数学专业人士,所以我在这一点上几乎停滞不前。
应用于球体的高度图示例和所有代码放在this jsfiddle 中.更新了 jsfiddle显示了一个改变的球体,但具有随机数据而不是高度图数据。
我知道您可以扭曲球体的 3d 点以生成这些表面细节,但我想使用高度图来实现。据我所知,这个 JSFiddle - 它会随机改变点以使球体具有岩石外观,但显然看起来不太自然。
编辑:以下是我希望实现的将高度图数据映射到球体所需的逻辑。
为了将数据映射到球体,我们需要将坐标从简单的球坐标系(经度 φ、纬度 θ、半径 r)映射到笛卡尔坐标(x、y、z)。正如在正常的高度映射中,(x, y) 处的数据值被映射到 z,我们将 (φ, θ) 处的值映射到 r。这种转变归结为:
x = r × cos φ × sin θ
y = r × sin φ × sin θ
z = r × cos θ
r = Rdefault + Rscale × d(φ, θ)
参数Rdefault和Rscale可以用来控制球体的大小和上面的高度图。
最佳答案
使用 vector3 移动每个顶点:
var vector = new THREE.Vector3()
vector.set(geometry.vertices[i].x, geometry.vertices[i].y, geometry.vertices[i].z);
vector.setLength(h);
geometry.vertices[i].x = vector.x;
geometry.vertices[i].y = vector.y;
geometry.vertices[i].z = vector.z;
关于javascript - 将高度图应用于 three.js 中的 SphereGeometry,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18363357/
我试图在不使用 SphereGeometry 的情况下绘制一个球体。我正在尝试绘制像纬度和经度这样的球体。这是我的代码: for (var phi = -Math.PI / 2; phi < Math
我想触及 threejs 的 Object3D (THREE.SphereGeometry) 的位置。 我可以从 THREE.Raycaster 获取相交对象,但我真正想要的是图像的 X/Y 坐标,它
我正在使用三个JS来实现像这样的球体上的等距柱状图像。使用maptoglobe.com我想要实现的目标 我得到了什么 我正在使用的代码 this.scene = new THREE.Scene();
我正在尝试在地球上创建尖峰(球体几何)。尽管一切正常,但尖峰与地球仪不一致。我想让尖峰对齐如下图所示的东西。但是我的尖峰没有 lookAt(new THREE.Vector3(0,0,0)) 尽管提到
使用 Three.JS 我有以下球体几何形状: var radius = 1 ; var widthSegments = 12; var heightS
[编辑:参见 this jsfiddle for a live example plus accompanying code ] 我试图使用 three.js 渲染出一些具有突出特征的天体。 遗憾的是
我想优化 three.js 中 sphereGeometry 的渲染,因为它成为我程序中的瓶颈。 javascript程序如下所示: var sphereThree = []; for(var idS
我使用 SphereGeometry 创建了一个简单的 WebGL 3D 全景应用程序, PerspectiveCamera和一个 CanvasTexture .现在,我希望通过在 SphereGeo
我创建了一个球体,并接收到两个向量。我只需要在我的球体表面画一条线来连接这些点。 我觉得这个问题与大圆密切相关,但我不确定我将如何着手实现它。 https://en.wikipedia.org/wik
我是一名优秀的程序员,十分优秀!