问题标签 [vao]

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 回答
13565 浏览

opengl - OpenGL 有多少 VAO

我正在编写一个 OpenGL3+ 应用程序,并且对 VAO 的使用有些困惑。现在我只有一个 VAO,一个围绕原点的标准化四边形集。这个单一的 VAO 包含 3 个 VBO;一个用于位置,一个用于表面法线,一个 GL_ELEMENT_ARRAY_BUFFER 用于索引(所以我只能存储 4 个顶点,而不是 6 个)。

我已经设置了一些辅助方法来将对象绘制到场景中,例如drawCube()获取位置和旋转值并遵循程序;

  • 绑定quad VAO。
  • 每个立方体面:
    • 创建一个表示此人脸的模型矩阵。
    • 将模型矩阵上传到uniform mat4 model顶点着色器变量。
    • 调用glDrawElements()以将四边形绘制到此面的位置。

我刚刚开始添加每个立方体颜色的任务,并意识到我不能将我的颜色 VBO 添加到单个 VAO,因为它会随着每个立方体而变化,这感觉不对。

我刚刚阅读了这个问题;OpenGL VAO best practice,它告诉我我的方法是错误的,我应该使用更多的 VAO 来节省每次设置整个场景的工作。

应该使用多少个 VAO?显然我的 1 方法不是最优的,场景中的每个静态表面是否应该有一个 VAO?那些会动的呢?

我正在为每个顶点写入一个统一变量,对吗?我读到uniform着色器变量不应该在中帧改变,如果我能够将不同的值写入我的uniform变量,制服与in顶点着色器中的简单变量有何不同?

0 投票
1 回答
348 浏览

c++ - 从非主线程加载的 VAO 崩溃

在我的代码中,我有一个由两个缓冲区对象和一个顶点数组对象支持的对象的包装类。我在构造函数中使用它生成它们(稍微简化):

printf 在主线程的前几个创建中给出了这个。

在 VAO #2 和缓冲区 #3 之间有一个非索引的。这对我来说看起来不错。每个数组对象都有两个附加到它的唯一缓冲区。

我稍后也会使用此代码来加载后台资源(而是生成它们)。每个线程都有自己的上下文,使用 glfwCreateContext 创建并与主窗口共享资源。首次创建这些资源时,会出现以下输出:

此后很快,VAO #1 使用不同数量的顶点绘制 9 次,并且不可避免地会出现段错误。

我的问题是,这是一个错误还是我做错了什么?我正在运行带有 Nvidia 卡的戴尔笔记本电脑的 Linux Ubuntu 上对此进行测试。

0 投票
1 回答
1290 浏览

c++ - OpenGL有没有办法复制现有的VAO

在我的代码中,我有一个 Mesh 类,它是基本 VAO 和 VBO 功能的包装器。它的构造函数接受一个顶点和索引数组,并有一个 draw() 函数。

我在其实例化期间调用 glGen* 函数,在其析构函数中调用 glDelete* 函数。

显然,这在分配/复制构造过程中留下了问题:

为了解决这个问题,在赋值和复制构造函数中,我使用 glMapBuffer 重新缓冲 VBO 数据:

有没有办法将 VAO 状态从一个 VAO 复制到另一个。或者我必须重新调用所有 glVertexAttribPointer() 等函数以获得新的 VAO。

0 投票
0 回答
201 浏览

opengl - OpenGL 3.2 VertexArrayObjects & VertexBufferObjects

我试图了解(通俗地说)VAO 和 VBO 的工作方式。

我编写了一个小的 OpenGL 程序,它以图形方式创建了一个看起来很酷的对象。

它使用两个三角形和 VAO/VBO 绘制一个正方形。它还扩大了顶点。

下面是我的代码(为了清楚起见,我已经包含了除 win32 之外的所有内容):

我的问题是,我需要多个 VAO 和 VBO 来绘制更多对象/形状吗?

基本上我从一个三角形的教程改编了这个程序。我想知道像我一样绘制第二个三角形是否正确,或者我是否应该以不同的方式使用 VAO 和 VBO。

例如,如果我想画第二个正方形,我需要更多的 VAO 吗?抱歉,如果这个问题看起来很愚蠢或毫无意义,我是 OpenGL3.2 的初学者。

欢迎任何建议或解释。

0 投票
0 回答
65 浏览

c++ - 绑定多个 VertexArrays - OpenGL

您可以将单独的 VAOglBindVertexArray(m_vaoID);与在两个单独的函数中定义的几何图形绑定createGeo();createGeoAgain();然后使用该glDrawArrays(...)函数两次在一个显示函数中绘制各个对象吗?

目前,我在一个数组()中定义了两个正方形的顶点12 vertex's,在一个函数中......但是说我想要单独的数组来保存每个形状的顶点?( 6 in each)?

