【问题标题】:Using vertex array, quad array to create mesh of quad使用顶点数组、四边形数组创建四边形网格
【发布时间】:2012-11-17 13:02:20
【问题描述】:

我正在做OpenGL 程序,我需要创建一个用户定义的维度四边形网格。

据我目前了解的是,我使用顶点数组来绘制实际上将形成四边形网格的四边形。这是一个非常简单的概念,但我很难理解它。

所以如果我理解不正确,请纠正我。

因此,如果用户想要制作 4x4 网格,则总共有 16 个四边形和 64 个顶点来放置它们。 所以当用户定义网格的分辨率时(哦顺便说一下,边界大小已经在开头给出了),我创建了这 64 个顶点。

到目前为止,我是否正确?

我将与这些四边形进行交互并重新塑造它们以形成一座山的形状。

当然,我需要更大的分辨率,可能是 32x32 甚至更大才能正确显示这样的东西。

【问题讨论】:

  • 这些四边形是否形成一个大四边形? EG,2x2 看起来会不会像四方球场?

标签: c++ arrays opengl mesh vertex


【解决方案1】:

如果我的理解正确,您想制作一个四边形网格,然后再创建一个大四边形。

对于 4x4 来说,它看起来像这样

 _ _ _ _
|_|_|_|_|
|_|_|_|_|
|_|_|_|_|
|_|_|_|_|

在这种情况下,您只需要 (4+1)x(4+1) 个顶点,因此需要 25 个顶点。您可以唯一地指定每个四边形的四个顶点,尽管除了对网格来说是不必要的(并且浪费内存和速度)之外,您最终可能更难添加“山”功能(类似于我的地形)猜测)。如果您在网格的中间移动一个顶点,您可能希望它为使用该顶点的所有四个四边形移动。如果您有四边形共享顶点(就像它们在网格中所做的那样),移动一个点会改变使用该点的所有四边形。

基本上,指定所有唯一的顶点并将它们连接为四边形。最好避免冗余。

此外,如果您正在学习 OpenGL,请确保您没有使用固定功能管道进行学习(如果您有 glBegin()glVertex3f(),则您使用的是固定功能管道)。你不应该使用它的原因太多了(它已经有几十年的历史了,它更慢,它几乎没有那么灵活),但也许最大的原因是如果你想做真正的图形是在浪费时间。您必须学习如何使用可编程流水线,并且在您的脑海中拥有固定的功能流水线习惯和思维方式只会使其变得更加困难。

【讨论】:

  • 非常感谢您的帮助!我刚刚开始研究它,它引导我走向正确的方向!我使用旧函数作为第一个函数,只是为了绘制细分曲线并玩弄它们——转换、旋转那种东西。这对我来说很有挑战性,但我很肯定我能做到!
  • 所以顶点数组就是 vertices[] = {0, 3, ...}?这足以容纳我的网格的所有顶点吗?要求是 32x32 或 64x64,我正在放置一个斑点对象并使用高斯斑点和平滑阴影定位它们
  • 不要静态定义它们(工作量太大!) - 根据四边形的尺寸生成它们。他们最终看起来像 (0,0),(1,0),(2,0)...(0,1),(1,1),(2,1)...(n, n)。然后你可以通过这个数组的索引来定义每个四边形的顶点,你也应该生成这个数组。
  • "我建议您创建一个 C 文件(或 C++ 类),它具有以下功能(或方法,如果您使用的是类): a. allocateMesh(int dim1, dim2) //例如 64X64 或 32X32 等,分配顶点数组和四边形数组内存 b.initializeMesh(originX, originZ, xWidth, zWidth) // 构造顶点数组和四边形数组”这是我的教授给出的指导方针的一部分。您认为 originX 和 Z 在 initializeMesh 函数中的用途是什么?
  • 如果您还有其他问题,最好先完成此问题并提出新问题。评论不适用于要求澄清或非常简短的后续问题,不适用于新问题。
猜你喜欢
  • 1970-01-01
  • 2020-10-16
  • 1970-01-01
  • 2017-04-29
  • 1970-01-01
  • 1970-01-01
  • 2012-04-06
  • 2011-10-23
  • 2019-12-14
相关资源
最近更新 更多