我正在程式上生成一些路徑,并且需要在一個點周圍創建一個平滑的“螺旋”。(想象一個停車場坡道,但有一個中心點)。
像這樣的東西:自上而下的視圖

側開

然而 - 如果你仔細觀察 - 它不是一個光滑的表面。因為多邊形的布局。當其中兩個頂點圍繞中央輻條“向上”時,就只剩下一個點可以到達邊緣。

這是不可能的嗎?或者我只是在這里遺漏了一些可以使這項作業的特定三角形排列?
注意 - 此問題僅存在于圍繞中心線的傾斜“曲線”。直線路徑、彎曲路徑和傾斜路徑不存在此問題。這只是傾斜的曲線(大約一個點)。
提前致謝!
編輯 -
添加了一些示例源代碼來重現問題(Unity 代碼,只需將其添加到空白場景中的空游戲物件中,它應該可以作業。您可能需要添加材料才能看到問題)

using System.Collections.Generic;
using UnityEngine;
public class Test_Spiral : MonoBehaviour
{
void Start()
{
var mesh = Generate();
AddToGameObject("FailSpiral", mesh);
}
private Mesh Generate()
{
var mesh = new Mesh();
var verts = new List<Vector3>();
var tris = new List<int>();
Vector3 centre = Vector3.zero;
var angle = Mathf.PI * 2f / 3f;
var height = 2f;
var radius = 5f;
var count = 20;
var anglePer = angle / count;
var heightPer = height / count; ;
for (var i = 0; i < count; i )
{
verts.Add(centre Vector3.up * heightPer * i);
var x0 = radius * Mathf.Cos(anglePer * i);
var z0 = radius * Mathf.Sin(anglePer * i);
verts.Add(centre new Vector3(x0, heightPer * i, z0));
var x1 = radius * Mathf.Cos(anglePer * (i 1));
var z1 = radius * Mathf.Sin(anglePer * (i 1));
verts.Add(centre new Vector3(x1, heightPer * (i 1), z1));
verts.Add(centre Vector3.up * heightPer * (i 1));
var offset = i * 4;
tris.Add(offset 0);
tris.Add(offset 2);
tris.Add(offset 1);
tris.Add(offset 2);
tris.Add(offset 0);
tris.Add(offset 3);
}
mesh.vertices = verts.ToArray();
mesh.triangles = tris.ToArray();
mesh.RecalculateNormals();
mesh.RecalculateTangents();
mesh.RecalculateBounds();
return mesh;
}
private void AddToGameObject(string name, Mesh mesh)
{
var go = new GameObject(name, typeof(MeshFilter), typeof(MeshRenderer), typeof(MeshCollider));
go.GetComponent<MeshFilter>().sharedMesh = mesh;
go.GetComponent<MeshCollider>().sharedMesh = mesh;
go.transform.parent = transform;
}
}
uj5u.com熱心網友回復:
問題是點的“中心柱”需要使用三角形中三個點中的兩個“向上”。因此,那個內部多邊形的角度總是垂直的。
在外邊緣,它需要(大部分)水平。
因此,您最終需要一個扭曲的形狀。剪下一條薄紙,將一端扭轉 90 度左右。僅使用兩個 polgon 是無法實作的。
解決方案不是進一步垂直細分,而是更好的“扭曲”模型。
這是一個潛在的解決方案。可能有更好的方法。

轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/528958.html
