【发布时间】:2021-08-12 03:03:35
【问题描述】:
我希望通过首先创建随机 50000 个点的 BufferGeometry 来创建点云,然后在获取数据后使用新数据更新这些点。这是我想出的组件
import React from "react";
import { Canvas, extend, useFrame, useThree } from '@react-three/fiber'
import { useRef, useEffect, useState, useMemo, useCallback } from "react";
import axios from 'axios';
function Particles({points}) {
const [positions, colors] = useMemo(() => {
let positions = [],
colors = []
if(points.length == 0){
console.log(positions.length)
console.log("Creating random points")
for (let i = 0; i < 50000; i++) {
positions.push(5 - Math.random() * 10)
positions.push(5 - Math.random() * 10)
positions.push(5 - Math.random() * 10)
colors.push(1)
colors.push(0.5)
colors.push(0.5)
}
}
else{
console.log("Filling in values")
console.log(positions.length)
for (let i = 0; i < points.length; i++) {
positions.push(points[i][0])
positions.push(points[i][1])
positions.push(points[i][2])
colors.push(1)
colors.push(0.5)
colors.push(0.5)
}
}
return [new Float32Array(positions), new Float32Array(colors)]
}, [points])
return (
<points>
<bufferGeometry attach="geometry">
<bufferAttribute attachObject={["attributes", "position"]} count={positions.length / 3} array={positions} itemSize={3} />
<bufferAttribute attachObject={["attributes", "color"]} count={colors.length / 3} array={colors} itemSize={3} />
</bufferGeometry>
<pointsMaterial attach="material" vertexColors size={10} sizeAttenuation={false} />
</points>
)
}
const PointCloudPanel = () => {
const [points, setPoints] = useState([])
axios.post('http://127.0.0.1:8090/get_point_cloud')
.then(res => {
setPoints(res.data)
console.log(points)
})
return (
<div>
<Canvas style={{width: `80%`, height: `1000px`}} margin-left='auto' margin-right='auto' orthographic camera={{ zoom: 60 }} raycaster={{ params: { Points: { threshold: 0.2 } } }}>
<Particles points={points} />
</Canvas>
</div>
)
}
export default PointCloudPanel
此代码没有达到预期的效果,而是继续循环调用 API。获取的数据只是具有 x,y,z 值的列表列表,例如
[[1,2,3],[4,3,6],[3,6,8]].
【问题讨论】:
-
您可以直接覆盖您创建的数组缓冲区,然后调用需要更新,就像在 west 发布的链接中一样。我只有一个改变颜色的例子,但它是一样的:codesandbox.io/s/r3f-points-czhxx
标签: reactjs three.js react-three-fiber