建设网站公司需要哪些证件,山东网站建设公司哪家权威,网站开发与应用案例,视频号的视频怎么下载本章内容
创建一个闭合的cube mesh给cube添加带弧度平滑的边缘定义法线使用sub-meshes#xff08;子mesh#xff09;创建一个常规shader合并碰撞体1.合成一个cube
上一章https://mp.csdn.net/postedit/89474068我们已经实现了一个平面mesh。一个cube由6个平面组成#xff…本章内容
创建一个闭合的cube mesh给cube添加带弧度平滑的边缘定义法线使用sub-meshes子mesh创建一个常规shader合并碰撞体1.合成一个cube
上一章https://mp.csdn.net/postedit/89474068我们已经实现了一个平面mesh。一个cube由6个平面组成我们可以由6个上一章实现的平面修改位置和方向后组成一个cube这种方法看起来挺好但是其实并不实用虽然我们也可以过 Mesh.CombineMeshes这个函数合并这6个mesh但是我们最好还是一次性创建这个cube。
2.创建cube的顶点
一个cube中的顶点可以分为三类。角上的顶点下图3边上的顶点下图2以及面上的顶点下图1 具体每个种类多少其实就是算数学题具体如何算的可以参考原文最后计算定点数量代码如下 之后再计算每个顶点的位置最后结果如下 3.添加三角形 具体实现方法类似之前的文章但是涉及更多的数学知识这里不细讲了大体思路是先计算cube四周的四个面之后计算上面top和下面bottom。最后效果如下 4.使边缘圆滑
基于之前的代码重新创建一个类命名为RoundedCube并添加一个Roundness变量用于控制圆滑程度 这回我们要自己计算法线。先定义法线数组 创建一个函数用于计算法线以及使得顶点沿着法线位置变化形成弧度 计算法线的原理是依据roundness参数形成一个更小的cube大cube和小cube之间顶点的向量差就是大cube上该点的法线。如下图所示 通过roundness参数来确定大cube上每个顶点对应的小cube位置 最终结果 5.拆分Mesh
如何计算UV使得其可以渲染纹理我们可以将总的三角形列表拆分成多个子mesh三角形列表其之间共用一些相同的顶点这也使得我们可以使用不同材质去渲染每一组子三角形列表。
创建三个子列表 计算每个三角形列表 不再是设置mesh.triangles 而是设置子mesh 如果只设置一个材质那么会发现只有两个面会渲染一组 在mesh render中material array设置三个材质会得到正确结果 6.渲染Gird
我们可以使用shader在shader中指定如何计算使用一个纹理而代替在mesh中存储uv信息。
Unity中默认shader的代码如下 因为我们mesh中没有uv信息我们需要在shader中计算所以我们在顶点着色器中计算uv信息并将其传入到surface shader中 通过使用shader中的keyword我们可以控制shader的渲染 根据所设置的keyword提供支持 根据所选keyword设置来进行uv计算 可以看出同一个shader通过设置keyword来提供三个material对应的效果 但是能看出来grid line没有和四边形完全对应上更糟的是因为我们使用的是世界坐标系当我们旋转和移动这个cube的时候效果会更奇怪。
我们需要使用的是在圆滑之前原始的cube中的顶点位置因此我们通过将其存储在mesh中传入shader。因为我们这个例子中vertex color channel没有用所以我们就用它来存储这个信息。 在shader中使用color channel存储的信息进行计算 7.添加碰撞体
添加一个碰撞体时候的样子 为平坦的部分添加box collider共三个 为圆滑边缘添加capsule collider12个 最后的效果 https://thumbs.gfycat.com/RingedCornyBlesbok-mobile.mp4