扫描表示

OpenGL - Sweep Representations

本文关键字:表示 扫描      更新时间:2023-10-16

我有一组点,限制在二维坐标平面上,特别是第一和第四象限(正x值)。我可以通过这些点画一条线。

我也可以把这些点画在3D空间中,在另一个窗口中,作为一条线。我该如何围绕一个轴(比如Y轴)对它们进行扫描,从而实现3D网格?我相信这通常的例子是使用点在Maya中创建一条线,创建一个高脚杯或类似的。

我在谷歌上搜索"扫描表征"这个词似乎找不到太多东西,我的教科书就是这么称呼这个过程的。我只是在寻找某种思维过程,或者指导方针来指导我!

有很多方法可以做到这一点,但最重要的原则是围绕某个轴旋转原始线,然后从当前行向下一行发射顶点,以生成三角形,记住通过将最后一行与第一行连接来"关闭"形状。

我个人会生成一个顶点缓冲区和一个索引缓冲区。我将绕Y轴旋转这条线N次,将每次旋转的线的点存储到顶点缓冲区中。

然后,算法的下一部分将为一个或多个行带生成索引(多个行带更容易,因为否则你需要创建简并三角形从一个带到下一个)

那么,假设你有一个顶点缓冲区V,原始行p中的一些点和行N中的一些点,你可以简单地迭代,通过发出索引I和索引I + p p * N次来生成三角形带。然后在给定顶点缓冲区和索引缓冲区的情况下渲染N个三角形条。

如果你想聪明点,你可以只存储一个索引缓冲区,其中包含单个条带索引,并在每次渲染时将p添加到基本顶点索引中。小心使用带有很多索引的高度镶嵌网格。有些卡片的最大顶点索引是65535,有些卡片的最大顶点索引稍微大一点。

我希望这是有意义的!

不太确定你想要实现的最终图像,但据我所知,你有一条"线"(这是一条直线吗?一条弯曲的"线"?-不太清楚)-你想让它们绕着某个轴旋转,这样它就会产生某种二维的"网格",比如圆盘或圆锥之类的?

你可以简单地尝试glRotatef(a,x,y,z)其中:

"a"是要旋转的角度是绕着它旋转的向量。

因此,如果你想围绕y轴绘制10次图形,那么它可能看起来像这样:

for(int i = 0; i<10; i++)
{
    float da = 2.0*3.14/10.0
    plotLine(); // function for plotting the line once in 3 space
    glRotatef(da, 0, 1, 0);
}

这将绘制线条,将整个图形旋转一小部分,然后再次绘制(这将重复10次,以便原始线条围绕一个轴绘制10次-创建"网格",我相信你正在尝试实现