所以我被困了一段时间,因为我一直无法根据 mp3 的频率数据动态改变位置几何形状中的顶点形状,我遇到了两个主要问题:
1) mp3 生成的数组的值太多,无法快速渲染出顶点,因此,我正在使用此代码获取频率数据。
var frequencyData = new Uint8Array(analyser.frequencyBinCount);
2) 每次频率数据更改时重新渲染平面都会导致极端的性能问题,以至于它不再渲染出来
我一直在使用单纯形噪声来使顶点变形,并且它确实有效,直到显然我传入频率数据并且一切都中断了,这是我试图用来根据音乐变形平面顶点的代码.
function adjustVertices() {
for (var i = 0; i < 100; i++) {
for (var j = 0; j < 100; j++) {
var ex = 0.5;
pgeom.vertices[i + j * 100].z =
(noise.simplex2(i / 100, j / 100) +
noise.simplex2((i + 500) / 50, j / 50) * Math.pow(ex, frequencyData[2]) +
noise.simplex2((i + 400) / 25, j / 25) * Math.pow(ex, frequencyData[2]) +
noise.simplex2((i + 600) / 12.5, j / 12.5) * Math.pow(ex, frequencyData[2]) +
+(noise.simplex2((i + 800) / 6.25, j / 6.25) * Math.pow(ex, frequencyData[2]))) /
2;
pgeom.verticesNeedUpdate = true;
pgeom.computeVertexNormals();
}
}
}
这是我的平面对象:
var pgeom = new THREE.PlaneGeometry(5, 5, 99, 99);
var plane = THREE.SceneUtils.createMultiMaterialObject(pgeom, [
new THREE.MeshPhongMaterial({
color: 0x33ff33,
specular: 0x773300,
side: THREE.DoubleSide,
shading: THREE.FlatShading,
shininess: 3,
}),
]);
scene.add(plane);
我非常感谢您的帮助,我正在尽我所能掌握三个.js :)