动态生成具有圆柱段形状的对象

时间:2018-08-27 18:53:33

标签: unity3d

是否可以统一动态生成形状像这样的对象?

我需要对象的角度能够从细条变成完整的甜甜圈状部分,因此对每个可能的版本进行建模将非常耗时且难以使用。

part of cylinder

1 个答案:

答案 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°,如您的屏幕截图所示,等等。