[0]请问空间中的三个点怎么判断他是顺时针还是逆时针

我要自定义一个mesh可是,在生成三角形的时候
我只有三角形的位置,顺序我没有。
所以连接出来的三角形,
有的是 面朝向相机得(正面可见)。有的是背对相机的(正面不可见、背面可见)。
请问大家有没有可以判断 ,世界中的三个点是顺时针还是逆时针。
 
目前我试过图片中的方法,没有成功……
526F2BB8-65AF-4A24-ACE5-FE66D80AB9CE.png
已邀请:

xueLayaBox

赞同来自: mamama

//判断多边形为顺时针或逆时针
 
//多边形拐点集合
private lineRoute = [];
convertClockwise(): void {
        if (this.lineRoute.length < 1) {
            return;
        }
        let points: Array<Laya.Vector3> = [];
        for (let i: number = 0; i < this.lineRoute.length; i++) {
            let v3: Laya.Vector3 = new Laya.Vector3();
            v3.x = this.lineRoute[i].xN;
            v3.y = this.lineRoute[i].yN;
            v3.z = 0;
            points.push(v3);
        }
        let first: Laya.Vector3 = new Laya.Vector3();
        first.x = this.lineRoute[0].xN;
        first.y = this.lineRoute[0].yN;
        first.z = 0;
        points.push(first);
        //点首尾重叠,总数大于4才说明有面(这里使用的数据定义中多边形首位是同一个点,即三角形需要四个点定义,四边形需要5个点定义等等,,,非这种情况的大家自己修改下就OK了)
        if (points && points.length >= 4) {
            //找到最大点的索引
            var maxNum: number = Number.NEGATIVE_INFINITY;
            var maxIndex: number = -1;
            for (var i: number = 0; i < points.length; i++) {
                if (points[i].x > maxNum) {
                    maxNum = points[i].x;
                    maxIndex = i;
                }
            } 
            if (maxIndex == -1) {
                return;
            }
            //根据最大 X 前后两点与最大点构成的面积是正还是负来判断点的方向
            var maxPoint: Laya.Vector3 = points[maxIndex];
            var prePoint: Laya.Vector3 = null;
            var nextPoint: Laya.Vector3 = null;
            if (maxIndex == 0 || maxIndex == points.length - 1) {
                prePoint = points[points.length - 2];
                nextPoint = points[1];
            } else {
                prePoint = points[maxIndex - 1];
                nextPoint = points[maxIndex + 1];
            } 
            //计算面积,叉积
            var vector1: Laya.Vector3 = new Laya.Vector3();
            var vector2: Laya.Vector3 = new Laya.Vector3();
            Laya.Vector3.subtract(prePoint, maxPoint, vector1);
            Laya.Vector3.subtract(maxPoint, nextPoint, vector2);
            vector1.z = 0;
            vector2.z = 0;
            var sub: Laya.Vector3 = new Laya.Vector3();
            Laya.Vector3.cross(vector1, vector2, sub);
            if (sub.z > 0) {
                points.reverse();
                //顺时针
                this.curRow = 1;
                
            } else {
                //逆时针
                this.curRow = -1;
            }
        }
    }

mamama

赞同来自:

这种情况最好判断的是,用所有顶点,拉一条中心点,三角形的法向量与中心点和三角形中心连接的向量相乘,用正负判断朝里朝外

要回复问题请先

商务合作
商务合作