问题标签 [vertex-array]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
535 浏览

opengl - 从活动顶点数组生成平滑法线

我正在尝试通过挂钩 OpenGl 调用来破解和修改旧的 opengl 固定管道游戏的几个渲染功能,而我目前的任务是实现着色器照明。我已经创建了一个合适的着色器程序,可以正确地照亮我的大部分对象,但是这个游戏的地形是在没有提供正常数据的情况下绘制的。

游戏调用:

定义和绘制地形,因此我将这些函数都钩住了,我希望在指针处循环遍历给定的顶点数组,并在每个 DrawElements 调用或 VertexPointer 调用上计算每个表面的法线,但我有想出一种方法来做到这一点 - 具体来说,如何读取、迭代和理解指针处的数据。在这种情况下,glVertexPointer调用的常用参数是size = 3, type = GL_float, stride = 16, pointer = some pointer. 挂钩 glVertexPointer,我不知道如何遍历指针并获取网格的所有顶点,因为我不知道所有顶点的总数,也不了解指针处的数据结构给定步幅 - 同样我应该如何构造普通数组

尝试为索引数组中的每个指定索引计算drawelements中的法线会更好吗?

0 投票
0 回答
133 浏览

opengl - 合并多边形

是否有任何快速算法可以将多边形合并在一起,如下图所示?

请注意,在该过程中创建了新顶点。

有什么方法可以足够快地实现这一点,以便在实时系统(游戏引擎)中实现它?

0 投票
1 回答
143 浏览

java - 顶点数组的问题

我正在尝试学习如何处理 VBO(VertexBufferObjects),但我无法比 Vertex Arrays 更进一步。我遵循了一些关于这个主题的基本教程,每个教程都以不同的方式进行教学,这让我很难理解和实施。

问题:渲染glDrawArrays();应该与立即模式渲染相同。因此,我尝试通过songho.ca测试代码,但我得到的只是本机代码中的 JVM 崩溃。询问谷歌根本没有帮助,因为这种方法有几十种变体。但我认为我的参数是主要问题。

这是我到目前为止得到的:

我使用 LWJGL,所以我将数据存储在 FloatBuffer 中:

我的三角形类由 3 个向量 ABC 组成,每个向量定义一个顶点。在第一行中,我为顶点分配空间,每个三角形 9 个浮点数(每个顶点 3 个浮点数,每个三角形 3 个顶点)。到目前为止没有什么异常,放入缓冲区的浮点数正好等于分配的大小。

立即模式渲染:

也没什么特别的,到目前为止看到的一切对我来说都很好。但是 Array 变体让我头疼......

崩溃的 JVM 产生的错误日志指向该glDrawArrays(GL_TRIANGLES, 0, buffer.capacity());行,但我找不到我的错误...

0 投票
1 回答
247 浏览

c++ - glDrawElements 在另一台机器上不起作用

我正在使用带有 g++ 的 OpenGL。这个简单的代码在我的系统中运行良好。它按预期绘制一个矩形。

但是在我朋友的系统中,它给出了分段错误。

GL_UNSIGNED_INT改为GL_INT. 然后至少它没有给出分段错误,但它没有渲染任何东西。

这可能是什么原因?

0 投票
3 回答
931 浏览

c++ - OpenGL - 使用 glDrawElements 进行索引绘制

