--- tags: - CAGE_dev_log - CAGE - rust - bevy - game_dev - mesh --- # CAGE Dev Log - Day 3 ![image](https://hackmd.io/_uploads/SJj8zvXfC.png) (I'm using Bevy 0.13) Today I add the mesh to the curve. ```rust let mut vertices: Vec<Vec3> = Vec::new(); for p in new_curve.iter_positions(1024) { vertices.push(p); } for p in new_curve_r.iter_positions(1024) { vertices.push(p); } // generate indices let mut indices = Vec::new(); for i in 0..1023 { indices.push(i as u32); indices.push((i + 1) as u32); indices.push((i + 1024) as u32); indices.push((i + 1024) as u32); indices.push((i + 1) as u32); indices.push((i + 1025) as u32); } let mut mesh = Mesh::new(TriangleList, RenderAssetUsages::default()); // 法向量,跟光源反射有關。沒設定好會黑黑的。 mesh.insert_attribute( Mesh::ATTRIBUTE_NORMAL, vec![Vec3::new(0., 1., 0.)].repeat((&vertices).len()), ); mesh.insert_attribute(Mesh::ATTRIBUTE_POSITION, vertices); mesh.insert_indices(Indices::U32(indices)); let asset = Color::DARK_GRAY; commands.spawn(PbrBundle { mesh: meshes.add(mesh), material: materials.add(asset), transform: Transform::from_translation(vec3(0., 0.1, 0.)), ..Default::default() }); ``` The first step is to calculate vertices, and then set triangles. The indices are the indices of vertices, indicating the three vertices of triangles. For a real use case, perhaps I could load the 3D model and transform the asset and mesh to fit the curve. ## REF - https://www.reddit.com/r/bevy/comments/17yjlrf/rendering_a_3d_tube_from_a_curve/ - https://pastebin.com/8UvQhhVH