我想改变地板的顶点法线'球在地板上滚动的方向。我只是需要一些指导如何实现这一点。
到目前为止,这是我前进的方向:
答案 0 :(得分:1)
以下是您修改法线的方法:
<records>
<record>
<some-field>some content</some-field>
</record>
</records>
您希望使用Mesh mesh = GetComponent<MeshFilter>().mesh;
Vector3[] vertices = mesh.vertices;
Vector3[] normals = mesh.normals;
列表来确定要修改的索引(可能还需要从本地空间转换为世界空间)。然后你可以从世界空间坐标射线投射到球的中心, 1 并使用vertices
来确定与球的角度是什么。
来自那里的一些聪明的矢量数学来计算你的飞机的新法线:
在raycasthit.normal
和hit.normal
之间找到vector perpendicular:此向量将与平面平行。 如果两个向量是并行的,则转出:你的法线不变(或者应该返回到它的原始值,它将与用于找到球体的光线投射相同)。
找到垂直于该向量的向量和Vector3.Up
:此向量将是您的新常态。
1 实际上,你想知道你应该瞄准球的中心 down 多远,否则你就会知道当球越远离飞机时,获得最极端的偏移。所以你想要球在X和Z上的位置,但是在Y的平面上有一个固定的偏移量。这不会太难计算。
答案 1 :(得分:0)
我会尝试类似的事情:
为法线创建纹理。每个像素是顶点的法线(如网格)。计算三维球与纹理中法线位置之间的对应坐标,并在每一帧上绘制一个球/圆/精灵(如精灵)。然后,您可以使用计算着色器将它们慢速恢复为默认向上矢量。