List<int[]> 怎么转换成 int[][] 以及拓展

List<int[]> 转换成 int[][]

         // 创建一个 List<int[]> 对象
        List<int[]> list = new ArrayList<>();
        list.add(new int[]{1, 2, 3});
        list.add(new int[]{4, 5, 6});
        
        // 将 List<int[]> 转换为 int[][]
        int[][] array = list.toArray(new int[0][]);

注意:0是占位符,JVM会根据自动变为list.size()

List 转换成 int[]

       // 创建一个 List<Integer> 对象
        List<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        
        // 使用 stream() 和 mapToInt() 将 List<Integer> 转换为 int[]  注意java8才可以
        int[] array = list.stream().mapToInt(Integer::intValue).toArray();
void CreateClosedRoad(List<Vector3> points, Material loadedMat) { if (points.Count < 4) throw new ArgumentException("至少需要4个以上的点才能创建一条闭合道路"); // 确保道路是闭合的,复制首个元素到末尾模拟闭合效果 List<Vector3> closedPoints = DuplicatePathToFormStrip(points); List<int> indices = GenerateTriangleIndicesForClosure(closedPoints.Count); GameObject gameObject = new GameObject("Quad"); gameObject.transform.SetParent(transform, true); // 构建 Mesh 数据 Mesh mesh = new Mesh(); mesh.vertices = closedPoints.ToArray(); // 设置顶点位置 mesh.triangles = indices.ToArray(); // 设置三角形索引 // 计算法线和 UV 映射 (可选,提升视觉质量) mesh.RecalculateNormals(); // 将生成的 Mesh 应用到游戏对象上 var mf = gameObject.AddComponent<MeshFilter>(); mf.mesh = mesh; // 添加渲染组件 gameObject.AddComponent<MeshRenderer>(); Renderer renderer = gameObject.GetComponent<Renderer>(); renderer.material = loadedMat; // 应用材质 } // 增强型版本 - 创建更多细分层次增强立体感 List<Vector3> DuplicatePathToFormStrip(List<Vector3> originals) { float segmentDetailFactor = 5F; //控制细分数目因子越大越细致 List<Vector3> refinedResult = new List<Vector3>(); for (int idx = 0; idx < originals.Count() - 1; ++idx) { Vector3 currPnt = originals[idx]; Vector3 nextPnt = originals[(idx + 1) % originals.Count()]; // 插值计算沿途若干中间参考位置以便更好拟合实际轨迹走向 for (float t = 0; t <= segmentDetailFactor; t += 1) { float ratio = t / segmentDetailFactor; Vector3 interpolatedPt = Vector3.Lerp(currPnt, nextPnt, ratio); // 此处同样沿法线方向拓展获得双边布局形式... Vector3 dir = (nextPnt - currPnt).normalized; Vector3 normalVec = Vector3.Cross(dir, Vector3.up).normalized; refinedResult.Add(interpolatedPt - normalVec * roadWidth * .5F); //左半部 refinedResult.Add(interpolatedPt + normalVec * roadWidth * .5F); //右半部 } } return refinedResult; } List<int> GenerateTriangleIndicesForClosure(int vertexCount) { if (vertexCount < 4 || vertexCount % 2 != 0) throw new ArgumentException("Vertex count should be even and greater than or equal to four."); List<int> indices = new List<int>(); // 构建内部矩形分割 for (int i = 0; i < vertexCount - 2; i += 2) { int leftStart = i; int rightStart = i + 1; // 添加第一个三角形 indices.AddRange(new int[] { leftStart, rightStart, leftStart + 2 }); // 添加第二个三角形 indices.AddRange(new int[] { rightStart, rightStart + 2, leftStart + 2 }); } // 完善闭环处理 if (vertexCount >= 4) { int firstLeft = 0; int firstRight = 1; int lastLeft = vertexCount - 2; int lastRight = vertexCount - 1; // 关联最后一排回到第一列构成封闭结构 indices.AddRange(new int[] { lastLeft, lastRight, firstLeft }); indices.AddRange(new int[] { lastRight, firstRight, firstLeft }); } return indices; }上面的代码已经成功绘制出了道面面的外边框的形状 带状的 但是我实际想要的是面状的mesh 如何调整
03-20
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值