当前位置: 首页 > news >正文

团购营销型网站制作中国电力建设集团公司网站

团购营销型网站制作,中国电力建设集团公司网站,柳传志 潘石屹做水果网站,筹建网站信息技术目录 说在前面问题提出Rapier具体实现参考 说在前面 操作系统#xff1a;win11rust版本#xff1a;rustc 1.77.0-nightlybevy版本#xff1a;0.12github#xff1a;这里 问题提出 在three.js中#xff0c;可以通过使用ConvexGeometry从给定的三维点集合生成凸包(Convex Hu… 目录 说在前面问题提出Rapier具体实现参考 说在前面 操作系统win11rust版本rustc 1.77.0-nightlybevy版本0.12github这里 问题提出 在three.js中可以通过使用ConvexGeometry从给定的三维点集合生成凸包(Convex Hull) import { ConvexGeometry } from three/addons/geometries/ConvexGeometry.js;例如 const geometry new ConvexGeometry( points ); const material new THREE.MeshBasicMaterial( { color: 0x00ff00 } ); const mesh new THREE.Mesh( geometry, material ); scene.add( mesh );但是在bevy中如何实现呢 Rapier 在当前bevy的版本中并没有类似的实现目前支持的shape也比three.js少 BoxCapsuleCircleCubeCylinderIcospherePlaneQuadRegularPolygonTorusUVSphere 所以如果要构造ConvexHull只能借助第三方库或者自己实现可以参考three.js实现这里我们借助一个物理库rapier来实现关于rapier 这里 具体实现 首先我们通过点集构造ConvexHullrapier可以直接完成这一步 let collider Collider::convex_hull(points);但是该方法构造的是一个Collider实际上是无法直接当成Mesh使用的 然后我们将其转换成ConvexPolyhedron let convex c.as_convex_polyhedron().unwrap();该结构中包含一个凸包的所有属性例如点、边、面等事实上它提供了一个方法能够直接转换成TriangleMesh所需要的数据 impl ConvexPolyhedron {/// Discretize the boundary of this convex polyhedron as a triangle-mesh.pub fn to_trimesh(self) - (VecPoint3Real, Vec[u32; 3]) {let mut indices Vec::new();for face in self.faces() {let i1 face.first_vertex_or_edge;let i2 i1 face.num_vertices_or_edges;let first_id self.vertices_adj_to_face()[i1 as usize] as u32;for idx in self.vertices_adj_to_face()[i1 as usize 1..i2 as usize].windows(2) {indices.push([first_id, idx[0] as u32, idx[1] as u32]);}}(self.points().to_vec(), indices)} }但是不包含normal数据导致光照对其没有作用 所以我们需要自己实现一个相似的方法首先我们来看看测试数据实际上它有20个点共12个面每个面是一个正五边形所以使用TriangleMesh来表达的话一共是36个三角形 再让我们来看看bevy中构造一个TriangleMesh需要哪些数据 fn create_simple_parallelogram() - Mesh {// Create a new mesh using a triangle list topology, where each set of 3 vertices composes a triangle.Mesh::new(PrimitiveTopology::TriangleList)// 顶点数据.with_inserted_attribute(Mesh::ATTRIBUTE_POSITION,vec![[0.0, 0.0, 0.0], [1.0, 2.0, 0.0], [2.0, 2.0, 0.0], [1.0, 0.0, 0.0]])// uv数据 在本文中我们并不需要.with_inserted_attribute(Mesh::ATTRIBUTE_UV_0,vec![[0.0, 1.0], [0.5, 0.0], [1.0, 0.0], [0.5, 1.0]])// 法线.with_inserted_attribute(Mesh::ATTRIBUTE_NORMAL,vec![[0.0, 0.0, 1.0], [0.0, 0.0, 1.0], [0.0, 0.0, 1.0], [0.0, 0.0, 1.0]])// 三角形的顶点索引.with_indices(Some(Indices::U32(vec![0, 3, 1,1, 3, 2]))) }对比我们需要的数据以及to_trimesh方法发现我们少了normal数据不过这个数据在face中就有那么所有条件就具备了 完整代码 let plist: Vecf32 vec![0., 3.568220853805542, 9.341723442077637, 5.773502826690674, 5.773502826690674, 5.773502826690674, -5.773502826690674, 5.773502826690674, 5.773502826690674, 3.568220853805542, 9.341723442077637, 0., -3.568220853805542, 9.341723442077637, 0., 9.341723442077637, 0., 3.568220853805542, 9.341723442077637, 0., -3.568220853805542, 5.773502826690674, 5.773502826690674, -5.773502826690674, 5.773502826690674, -5.773502826690674, -5.773502826690674, 0., -3.568220853805542, -9.341723442077637, 0., 3.568220853805542, -9.341723442077637, -5.773502826690674, -5.773502826690674, -5.773502826690674, -9.341723442077637, 0., -3.568220853805542, -5.773502826690674, 5.773502826690674, -5.773502826690674, -3.568220853805542, -9.341723442077637, 0., -5.773502826690674, -5.773502826690674, 5.773502826690674, -9.341723442077637, 0., 3.568220853805542, 0., -3.568220853805542, 9.341723442077637, 3.568220853805542, -9.341723442077637, 0., 5.773502826690674, -5.773502826690674, 5.773502826690674]; let points: VecVec3 plist.array_chunks().into_iter().map(|v: [f32; 3]| Vec3::from_array(v)).collect(); // 通过点集构造convex hull let collider Collider::convex_hull(points); if let Some(c) collider {let convex c.as_convex_polyhedron().unwrap();// 取convex hull的所有面let faces convex.raw.faces();// 取点集let points convex.raw.points();// 取映射关系let face_to_vertices convex.raw.vertices_adj_to_face();let mut positions Vec::new();// 法向量 用于处理光照let mut normals Vec::new();let mut indices Vec::new();// 遍历所有的面for face in faces {let i1 face.first_vertex_or_edge;let i2 i1 face.num_vertices_or_edges;for idx in i1..i2 {let point points[face_to_vertices[idx as usize] as usize];// 重新构造点集 points是原始点集positions.push([point.x, point.y, point.z]);// 面上的所有点的朝向与面相同normals.push([face.normal.x, face.normal.y, face.normal.z]);}for idx in i1 1..i2 - 1 {// 构造顶点索引indices.push([i1, idx as u32, idx 1 as u32]);}}// 构造Meshlet mesh Mesh::new(PrimitiveTopology::TriangleList).with_inserted_attribute(Mesh::ATTRIBUTE_POSITION, positions).with_inserted_attribute(Mesh::ATTRIBUTE_NORMAL, normals).with_indices(Some(Indices::U32(indices.concat())));commands.spawn(PbrBundle {mesh: meshes.add(mesh),material: materials.add(Color::rgb_u8(124, 144, 255).into()),transform: Transform::from_xyz(0.0, 1., 0.0).with_scale(Vec3::new(0.1, 0.1, 0.1)),..default()}); }结果(gif) 参考 ConvexGeometry
http://www.w-s-a.com/news/104716/

