opengl - 使用 OpenGL 4.3 创建形状

标签 opengl opengl-3

我使用 OpenGL 4.3 编写了一个简单的程序,它显示三角形、四边形和五边形。我在以下数组中定义了我的顶点:

vec2 vertices[NumPoints] = {
    vec2(-1, -0.75), vec2(-0.75, -0.25), vec2(-0.5, -0.75), //Triangle
    vec2(0, -0.25), vec2(0.5, -0.25), vec2(0.5, -0.75), vec2(0, -0.75), //Quad
    vec2(0.25, 0.25), vec2(0.5, 0.5), vec2(0.75, 0.25), vec2(0.65, 0), vec2(0.35, 0) // pentagon
};

为了简洁起见,我将省略大部分样板代码。在我的显示函数中,我有以下代码:

glDrawArrays(GL_TRIANGLES, 0, 3); // draw the points
glDrawArrays(GL_TRIANGLE_FAN, 3, 4); //quad
glDrawArrays(GL_TRIANGLE_FAN, 7, 5); //polygon

一切正常,没有任何问题。然而,如果您需要预先确切地知道需要多少个顶点,那么创建复杂的场景似乎相当乏味并且几乎不可能。我在这里错过了什么吗?另外,如果需要创建一个圆圈,我该如何使用 GL_TRIANGLES 来做到这一点?

最佳答案

在现实世界的应用程序中,您将进行场景管理,场景中有多个对象,每个对象有多个子对象。对象负责生成它们的顶点数据和相应的绘图调用并适本地调度它们。

例如,您可以拥有一个具有单个属性 - 边长的立方体对象。从该单个属性中,您可以生成渲染立方体所需的完整顶点集。

您还可以选择将立方体基元转换为另一个兼容的对象,例如具有 3 个属性 - 高度、宽度和深度的长方体基元,甚至是由面组成的任意多边形网格,面由由顶点组成的边。

按照这样的顺序对不同的场景对象进行排序是一个好主意,可以最大限度地减少绘制调用的数量,这是 3D 图形所面临的典型瓶颈。与实例化和自适应 LOD 相结合,您可以获得显着的性能改进。

对于圆形 - 在原始模式下,最有效的绘制方法是使用三角形扇形。但如果将圆形基元转换为多边形网格,则可以渲染正三角形。绘制圆所需的顶点数量将会增加。使用三角形扇形,第一个三角形需要 3 个顶点,然后每个附加线段仅需要 1 个附加顶点,使用正三角形,圆的每个线段都需要完整的 3 个顶点。

关于opengl - 使用 OpenGL 4.3 创建形状,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15981278/

相关文章:

c++ - 无法在 OSX 下编译 OpenGL 项目

java - 如何在 OpenGL 中渲染具有不同颜色侧面的立方体?

c++ - 用opengl画图SDL Renderer就没用了吗?

c++ - 如何在 OpenGL 中使用 SDL2 软件渲染?

opengl-3 - 获取 Opengl 的子弹物理变换矩阵

java - 在哪里可以找到 open4gl jar 依赖项?

python-3.x - 我的着色器出现错误并且不知道如何修复

c++ - 用 OpenGL 绘制彩色网格?

opengl - 使用固定函数管道在 OpenGL 中设置 VBO 的颜色属性

macos - NSOpenGLView 不会清除