扫描表示
OpenGL - Sweep Representations
我有一组点,限制在二维坐标平面上,特别是第一和第四象限(正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次-创建"网格",我相信你正在尝试实现
- 表示"accepting anything for this template argument" C++概念的通配符
- 如何将ampl中的集合表示为c++中的向量
- std::is_base_of表示ctor编译错误
- 输入中的字符串数未知(以字母表示)
- 我可以信任表示整数的浮点或双精度来保持精度吗
- 检查不带转换的扫描格式
- c++模板来表示多项式
- 询问在设计我的手臂模拟器功能表示格式1
- CMakeLists.txt中的命名空间表示法
- C++射线示踪剂ppm表示没有足够的数据来显示图像
- 如何计算Big-O表示法中的平均渐近运行时间
- 我应该如何表示我拥有的连续元素序列?
- 在C++中,使用带有 std::optional 参数的函数<T>来表示可选参数是否有意义?
- 在 std::无符号字符的向量处存储 int 的十六进制表示形式
- 表示类模板C++空类型
- 具有所表示类的相同构造函数签名的代理类模板
- 嵌套在循环中的两个循环的 big-O 表示法
- 具有引用成员的结构是否具有唯一的对象表示形式
- 使用 int 表示浮点除法 C++
- 扫描表示