相关文章:

  • 网站后台如何登陆网站开发需求逻辑图
  • 市级档案网站建设情况分析server2008做DNS与网站
  • 公积金门户网站建设方案网站建设代理平台怎么做
  • 网站建设知识论文抖音开放平台是干什么的
  • 网站建设期末试卷大气简洁网站
  • 电子商务网站建设报告范文单位做网站怎么做
  • 优质的外国网站qq小程序在哪里打开
  • 商务网站建设与推广实训报告免费素材网站无水印
  • 外贸站seoapp开发公司历程概述
  • 沈阳网站推广¥做下拉去118cr陶瓷企业 瓷砖地板公司网站建设
  • 医院网站官方微信精神文明建设我做服装设计师的 求推荐资源网站
  • 微信网站建设需要那些资料昆明cms模板建站
  • 安庆网站建设兼职中企动力是500强吗
  • 网站排名优化技巧基于网站的网络营销方法有哪些
  • 摄影素材网站做知识问答的网站
  • 中小企业网站建设济南兴田德润电话门店管理系统软件排行
  • 昆明工程建设信息网站柳州网站建设公司哪家好
  • 如何分析网站关键词北京门户网站网址
  • 做网站与做游戏那个好网站域名怎么起
  • 有没有做cad单的网站银行网站建设方案视频
  • 和各大网站做视频的工作高校网站群管理系统
  • 中国建设人才服务信息网是正规网站怎么注销自己名下的公司
  • 网站开发新型技术那些网站做任务领q币
  • 海口手机网站建设wordpress微支付宝
  • 做公司网站需要几天深圳自定义网站开发
  • 做网站学多长时间可以学会推广软件公司
  • 网络网站设计培训长沙建站模板大全
  • 站群搭建移动端处理器天梯图
  • 岳池发展建设集团有限公司门户网站湛江seo咨询
  • 手机网站工具关键词排名是什么意思