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;
            }

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

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

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

     

  • 相关阅读:
    CentOS 7配置LNMP开发环境及配置文件管理
    Virtual Box配置CentOS7网络(图文教程)
    HTTP常用状态码分析
    MySQL数据库和InnoDB存储引擎文件
    InnoDB关键特性学习笔记
    InnoDB体系结构学习笔记
    Laravel 5.x 请求的生命周期(附源码)
    PyQt5 signal and slot
    x01.gamelab: An Tank 3D Model
    x01.AntWorld: An Python AI Game
  • 原文地址:https://www.cnblogs.com/alongu3d/p/picktriangle.html
Copyright © 2011-2022 走看看