OpenGL - 扫描表示

时间:2011-10-24 01:13:41

标签: c++ opengl glut modeling mesh

我有一组点,局限于二维坐标平面,特别是第一和第四象限(正x值)。我能够通过这些点划清界限。

我也可以在3D空间中绘制这些点,在另一个窗口中,作为一条线。我怎样才能围绕一个轴进行扫描,比方说,Y,这样我才能实现3D网格?我相信通常的例子是使用点在Maya中创建一条线,以创建一个高脚杯等。

我似乎无法通过谷歌搜索术语“扫描表示”,这是我的教科书所指的这个过程。我只是在寻找某种思考过程,或指导,嗯,指导我!

2 个答案:

答案 0 :(得分:2)

有很多方法可以做到这一点,但最重要的原则是围绕某个轴旋转原始线,然后从当前线发出顶点到下一行以生成三角形,记住“关闭”形状加入最后一行与第一行。

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

然后,算法的下一部分将为一个或多个线条生成索引(多个线条更容易,因为否则您需要创建退化三角形以从一个条带到下一个条带)

因此,假设您有一个顶点缓冲区V,原始线P中的多个点和多条线N,您可以简单地迭代,通过发射索引I和索引I + P,P生成三角形条带* N次。然后在给定顶点缓冲区和索引缓冲区的情况下渲染N个三角形条。

如果你想要聪明,你可以只存储一个带有单个条带索引的索引缓冲区,并在每次渲染时将P添加到基本顶点索引。小心使用具有大量索引的高度细分网格。有些卡的最大顶点索引为65535,其他卡的最大顶点索引略大。

我希望这是有道理的!

答案 1 :(得分:0)

不太确定你想要达到的最终影像,但据我所知,你有一条“线”(这是一条直线吗?一条弯曲的“线”? - 不清楚这一点) - 你想要围绕某个轴旋转它们,以便创建某种二维“网格”,如圆盘或圆锥等?

你可以简单地尝试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次 - 创建我相信你的“网格”正在努力实现