我试过了,它只渲染了一个......所以我对绑定感到困惑......

0 投票
1 回答
1362 浏览

c++ - OpenGL对象不显示,着色器相关

我正在尝试使用着色器在 opengl 中渲染,生成背景颜色并且没有出现错误消息,但我尝试渲染的对象没有显示。我整天都在努力解决这个问题,但一无所获。我正在从.txt文件中读取顶点和索引,但这似乎不是问题,因为所有数字都是它们应该是的。这是我的初始化

主要的:

显示:

在矩阵变换之后,顶点都在它们应该在的位置,我之前使用过相同的矩阵类没有问题,所以我认为不是这样。我认为这与着色器有关,但我还是 opengl 的新手,我真的不确定。这是顶点着色器

片段着色器

0 投票
1 回答
226 浏览

c++ - opengl 多个对象,纹理和非纹理,伪影

我正在绘制一个悬挂着钟摆的框架,钟摆应用了纹理,但框架没有纹理。当我同时显示我得到 在此处输入图像描述

但是当我只渲染他们正确绘制的钟摆时,我得到了

在此处输入图像描述 我不确定这是为什么。我炸毁了钟摆,纹理似乎映射到框架中的顶点。这是 vao decleration

和显示器

}

这是维护顶点的问题还是其他问题?

0 投票
1 回答
767 浏览

c++ - OpenGL instanced arrays strange vertex positions

I am having troubles getting the correct output from my OpenGL application after switching from normal drawing with VBOs/VAOs to instanced arrays with VBOs/VAOs. The output is supposed to be a bunch of spheres, but instead it's crazy positioned vertices forming strange triangles. I've checked the vertex positions in the debugger console, but there didn't seem to be anything suspicious. They were all in the range from -10 to 10 and in the scene they are going to probably +/-30.

Here are the important parts of my code. Please tell me if I am not seeing something. I would greatly appreciate it!

Once I'm ready with the setup I go to the drawing.

And here are the important parts of the vertex shader:

The result looks like this:

end result

Please help me somehow. I've been struggling with this for the past 3 days. Thank you all!

EDIT: I have been wondering if it had something to do with the column/row major order, so I've tried transposing the matrix, but I came to the conclusion that was not what's causing the issue.

0 投票
1 回答
515 浏览

c++ - OpenGL是否可以同时激活两个VAO?

所以我最近了解了 VAO(顶点数组对象),到目前为止它们看起来非常棒,但我有一个我似乎无法解决的问题。我有一堆模型,它们的顶点状态存储在单独的 VAO 中,所以一次调用

就是开始绘制这个实例所需要的一切。问题在于我必须绑定一个额外的 VAO,一个包含一个

称呼。所以它包含偏移量、UV 偏移量、颜色叠加等数据。当我绑定它时,前一个似乎解除了自身绑定,我猜这在 OpenGL 中是有道理的,但我不知道该怎么做才能让两者都处于活动状态?

这个想法是绘制所有共享相同模型的静态对象,而不需要每帧上传任何数据。这完全是错误的方法吗?

0 投票
1 回答
523 浏览

ios - OpenGL ES 顶点数组对象和奇怪的伪影

我正在渲染一个必须在方向发生变化时重建的场景,以便适当地填充屏幕。场景渲染了一些常规彩色四边形的顶点数组对象和一组纹理顶点数组对象。所有这些绘图元素,包括任何着色器和相关的顶点、索引等数组都包含在一个类中,所以我每次都会吹走这个类并在旋转时执行一个新的 alloc/init。

首次创建场景时,一切看起来都很好。然而,由于某种原因并且没有明显的模式,奇怪的三角形可能会出现在任何后续的旋转中。对于特定场景,每次加载时的发生似乎都是确定性的。然而,从一个场景到另一个场景,有时会出现文物,有时一切看起来都很可爱。

我不知道这是否是我破坏记忆的方式(即使在 ARC 中,我也需要释放其中的一些),还是我创建 VAO 的方式。然而,由于问题仅在我拆除场景并重建它时才会出现......然后我开始用这个思考过程再次旋转我的轮子。

我有很多代码,所以这里有一些(希望是)相关代码。

这是彩色四边形 VAO 的一些绘图代码。我正在向 NSMutableArray 添加顶点,因为我不知道会有多少个四边形。

为纹理四边形创建 VAO 的一些代码:

我的拆解代码:

在过去的几天里,我在网上搜索并尝试了我能想到的一切来找出这个问题,它开始变得非常糟糕。任何想法将不胜感激!

更新:我发现了问题!

正如我所怀疑的那样,我花了这么多天试图找到的东西非常微不足道 - 在所有错误的地方!

罪魁祸首是这一行:

在我注意到这个混乱的计算并立即将其更改为:

即我改为计数到实际指数计数。