You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何计算多边形拆分三角面的顶点索引 以生成OpenGL元素缓冲区数据

存在可以适配任意边数正多边形的元素缓冲区数据计算方案,核心思路是利用凸多边形的三角化规则,以下是具体实现方案:


前置问题修正

你当前的顶点生成代码存在两处可优化点:

  1. 变量名笔误:定义的角度变量是angle,但计算坐标时用的是未定义的ang,会导致编译报错
  2. Math.round会导致生成的顶点不是严格的正多边形顶点,边缘顶点分布不均匀,如果不需要特殊近似效果可以去掉该方法

修正后的顶点生成代码如下:

public ArrayList<Float> generateVertices(int sides) {
    float centerAngle = (float) (2 * Math.PI / sides);
    ArrayList<Float> vertices = new ArrayList<>();
    // 可选:如果用扇形三角化方案,可在此处先添加中心顶点(0,0,0)
    // vertices.add(0.0f);
    // vertices.add(0.0f);
    // vertices.add(0.0f);
    for (int i = 0; i < sides; i++) {
        float angle = i * centerAngle;
        float x = (float) Math.cos(angle) / 2f;
        float y = (float) Math.sin(angle) / 2f;
        float z = 0.0f;
        vertices.add(x);
        vertices.add(y);
        vertices.add(z);
    }
    return vertices;
}

通用元素缓冲区生成方案

正多边形属于凸多边形,有两种成熟的三角化方案可以直接适配任意边数≥3的场景:

方案1:带中心顶点的扇形三角化(推荐)

逻辑最简单、性能最稳定,无适配问题

  1. 顶点生成阶段额外添加一个中心顶点(0,0,0)放在顶点数组第0位,原来的边缘顶点依次后移到索引1~n的位置
  2. 索引生成逻辑:共n个三角形,每个三角形的索引规则为[中心索引, 第i个边缘顶点, 第i+1个边缘顶点],最后一个三角形的尾顶点取第一个边缘顶点即可

对应代码实现:

public int[] generateIndicesWithCenter(int sides) {
    // n边型对应n个三角形,共3n个索引
    int[] indices = new int[sides * 3];
    int index = 0;
    for (int i = 1; i <= sides; i++) {
        indices[index++] = 0; // 固定中心顶点索引
        indices[index++] = i;
        indices[index++] = (i == sides) ? 1 : i + 1;
    }
    return indices;
}

方案2:无中心顶点的凸多边形三角化

适配你当前没有中心顶点的顶点结构
凸多边形三角化的固定规则:固定第0个顶点,依次拼接三角形[0, i, i+1],共生成n-2个三角形,符合凸多边形三角化的理论三角形数量。

对应代码实现:

public int[] generateIndicesWithoutCenter(int sides) {
    // n边型对应n-2个三角形,共3*(n-2)个索引
    int[] indices = new int[(sides - 2) * 3];
    int index = 0;
    for (int i = 1; i <= sides - 2; i++) {
        indices[index++] = 0;
        indices[index++] = i;
        indices[index++] = i + 1;
    }
    return indices;
}

内容的提问来源于stack exchange,提问作者Israel Aristide

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 09:24:07