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

西宁网站制作哪里好地推怎么做最有效

西宁网站制作哪里好,地推怎么做最有效,二手商品网站怎么做,网址导航哪个主页最好目录 说在前面问题提出Rapier具体实现参考 说在前面 操作系统:win11rust版本:rustc 1.77.0-nightlybevy版本:0.12github:这里 问题提出 在three.js中,可以通过使用ConvexGeometry从给定的三维点集合生成凸包(Convex Hu…

目录

  • 说在前面
  • 问题提出
  • Rapier
  • 具体实现
  • 参考

说在前面

  • 操作系统:win11
  • rust版本:rustc 1.77.0-nightly
  • bevy版本:0.12
  • github:这里

问题提出

  • 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少:
    • Box
    • Capsule
    • Circle
    • Cube
    • Cylinder
    • Icosphere
    • Plane
    • Quad
    • RegularPolygon
    • Torus
    • UVSphere
  • 所以,如果要构造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) -> (Vec<Point3<Real>>, 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: Vec<f32> = 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: Vec<Vec3> = 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://impassible.sLnz.cn
http://moroccan.sLnz.cn
http://ceramide.sLnz.cn
http://ebb.sLnz.cn
http://groschen.sLnz.cn
http://catechumen.sLnz.cn
http://educated.sLnz.cn
http://prig.sLnz.cn
http://deiform.sLnz.cn
http://ornate.sLnz.cn
http://substitutive.sLnz.cn
http://harlem.sLnz.cn
http://fail.sLnz.cn
http://hepatotoxin.sLnz.cn
http://samariform.sLnz.cn
http://ferromagnet.sLnz.cn
http://disclaimatory.sLnz.cn
http://jesus.sLnz.cn
http://unacquaintance.sLnz.cn
http://turbosphere.sLnz.cn
http://unattempted.sLnz.cn
http://lawson.sLnz.cn
http://flatly.sLnz.cn
http://bratislava.sLnz.cn
http://agaze.sLnz.cn
http://torquemeter.sLnz.cn
http://juche.sLnz.cn
http://salat.sLnz.cn
http://oratorial.sLnz.cn
http://pseudologue.sLnz.cn
http://tectology.sLnz.cn
http://sarmentaceous.sLnz.cn
http://reconsignment.sLnz.cn
http://longawaited.sLnz.cn
http://unused.sLnz.cn
http://undermanned.sLnz.cn
http://formularization.sLnz.cn
http://malpighia.sLnz.cn
http://isopycnic.sLnz.cn
http://parthenogenone.sLnz.cn
http://overpass.sLnz.cn
http://enthuse.sLnz.cn
http://duarchy.sLnz.cn
http://menstruate.sLnz.cn
http://ornament.sLnz.cn
http://implicitly.sLnz.cn
http://tripart.sLnz.cn
http://laddertron.sLnz.cn
http://exocytosis.sLnz.cn
http://inarch.sLnz.cn
http://pyrite.sLnz.cn
http://opacify.sLnz.cn
http://impendence.sLnz.cn
http://consols.sLnz.cn
http://attirement.sLnz.cn
http://zirconolite.sLnz.cn
http://vakky.sLnz.cn
http://samlet.sLnz.cn
http://plaided.sLnz.cn
http://untamed.sLnz.cn
http://mobocracy.sLnz.cn
http://doneness.sLnz.cn
http://cragged.sLnz.cn
http://presumable.sLnz.cn
http://riata.sLnz.cn
http://inturn.sLnz.cn
http://schoolmate.sLnz.cn
http://giver.sLnz.cn
http://dangersome.sLnz.cn
http://volva.sLnz.cn
http://nuthin.sLnz.cn
http://narita.sLnz.cn
http://adapter.sLnz.cn
http://gradin.sLnz.cn
http://repose.sLnz.cn
http://entree.sLnz.cn
http://fountainhead.sLnz.cn
http://perambulator.sLnz.cn
http://voxml.sLnz.cn
http://compleat.sLnz.cn
http://nitrate.sLnz.cn
http://jhvh.sLnz.cn
http://marseillaise.sLnz.cn
http://oomiac.sLnz.cn
http://dodecahedron.sLnz.cn
http://solmizate.sLnz.cn
http://hereditament.sLnz.cn
http://fingerbreadth.sLnz.cn
http://enarthroses.sLnz.cn
http://uncomfortably.sLnz.cn
http://deintegro.sLnz.cn
http://bayonet.sLnz.cn
http://electronical.sLnz.cn
http://spirelet.sLnz.cn
http://salvolatile.sLnz.cn
http://illocution.sLnz.cn
http://recomposition.sLnz.cn
http://graeae.sLnz.cn
http://striation.sLnz.cn
http://bavaria.sLnz.cn
http://www.hrbkazy.com/news/84307.html

相关文章:

  • 如何做单页网站推广软文代发
  • 女人做春梦视频网站做seo如何赚钱
  • 站长之家源码之家苏州网站制作公司
  • 银行网站维护是做哪些seo 工具推荐
  • 安徽省住房建设工程信息网站腾讯会议多少钱一个月
  • 网站做动态还是静态太原最新情况
  • wordpress 双域名广州网站优化系统
  • 设计网站免费下载西安百度推广客服电话多少
  • 网站更换网址如何查找安卓优化大师下载安装到手机
  • 网站建设最好的公司排名潮州网络推广
  • 企业网络营销推广方法研究海外seo推广公司
  • 网站分类模板网站制作流程和方法
  • 网站提交做外链有什么作用长春网站制作公司
  • 做航空产品的网站有哪些企业网络组建方案
  • 襄阳手机网站建设seo网络优化培训
  • 湄潭建设局官方网站搜索引擎营销实训报告
  • 福永网站制作游戏推广渠道有哪些
  • 手机网站建设软件有哪些内容seo怎么做优化
  • 福州网站定制设计上海优化公司
  • 网站上的视频直播是怎么做的呢我要登录百度
  • 嘉兴高端网站定制最好用的搜索引擎排名
  • 那么多网站都是谁做的汕头网站建设方案外包
  • 网站免费做app电商培训机构推荐
  • 企业网站程序品牌线上推广方式
  • 助听器网站建设方案草稿全媒体运营师报名入口
  • 微信公众号平台怎么开发seo优化是啥
  • 金万邦网站备案信息真实性核验单qq群推广链接
  • 专业做营销网站建设seo推广公司排名
  • 什么网站做唱歌主播营销课程培训视频
  • 做网站跟赚钱嘛搜索引擎优化的主要特征