问题标签 [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 投票
2 回答
3978 浏览

opengl - 有多少 VAO 和 VBO

据我了解:VAO 代表某种状态。如果我绑定一个 VAO,为索引和东西添加一些 VBO 和元素缓冲区,我可以保存我想要绘制和激活的对象的特定状态,并在以后想要渲染东西时轻松绘制它们。正确的?

所以 VBO 保存实际数据,而 VAO 只是一个“包装对象”,它保存指向我为它定义的所有缓冲区的指针?

更改 VAO 的成本很高(更改 VBO 也是如此?!)。目前我加载网格并将它们组合到模型中。每个模型都使用自己的 VAO,并有一个 VBO(带有顶点)和一个带有索引的元素缓冲区。

现在据我了解,这是胡说八道,因为我世界中的每个对象(具有模型)都使用它自己的 VAO。我的世界中大约 30 个对象不是问题,但我想正确地做到这一点,将来可能有成百上千个对象,然后性能会大大下降。

因此,就模型而言,许多对象是“相同的”。我的意思是,例如,如果您在世界上有某种树类型,您可能会多次使用相同的模型,只是在不同的位置。

现在我该怎么做呢?我是否应该手动跟踪我的 VAO,例如:(伪代码如下!)

然后如果我加载一个模型,只需检查 ID 是否已经绑定(如何?)并在那里添加另一组 VBO(或者甚至添加到正确的 VBO?如果是,如何?)

我正在考虑在这里举办一场大型比赛。假设游戏中有数千个角色。当然不是所有这些都是同时渲染的,但是我不能为它们中的每一个创建一个 VAO 和 VBO,可以吗?

我觉得缺少了很大一部分……例如为不同目的有效地再次实例化和使用(或多或少)相同的数据。

这是我缺少的一步,即如何真正优化现实世界中 VAO 和 VBO 的使用。

0 投票
2 回答
876 浏览

opengl - 使用 glDrawElements、Index Buffer 和启用的 GL_CULL_FACE 横向绘制圆柱体

我需要这个: 我需要什么气缸

我必须使用glDrawElements这个:glEnable(GL_CULL_FACE)

我尝试了什么:

糟糕的结果: 坏缸

但它可以用 delete 修复glEnable(GL_CULL_FACE);,但我必须使用它。

0 投票
2 回答
818 浏览

opengl - VertexArrayObject,如何设置“默认”属性值?

我正在开发一个 OpenGL 应用程序,并试图使 ShaderPrograms 和 VAO 相互独立。说独立我的意思是 ShaderProgram 和 VAO 都可以有不同的属性集。

在创建新的 ShaderProgram 时,我将已知属性列表显式绑定到预定义位置,即使着色器不使用它们。

我正在尝试对 VAO 做同样的事情,但是如果网格不包含属性数据,我想设置默认值:

这段代码似乎正在工作(到目前为止),但我不确定这是否是正确的方法。VertexAttrib4f 在哪里存储数据:在 VAO 中,还是上下文全局状态,我需要在每次绘制调用后重置它?

0 投票
1 回答
504 浏览

c++ - 使用 VAO 在 OpenGL 中更改绘制的实例化顺序

我尝试使用 VAO、VBO 和 IBO 在平面上绘制一堆球体。在使用这些之前,一切都按预期绘制。在我开始使用这些之后,事情变得很奇怪。我不能在这里发布我的整个代码,因为我有 5 个类(但如有必要,我可以提供指向我的代码的链接),所以我会尝试发布我认为有用的内容。

有了这个类,我可以画一个球体:

有了它,一架飞机:

另一方面,这是我的主要内容:

实例化平面然后是球体程序,我得到以下结果(根本没有平面):

在此处输入图像描述

改变顺序,结果如下:

在此处输入图像描述

我试图找到关于我所缺少的东西的线索,因为我不知道出了什么问题。在使用 VAO(仅使用glVertexAttribPointerand glDrawElements)之前,一切都已正确绘制。

先感谢您。

0 投票
1 回答
123 浏览

colors - 在 jogl 中使用 VAO 应用颜色

我正在尝试在 jogl 中为我的多边形着色。我将顶点存储在一个数组中,一个三角形顺序的索引数组和一个颜色数组。代码如下,但我面临的问题是三角形是白色的,而不是颜色缓冲区中的颜色。

我正在 NASA 世界风球上进行此渲染。但我认为这不会引起任何问题。有人可以帮我解决问题吗?我坚持了一段时间。

谢谢,

0 投票
2 回答
911 浏览

opengl - 在 OpenGL 4 中创建第二个 VAO 并绘制两个形状

我正在尝试解决 Anton's OpenGL 4 Tutorials 一书中的实验。在第一章的实验中,它要求创建第二个 VAO 来绘制 2 个形状而不是一个,但我不知道如何做到这一点,如何同时显示第二个?

0 投票
0 回答
377 浏览

java - 无法在 LWJGL3 中创建 VAO

每当我尝试填充 VAO 时,都会出现空指针异常

错误

引发此异常的代码是此 Loader 类中的 createVAO 方法。

我不认为真的需要这门课,但这是我的主要课程

我正在编写此代码的计算机是 Macbook Pro 2014 型号,运行 osx Yosemite 10.10.1 不知道这是否与错误有关

0 投票
1 回答
1814 浏览

java - Java LWJGL 正确渲染 .obj

在我的主类下面,我试图从搅拌机 .obj 文件中渲染一个 obj,然后将其重新格式化为(据说)为我的渲染工作,它给出了错误。我怎样才能解决这个问题?

主类:

OBJLoader 类:

班级型号:

班级面孔:

抱歉,如果其中一些内容过多,我知道错误来自第 85 行,但我似乎无法弄清楚如何解决它。

OBJ 文件示例(瘦身):

0 投票
1 回答
309 浏览

c++ - OpenGL:VBO删除的奇怪行为?

我在顶点缓冲区对象(VBO)中遇到了一个奇怪的问题。我创建了一个包含 VBO 创建和删除的类。我删除了类的析构函数中的所有 VBO(使用 glDeleteBuffers())。

现在我创建了 2 个 OpenGL 上下文窗口,每个窗口都使用 VBO 类运行。现在,当我关闭一个 GLwindow 时,它的析构函数调用和 VBO 也被删除,但奇怪的是这种析构函数对第二个窗口的影响,在第二个窗口上运行的对象消失了。当我使用已弃用的 glVertex3fv 进行渲染时,我可以看到对象,但不能使用 VBO。如果我不使用 GLwindow 类的析构函数删除 VBO,则一切正常。我不应该在每次删除上下文时删除 VBO 吗?

我的问题是为什么会这样?我知道 OpenGL 是一个状态机,但我们不能创建一个全新的独立类对象吗?

我注意到与 (glDeleteTextures()) 相同的效果如果我不使用析构函数删除纹理,不会发生任何奇怪的事情,但是如果我删除一个 Glwindows 纹理,它会影响第二个 Glwindow 渲染并且纹理会消失。

这是已知问题还是仅发生在我身上?

0 投票
1 回答
176 浏览

c++ - OpenGL 如何知道它应该根据 GL_ARRAY_BUFFER 将顶点绘制到什么位置?

例如,我有以下代码:

我的问题是,glDrawArrays() 怎么知道绑定到 GL_ARRAY_BUFFER 的内容是指关于位置的信息,而不是关于颜色的信息?