[0]请问空间中的三个点怎么判断他是顺时针还是逆时针
我要自定义一个mesh可是,在生成三角形的时候
我只有三角形的位置,顺序我没有。
所以连接出来的三角形,
有的是 面朝向相机得(正面可见)。有的是背对相机的(正面不可见、背面可见)。
请问大家有没有可以判断 ,世界中的三个点是顺时针还是逆时针。
目前我试过图片中的方法,没有成功……
我只有三角形的位置,顺序我没有。
所以连接出来的三角形,
有的是 面朝向相机得(正面可见)。有的是背对相机的(正面不可见、背面可见)。
请问大家有没有可以判断 ,世界中的三个点是顺时针还是逆时针。
目前我试过图片中的方法,没有成功……
没有找到相关结果
已邀请:
要回复问题请先登录
2 个回复
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
赞同来自: