问题标签 [vertex-buffer]

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 投票
1 回答
12635 浏览

opengl - 使用 glDrawElements 很难理解索引

我正在尝试绘制地形,GL_TRIANGLE_STRIP但是glDrawElements我很难理解背后的索引glDrawElements...

这是我到目前为止所拥有的:

我相信我vArray是正确的,我在绘图时使用相同的值glBegin(GL_TRIANGLE_STRIP)/glEnd,效果很好。

我的猜测是只使用每个x顶点的坐标索引。但我不知道这是否是使用索引的正确方法glDrawElements

  • 0:从三角形第一个顶点开始的 x 坐标索引。位置:(-128,-128)。
  • 768:从三角形的第二个顶点开始的 x 坐标的索引。位置:(-128,-127)
  • 3:从三角形第三个顶点开始的 x 坐标索引。位置:(-127,-128)
  • 771:从第四个顶点开始的 x 坐标的索引,它将绘制第二个三角形。位置:(-127,-127)。

我认为到目前为止一切都有意义吗?

不起作用的是上面的位置值(我加倍检查vArray并且它们是正确的)与glDrawElements正在使用的不同。绘制了两个三角形,但它们比应有的大得多。它正确地从 (-128, -128) 开始,但它会变成 (-125, -125) 而不是 (-127, -127)。

我不明白我在这里做错了什么......

0 投票
1 回答
3676 浏览

opengl - 退化三角形和 GL_TRIANGLE_STRIP 的问题

我正在尝试仅通过一次调用来绘制多个三角形条,glDrawElements我对此事的研究告诉我我需要使用退化三角形。也许我对这个主题的理解是错误的,但我认为这应该让我从一条带“跳”到另一个。

我的整个代码可以在我发布的这个最近的问题上找到,如果你认为它是相关的,可以看看那里。

当然,我基本上是在尝试用 4 个三角形绘制 2 个四边形(为了简化目的),但彼此分开。为此,我使用这样的索引:

第一个条带的第一个顶点从 0 开始,第二条带的第一个顶点从 256 开始。这是该索引的最终结果:

http://i.stack.imgur.com/6Q3FD.jpg

这是正确的还是我认为“连接”两个四边形的线根本不应该存在?

0 投票
1 回答
890 浏览

c++ - 顶点缓冲区数据的内存管理

假设我需要渲染静态图片(100 颗星)。我将星数据(位置、颜色、大小)生成到 std::vector 星;

然后我创建了一个用于 D3D 渲染的类,它包含一个缓冲区:

在ctor中,我以这种方式对其进行初始化:

之后我可能会销毁 std::vector,因为它不再需要。

问题是:

  1. spDevice->CreateBuffer(&vertexBuffDescr, &initVertexData, &m_spStarBuffer)); 这种和平的代码将在哪里进行内存分配?是图形内存还是当前进程内存?

  2. 当我不再需要渲染星系地图时(例如,当我想移动到不需要星系地图的下一个级别时),我将销毁 CGalaxyMapRenderer。dtor 中会自动销毁 m_spStarBuffer。问题是:清除所有缓冲资源是否足够?或者我应该采取一些额外的步骤来释放内存?

0 投票
1 回答
866 浏览

opengl - 将顶点和索引缓冲区上传到 GPU

我正在创建一个地形引擎,目前我正在将整个地形 VB(顶点缓冲区)和 IB(索引缓冲区)一次上传到 GPU,因为地形并不大。目前是 256x256。

现在,假设我想创建一个程序地形,它使用 perlin 噪声来生成高度图。

当然,我可以生成“补丁”并将补丁的所有 VB 和 IB 一次上传到 GPU,但是当玩家移动很远并且必须生成新补丁时,我将不得不生成新补丁并上传将它们发送到 GPU。我心中的困惑或问题是:

  1. 将VB和IB上传到GPU很慢吗?当数据上传到 GPU 时,播放器会注意到闪烁吗?

  2. 如果我将补丁的VB和IB逐步上传到GPU而不是一次全部上传,性能会更好吗?基本上我在问VB和IB的大小是否很重要。

任何有关此概念的信息将不胜感激。

谢谢!

0 投票
1 回答
1384 浏览

ios - OpenGL ES2 顶点数组对象帮助

我无法理解如何在 OpenGL ES2(在 iOS 上)中使用 VAO 并让它们工作。我当前的渲染设置如下所示(在伪代码中):

初始化:

渲染一个框架:

这很好用,但是,两个 VBO 都具有完全相同的交错顶点属性结构,并且如您所见,我正在为每个 VBO 的每一帧设置和启用每个属性。Instruments 抱怨对 glVertexAttribPointer() 和 glEnableVertexAttribArray() 的冗余调用,但是当我将其中一个或两个移动到初始化阶段时,我要么在调用 glDrawElements 时得到 EXC_BAD_ACCESS,要么什么都没有绘制。

我的问题是我是否需要在每一帧都这样做,如果我不这样做为什么它不起作用,以及我将如何使用 VAO 来解决这个问题。

0 投票
1 回答
8204 浏览

opengl - OpenGL顶点缓冲区对象,我可以访问顶点数据以用于其他用途,例如碰撞检测吗?

我目前正在使用 Superbible 第 5 版附带的 GLTools 类。我正在查看 GLTriangleBatch 类,它具有以下代码:

据我了解,代码传递指针 pVerts、pNorms、pTexCoords、pIndexes 的数组并将它们存储在顶点数组对象中,该对象本质上是顶点缓冲区对象的数组。这些存储在 GPU 的内存中。然后删除原始指针。

我有兴趣访问顶点位置,它们保存在 pVert 指向的数组中。

现在我的问题围绕着碰撞检测。我希望能够访问我的 GLTriangleBatch 的所有顶点的数组。我可以vertexBufferObject稍后使用某种 getter 方法通过 获取它们吗?最好只保留 pVerts 指针并为此使用 getter 方法吗?我在考虑性能方面,因为我希望将来实现一个 GJK 碰撞检测算法......

0 投票
2 回答
3162 浏览

opengl - 如何修复以下 gcc 警告?

我已经开始学习 OpenGL 并设法使用顶点缓冲区对象创建一个旋转立方体。但是,当我编译我的代码时,gcc 会发出以下警告:

我应该怎么做才能修复这些警告?

这是我的代码:

此外,我使用以下命令编译我的代码:gcc sdlogl.c -g -Wall -lSDL -lGL -lGLU

0 投票
2 回答
1394 浏览

opengl - 经典的“什么都没有被渲染”的 OpenGL 问题

我知道,这很令人沮丧。我无法在我的 OpenGL 应用程序中显示任何内容——我看到的只是一个空的视口。

当我第一次开始编写应用程序时,我是手动绘制顶点(使用GL_QUADS)并且一切正常。然后我决定改用VBO V ertex B uffer O bjects )。现在没有任何效果。

这是顶点的结构:

如您所见,它非常简单 - 顶点和 RGBA 颜色数据的 x 和 y 坐标。这是填充顶点和索引缓冲区的代码:

最后但同样重要的是,这里是应该绘制矩形的代码:

我不知道为什么什么都没有被渲染。顶点和颜色数据与使用glVertex2f().

0 投票
1 回答
9010 浏览

iphone - OpenGL ES 2.0 和顶点缓冲对象 (VBO)

我不知道如何在 iphone 的 opengl es 2.0 中为我的地形使用顶点缓冲区对象。这是静态数据,所以我希望通过使用 VBO 来提高速度。在常规 OpenGL 中,我使用显示列表和着色器没有问题。但是,在 opengl es 2.0 中,我必须将顶点数据作为属性发送到着色器,并且不知道这如何与 VBO 一起使用。顶点缓冲区在调用时如何知道将顶点数据绑定到哪个属性?这在opengl es 2.0中甚至可能吗?如果没有,还有其他方法可以优化静态地形的渲染吗?

0 投票
1 回答
550 浏览

directx - 在directx 9中使用带有固定功能管道的setvertexdeclaration

我正在尝试使用我自己的顶点结构,将顶点上传到顶点缓冲区(索引到索引缓冲区,没有 FVF 代码),设置顶点声明和流源并使用,并使用带有固定着色器的 DrawIndexedPrimitive 绘制它们(但不是FVF)。

我是否必须编写自己的着色器才能使用 directx 9 SetVertexDeclaration ?我可以使用带有 SetVertexDeclaration 和 fixed-pipeline 的自定义顶点结构吗?如果可以,对固定管道和顶点声明有任何限制吗?

自定义顶点结构: