答案 0 :(得分:0)
您可以以编程方式生成网格,例如评论说。
但是,如果角度是动态的(即经常更改),这样做会浪费CPU时间和GPU带宽,而最好将其用于其他方面。更好的选择是,对180°或270°形状进行建模(或在启动时以编程方式生成),然后编写顶点着色器以围绕中心向上或向下滚动形状。
为简单起见,请对形状进行建模,以使圆柱轴为Z,中心XY为{0, 0}
(Z无关紧要),形状的开口朝向-X
,并且形状在Y = 0平面周围对称。我说的是对象的局部坐标,然后可以根据需要定位/旋转模型。
以下是顶点着色器代码(未经测试):
float len = length( float2( position.x, position.y ) );
float newAngle = atan2( position.y, position.x ) * rollFactor;
float3 newPosition = float3( len * cos( newAngle ), len * sin( newAngle ), position.z );
output.position = UnityObjectToClipPos( newPosition );
这样,您只需要更新一个常数变量rollFactor
即可将形状转换为任意角度。如果初始形状为270°,则将常数设置为1.33334以卷成完整的甜甜圈,将常数设置为1.0以使其保持在270°,将常数设置为0.33333则将其向下滚动为90°,如您的屏幕截图所示,等等。