Velvet Star Monitor

Standout celebrity highlights with iconic style.

general

How do you create Points using Three JS and React-Three-Fibre

Writer Matthew Barrera

I am using React, Three JS, and React-Three-Fibre

I want to create an array of 100 Points with random colors, position and sizes. I am confused with how to go about it, I would like to accomplish it by pre defining buffer arrays, then in some loop each point will be assigned color, position and size from the buffers.

// Buffers let positionsBuffer = new Float32Array([[0, 0, 0], [3, 3, 3], [6, 6, 6]] ) let colorsBuffer = new Float32Array([[92, 123, 23], [123, 12, 233], [23, 98, 198]]) let sizesBuffer = new Float32Array([[1], [2], [3]])
return ( <mesh position={[position_x, position_y, position_z]} ref={ref} scale={clicked ? 1.5 : 1} onClick={() => setClicked(!clicked)} onPointerOver={() => setHovered(true)} onPointerOut={() => setHovered(false)} > <Points positions={positionsBuffer} colors={colorsBuffer} sizes={sizesBuffer}> <pointsMaterial /> </Points> </mesh> )

If for every buffer I just have 1 item let positionsBuffer = new Float32Array([3, 3, 3]) I will be able to place a point. If the buffer arrays contain multiple items, how do I go about rendering a point for every item in the buffer arrays?

1 Answer

I can give you my example, hopefully, it will help.

const particlesCount = 100;
const particlePositions = new Float32Array(particlesCount * 3);
for (let i = 0; i < particlesCount; i++) { const i3 = i * 3; particlePositions[i3] = Math.random(); particlePositions[i3 + 1] = Math.random(); particlePositions[i3 + 2] = Math.random();
}
export const Particles = () => { return ( <points> <bufferGeometry> <bufferAttribute attach='attributes-position' count={particlesCount} itemSize={3} array={particlePositions} /> </bufferGeometry> <pointsMaterial size={0.04} color={colors.materialColor} transparent /> </points> );
};

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.