【Unity】初级模型渲染原理: 纯代码创建一个三角面并给其贴图测试

第一步: 创建一个空物体, 给他一个空的MeshFilter组件, 再给一个空的MeshRenderer组件. 最后给MeshRenderer一个贴图材质, 别的不动.

材质Material就是默认材质, 只给他一张图片("原图"), 别的不动.

"真.原图"为: 正方形,方便后面切割, 像素不重要,因为后面是按比例切割.

总之就是一个空物体, 给了2个空组件, 一张图片,

下面要代码创建一个三角面, 并且把图片切出来贴上去


5行代码即可:

效果:


一共4步: 覆盖mesh组件的3个数组(3步), 然后重新计算法线(第4步)

[顶点位置数组]: 所有顶点的相对位置(相对模型本地0,0,0点)比如 {(0,0,0),(1,0,0),(0.5,1,0)}

[UV数组]:[顶点位置数组]的成员, 所对应的(是的,索引一一对应),在贴图上的位置(比例) 比如{(0,0),(1,0),(0.5,1)}

[三角面数组] :以上2个数组的索引, 每3个索引识别为一个三角面. 比如{0,2,1}

这样就可以生成一个底为1, 高为1的三角面, 贴图是从素材图片裁下来一个底为素材底边长度, 高为素材高度的三角形. 这就是最简单的情况, 再复杂就是多加一些数组,比如法线贴图数组

需要注意的事项:

1. 注意到注册三角面数组时, 用的是Unity自己的API, 而且要提供三角面数组和材质索引. 这就是因为有些GameObject有多个材质, 引擎需要知道你提供的三角面是绑定哪个材质的, 然后再根据你提供的其他2个数组的索引, 取得三角面的空间位置信息和材质上的贴图区域.

2. 渲染遵循左手法则, 也就是顺时针提供三角面的点时, 引擎会把面向你绘制为正面. 所以上面我提供的三角面索引是0,2,1 而不能是0,1,2 (如下图, 绿色是其索引). 当然, 只要顺序是顺时针即可, 具体顺序可以随意. 比如提供2,1,0 或者 1,0,2 效果和0,2,1是一样的.

3.引擎创建Collider也是相同的原理, 只不过省略一个UV数组而已. 他的Mesh是GetComponent<MeshCollider>().sharedMesh. 而且因为和材质无关, 其三角面不需要使用API设置, 直接覆盖数组即可.

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值