zoukankan      html  css  js  c++  java
  • Unity3d 用鼠标拾取模型的顶点 二

                                             Unity3d  用鼠标拾取模型的顶点 二

            这一节实现鼠标拾取模型的三角形的三个顶点!

            先贴代码出来

            RaycastHit hit;
            Ray ray = Camera.mainCamera.ScreenPointToRay(Input.mousePosition);
            if (Physics.Raycast(ray, out hit, 100))
            {
                spheretransform.position = hit.point;

                //拾取三角面前提是物体含有一个MeshCollider碰撞器
                MeshCollider collider = hit.collider as MeshCollider;
                if (collider == null||collider.sharedMesh==null)
                    return;

                //获取碰撞器所在物体的Mesh网格
                Mesh mesh0 = collider.sharedMesh;

                //获取Mesh网格的所有顶点
                Vector3[] vertices = mesh0.vertices;

                //获取mesh的三角形索引,这里的索引的就是模型顶点数组的下标
                int[] triangles = mesh0.triangles;

                //然后通过hit.triangleIndex(摄像碰撞到的三角形的第一个点的索引)

                //然后+1 ,+2,获取三角形另外两个点的坐标
                Vector3 p0 = vertices[triangles[hit.triangleIndex * 3]];
                Vector3 p1 = vertices[triangles[hit.triangleIndex * 3 + 1]];
                Vector3 p2 = vertices[triangles[hit.triangleIndex * 3 + 2]];
                Transform transform = collider.transform;

                //上面的三个顶点是Mesh的本地坐标,需要用模型的Transform进行转换到世界坐标
                p0 = transform.TransformPoint(p0);
                p1 = transform.TransformPoint(p1);
                p2 = transform.TransformPoint(p2);

                //然后设置三个小球的位置到这个三个点,方便调试,呵呵!
                GameObject.Find("Sphere1").transform.position = p0;
                GameObject.Find("Sphere2").transform.position = p1;
                GameObject.Find("Sphere3").transform.position = p2;
            }

             这一节就实现了射线碰撞到模型的一个三角形!

            那么下一节我就要拾取模型的顶点,也就是说从三个顶点中获取一个离鼠标最近的顶点,呵呵,待续……!

             有不对的地方, 希望多交流……!

     

  • 相关阅读:
    AWS Redshift 采坑记
    EF Core 小工具
    Setup .net core EF
    Bat 使用MSBuild 制作发布包 (更新20180713)
    Https web Api 拉取数据踩坑记录
    C# 后台程序 通过批处理进行监控
    C#计算日期步进
    IIS 预热 (8.0及8.0以上版本)
    MSBuild 执行文档,关于使用命令行编译
    基于Bamboo的CI配置汇总(.Net Web及Api)
  • 原文地址:https://www.cnblogs.com/alongu3d/p/picktriangle.html
Copyright © 2011-2022 走看看