我有几个关于 OpenGL 如何处理这些绘图操作的问题。

  1. 因此,假设我将 OpenGL 指针传递给我的顶点数组。然后我可以用一组索引调用 glDrawElements。它将使用顶点数组中的那些索引绘制请求的形状对吗?

  2. 在 glDrawElements 调用之后,我可以用另一组索引进行另一个 glDawElements 调用吗?然后它会使用原始顶点数组绘制新的索引数组吗?

  3. 当我重做所有这些调用时,OpenGL 是否会为下一帧保留我的顶点数据?那么下一个顶点指针调用会快很多吗?

  4. 假设最后三个问题的答案是肯定的,如果我想在每帧的多个顶点数组上执行此操作怎么办?我假设在超过 1 个顶点数组上执行此操作会导致 OpenGL 从图形内存中删除最后使用的数组并开始使用新的数组。但就我而言,顶点数组永远不会改变。所以我想知道的是opengl是否会保留我的顶点数组,以防下次我发送顶点数据时它会是相同的数据?如果没有,有没有办法可以优化它以允许这样的事情?基本上,我想在不更新顶点数据的情况下使用索引在顶点之间进行程序绘制,以减少开销并加速复杂的渲染,这需要不断变化的形状,这些形状将始终使用原始顶点数组中的顶点。

  5. 如果我只是幻想我的第四个问题,有什么好的快速方法可以在每帧中绘制大量多边形而只有少数会改变?即使是很小的变化,我是否总是需要传入一组全新的顶点数据?当顶点数据没有改变时,它是否已经这样做了,因为我注意到我无法真正绕过顶点指针调用每一帧。

  6. 随意完全抨击我在断言中犯的任何逻辑错误。我正在努力学习有关opengl如何工作的一切,并且我目前对它如何工作的假设完全有可能是错误的。

0 投票
1 回答
486 浏览

c++ - 没有 glVertexPointer,通用顶点属性缓冲区似乎不起作用

我正在绘制一个交错缓冲区 - 它是一个通用顶点属性缓冲区。布局由三个作为顶点坐标的浮点数和其他两个浮点数属性组成,因此交错:

我希望能够用 just 来绘制它glVertexAttribPointer,这似乎确实有效 - 但是,它只有在我也使用 glEnableClientState(GL_VERTEX_ARRAY)and时才有效glVertexPointer(),即使我没有gl_Vertex在着色器中访问!

最小顶点着色器(GLSL 1.20):

绘制缓冲区的代码:

如果我取消注释两条带注释的行,上面的代码中一切正常;否则,不会绘制任何内容。

这真的让我很难过......我是否错过了某处的一些状态变化,或者我忘记启用某些东西?

编辑:我没有使用 VAO,除了您在此处看到的内容之外,没有设置其他状态。没有纹理或其他缓冲区绑定。

0 投票
1 回答
326 浏览

opengl-es - WebGL - 使用哪个 API?

我想绘制多个多边形形状(每个形状都有自己的一组顶点)。我希望能够相互独立地定位这些形状。

我可以使用哪个 API 来设置顶点着色器的 a_Position?

  • A)gl.vertexAttrib3f
  • B) gl.vertexAttribPointer + gl.enableVertexAttribArray

谢谢。

0 投票
2 回答
717 浏览

opengl - 使用顶点数组时 OpenGL 纹理坐标发生倾斜

我有以下代码尝试使用顶点数组绘制一个矩形:

目的是通过三角形条带绘制一个简单的矩形,使用角模式 Far Left、Near Left、Far Right、Near Right。变量值如下:

我的纹理是黑色瓷砖,所有边缘都有细的蓝色边框。当使用上述指令绘制矩形时,它是完全蓝色的:

坏.jpg http://www.graemecentralstation.com/img/bad.jpg

显然,鉴于上述纹理坐标,我希望我的 2D 纹理完全可见。

如果我使用像这样的相同数组数据手动调用替换 glDrawArrays()...

...然后按照我的预期,使用可见的完整纹理贴图图像绘制矩形:

好.jpg http://www.graemecentralstation.com/img/good.jpg

知道为什么 glDrawArrays() 会严重扭曲我的纹理吗?

0 投票
3 回答
1083 浏览

opengl - 我必须在opengl中使用glGenVertexArray吗

从上面的代码可以看出,有些教程在使用opengl之前就使用了这个。但是我正在关注的教程直接使用glGenBuffers方法并且效果很好。因此,我完全混淆了什么glGenVertexArrays。遗憾的是它定义了缓冲区的使用方式,但没有人说以何种方式使用。你能帮我理解吗?

0 投票
1 回答
982 浏览

c++ - Opengl:如何对使用顶点数组制作的模型进行纹理处理?

我试图摆脱立即模式,因为我一直被告知这确实不是在 Opengl 中编程的最佳方式。我找到了一个制作立方体并为其着色的教程,但它不包括纹理。

这是我的代码:

这段代码将制作一个立方体,所以我想知道如何分别对每一面进行纹理化,以及如何使用 1 个纹理对整个模型进行纹理化。你会推荐什么?