开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

问答求助

关注:490

当前位置:游戏蛮牛 技术专区 问答求助

_____________________________________________________________________________________________________________
问答求助版块规则:

  1、问题尽量描述清楚
      2、代码要放在代码块里
      3、附件最好放到云盘,然后把链接放到TXT文档里,上传TXT文档。【最好没有附件,你懂得】
      4、本版块回复不得无意义,如:顶、呵呵、不错......以及擦边!【真的会扣分的哦】严重者,封IP!
      5、问题得到解决,请选择最佳答案。
      6、若问题是你自己解决了,可以联系管理员,返还蛮牛币,写下你的答案,另有蛮牛币奖赏。
_____________________________________________________________________________________________________________
查看: 148|回复: 12

[脚本] 关于MeshFilter创建多边形的问题

[复制链接]  [移动端链接]
2初来乍到
145/150
排名
26369
昨日变化
19

9

主题

64

帖子

145

积分

Rank: 2Rank: 2

UID
224854
好友
0
蛮牛币
95
威望
0
注册时间
2017-6-2
在线时间
60 小时
最后登录
2017-12-13
发表于 6 天前 | 显示全部楼层 |阅读模式
5蛮牛币
最近做一个项目,给定一个建筑的底面坐标,需要建一个简易的3D模型出来,就使用MeshFilter来做,发现如果是简单的建筑如矩形或者圆形的,做出来效果都可以,但如果建筑底面比较复杂的话,做出来效果就不行了,看上去好像有些三角形重叠在一起
[C#] 纯文本查看 复制代码
public class AccurateFloorItem : MonoBehaviour {
    public GameObject planeDraw;//meshFilter组件所在物体
    private Mesh plane_mesh;
    public Vector3[] pos;//顶点坐标
    
    void Awake () {
        planeDraw = gameObject;
        plane_mesh = planeDraw.GetComponent<MeshFilter>().mesh;
    }

    public void DrawPlane(Vector3[] vertices)
    {
        int trianglesNum = vertices.Length - 2;//三角形数量
        int[] triangles = new int[trianglesNum*3];//triangles数组
        int f = 0, b = vertices.Length - 1;
        for (int i = 1; i <= trianglesNum; i++)//循环给triangles数组中的三个元素赋值
        {
            if (i % 2 == 1)//正向赋值
            {
                triangles[3 * i - 3] = f++;
                triangles[3 * i - 2] = f;
                triangles[3 * i - 1] = b;
            }
            else//逆向赋值
            {
                triangles[3 * i - 1] = b--;
                triangles[3 * i - 2] = b;
                triangles[3 * i - 3] = f;
            }
        }
        plane_mesh.vertices = vertices;
        plane_mesh.triangles = triangles;//最后给mesh这个属性的vertices和triangles数组赋 
        gameObject.AddComponent<MeshCollider>();
    }

   

}

QQ截图20171207185325.png

回复

使用道具 举报

2初来乍到
145/150
排名
26369
昨日变化
19

9

主题

64

帖子

145

积分

Rank: 2Rank: 2

UID
224854
好友
0
蛮牛币
95
威望
0
注册时间
2017-6-2
在线时间
60 小时
最后登录
2017-12-13
 楼主| 发表于 6 天前 | 显示全部楼层
求高手指点 如何解决这问题  不胜感激

回复

使用道具 举报

排名
233
昨日变化

5

主题

582

帖子

3325

积分

Rank: 11Rank: 11Rank: 11Rank: 11Rank: 11

UID
31708
好友
5
蛮牛币
7137
威望
0
注册时间
2014-6-28
在线时间
990 小时
最后登录
2017-12-13

活力之星

QQ
发表于 6 天前 | 显示全部楼层
三角形索引没给对呗你可以找找有现成的多边形切割三角形算法

回复

使用道具 举报

排名
14275
昨日变化
14

4

主题

22

帖子

95

积分

Rank: 2Rank: 2

UID
249821
好友
0
蛮牛币
121
威望
0
注册时间
2017-10-20
在线时间
30 小时
最后登录
2017-12-12
发表于 5 天前 | 显示全部楼层
三角形点都是顺时针要么都是逆时针

回复

使用道具 举报

2初来乍到
145/150
排名
26369
昨日变化
19

9

主题

64

帖子

145

积分

Rank: 2Rank: 2

UID
224854
好友
0
蛮牛币
95
威望
0
注册时间
2017-6-2
在线时间
60 小时
最后登录
2017-12-13
 楼主| 发表于 5 天前 | 显示全部楼层
hellomercury 发表于 2017-12-7 19:50
三角形索引没给对呗你可以找找有现成的多边形切割三角形算法

我是直接沿着建筑底面轮廓依次给顶点数组赋值的C:\Users\禹泽鹏\Desktop\QQ截图20171208101624.png

回复

使用道具 举报

2初来乍到
145/150
排名
26369
昨日变化
19

9

主题

64

帖子

145

积分

Rank: 2Rank: 2

UID
224854
好友
0
蛮牛币
95
威望
0
注册时间
2017-6-2
在线时间
60 小时
最后登录
2017-12-13
 楼主| 发表于 5 天前 | 显示全部楼层
神之手CC 发表于 2017-12-8 09:56
三角形点都是顺时针要么都是逆时针

我是直接沿着建筑底面轮廓  依次调取坐标点 赋值给顶点数组

回复

使用道具 举报

排名
14275
昨日变化
14

4

主题

22

帖子

95

积分

Rank: 2Rank: 2

UID
249821
好友
0
蛮牛币
121
威望
0
注册时间
2017-10-20
在线时间
30 小时
最后登录
2017-12-12
发表于 5 天前 | 显示全部楼层
禹泽鹏 发表于 2017-12-8 10:25
我是直接沿着建筑底面轮廓  依次调取坐标点 赋值给顶点数组

可以的,我刚才试了一下。把你代码里面的正向赋值,逆向赋值,去掉,只保留一个。然后点坐标都保留一个方向

回复

使用道具 举报

2初来乍到
145/150
排名
26369
昨日变化
19

9

主题

64

帖子

145

积分

Rank: 2Rank: 2

UID
224854
好友
0
蛮牛币
95
威望
0
注册时间
2017-6-2
在线时间
60 小时
最后登录
2017-12-13
 楼主| 发表于 5 天前 | 显示全部楼层
神之手CC 发表于 2017-12-8 14:29
可以的,我刚才试了一下。把你代码里面的正向赋值,逆向赋值,去掉,只保留一个。然后点坐标都保留一个方 ...

貌似还是一样唉  你用你的方法建一个凹形的建筑,看能成功不

回复

使用道具 举报

排名
14275
昨日变化
14

4

主题

22

帖子

95

积分

Rank: 2Rank: 2

UID
249821
好友
0
蛮牛币
121
威望
0
注册时间
2017-10-20
在线时间
30 小时
最后登录
2017-12-12
发表于 5 天前 | 显示全部楼层
禹泽鹏 发表于 2017-12-8 14:51
貌似还是一样唉  你用你的方法建一个凹形的建筑,看能成功不

我试过了可以。。。。。
举个例子, 这样,先定义8个点坐标
0---(0,0,0)
1---(0, 2, 0)
2--(2,2,0)
3--(4,0,0)
4--(2, 4, 0)
5--(4, 6, 0)
6--(0, 4, 0)
7--(0, 6, 0)
int[] newTriangles = { 0, 1, 2, 0, 2, 3, 3, 2, 4, 3, 4, 5, 5, 4, 6, 5, 6, 7};

回复

使用道具 举报

5熟悉之中
566/1000
排名
7363
昨日变化
4

1

主题

133

帖子

566

积分

Rank: 5Rank: 5

UID
56504
好友
0
蛮牛币
423
威望
0
注册时间
2014-11-19
在线时间
306 小时
最后登录
2017-12-13
发表于 5 天前 | 显示全部楼层
这个和凹凸没什么关系,只要你的triangle顺序给对了就能出来,你可以对着点挨个去数。。。

回复

使用道具 举报

2初来乍到
145/150
排名
26369
昨日变化
19

9

主题

64

帖子

145

积分

Rank: 2Rank: 2

UID
224854
好友
0
蛮牛币
95
威望
0
注册时间
2017-6-2
在线时间
60 小时
最后登录
2017-12-13
 楼主| 发表于 5 天前 | 显示全部楼层
神之手CC 发表于 2017-12-8 15:53
我试过了可以。。。。。
举个例子, 这样,先定义8个点坐标
0---(0,0,0)

我这边需要实现的功能是用户随便选择一个建筑都可以绘制出来,我现在只能实现凸多边形绘制,凹多边形不知道怎么切割三角形,我需要一种同时支持凹凸多边形绘制的算法

回复

使用道具 举报

排名
14275
昨日变化
14

4

主题

22

帖子

95

积分

Rank: 2Rank: 2

UID
249821
好友
0
蛮牛币
121
威望
0
注册时间
2017-10-20
在线时间
30 小时
最后登录
2017-12-12
发表于 4 天前 | 显示全部楼层
禹泽鹏 发表于 2017-12-8 19:31
我这边需要实现的功能是用户随便选择一个建筑都可以绘制出来,我现在只能实现凸多边形绘制,凹多边形不知 ...

不管凸还是凹,原理都是一样的。实在不行,你可以,绘制2个四边形,凸就叠加上面,凹就用shader剔除

回复

使用道具 举报

2初来乍到
145/150
排名
26369
昨日变化
19

9

主题

64

帖子

145

积分

Rank: 2Rank: 2

UID
224854
好友
0
蛮牛币
95
威望
0
注册时间
2017-6-2
在线时间
60 小时
最后登录
2017-12-13
 楼主| 发表于 前天 10:41 | 显示全部楼层
神之手CC 发表于 2017-12-9 10:58
不管凸还是凹,原理都是一样的。实在不行,你可以,绘制2个四边形,凸就叠加上面,凹就用shader剔除 ...

嘿嘿,我说的凸多边形不是凸字形的多边形,是指内角均小于180度的多边形

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

快速回复 返回顶部 返回列表