问题标签 [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.
c++ - 使用 IBO/EBO 时,程序仅在我调用 glBindBuffer 以在创建 VAO 后绑定 IBO/EBO 时才有效
出于某种原因,该程序仅在我创建 VAO 后再次绑定 IBO/EBO 时才有效。我在网上阅读了多个 SO 帖子,认为 glBindBuffer 仅绑定当前缓冲区,并且不会将其附加到 VAO。我认为 glVertexAttribPointer 是将数据附加到 VAO 的函数。
如果我没有第二个 glBindBuffer,程序就会崩溃。我只想知道为什么我必须在创建 VAO 后再次调用 glBindBuffer,当调用 glBindBuffer 时只会使缓冲区成为其他函数的活动缓冲区。
opengl - OpenGL - Can't get shader to display vertex colors
So I finally set up opengl window properly and got triangles to show up using vaos, vbos and glDrawElements() etc.
But now I have new problem - can't get shaders to work. I don't quite understand them yet. I want fragment shader to show vertex colors which I put into a separate buffer object.
Example code:
And render:
Everything seems to work fine except for shaders. Any help is appreciated :) Thanks.
c++ - 使用 VAO/VBO 进行 OpenGL 模型/纹理渲染
我正在尝试使用Assimp渲染带有纹理的 3D 模型。转换非常完美,所有纹理位置以及未加载的内容。我已经通过将纹理图像以 2D 的形式绘制到屏幕上来测试它们。由于某种原因,它不会将纹理渲染到模型。我是 OpenGL 的初学者,所以如果我解释不正确,请原谅我。我基于代码的教程来自这里,但由于我有自己的相机/运动系统,所以我删除了很大一部分。
模型渲染如下:http: //i.stack.imgur.com/5sK9K.png
而使用中的纹理看起来像这样:http: //i.stack.imgur.com/sWGp7.jpg
相关渲染代码如下:
从数据文件生成纹理:
生成 VBO/VAO:
渲染模型:
任何其他相关代码部分都可以在我的开放 github 项目https://github.com/kwek20/StrategyGame/tree/master/Strategy中找到
Mesh.cpp 是相关的,还有 main.cpp 和 Camera.cpp。
据我了解,我很好地遵循了指南,创建了一个 VAO,创建了 VBO,添加了数据并启用了正确的顶点数组属性来渲染场景。
我检查了所有数据变量,一切都按计划填写
这里的任何人都可以发现我犯的错误并或解释它吗?由于我的限制,有些链接的输入很奇怪:(
c++ - OpenGL - 在渲染循环中创建 VAO 是一个不错的选择吗?
我已经为我在 OpenGL 中设计的内容粘贴了一个伪代码。
我有的:
- 在下面的函数 createVAOs() 中,我创建了我想要的所有顶点 (VBO),并创建了索引 (EBO) 以绘制一些漂亮的正方形。
- 然后,在主循环中,在函数 draw_textures() 中绑定纹理并在 VBO 上的顶点上绘制一个带有纹理的元素。
我想要的是:
- 现在我想动态更改 VAO。让我们想象一下:我想为特定的三角形添加新纹理,甚至删除我的 VAO 上的一些三角形。但是由于 VAO 是在循环之前创建的,所以我有一个问题......我不知道每次在循环内创建 VAO 是“明智的”还是“优化的”......
我的问题:
- 将 VAO(VBO 和 EBO)的创建放在渲染循环中是否明智?如果没有,最好的解决方案是什么?
考虑下面我的伪代码:
c++ - OpenGL - Easiest way to draw a square with a texture
Usually I draw a square with a texture like this:
- Create a VBO with 4 coordinates (A,B,C,D for the square)
- Create a EBO with 4 indices (A,C,D and B,C,D) telling that I want to draw a square out of 2 triangles.
- Draw this elements with a texture
Isn't there an easiest way without having a EBO array?
Because it is not very handy to use... If I want to use like this:
VAO = [-0.8f, 0.5f, 0.0f, ...]
EBO = [0, 1, 3, 1, 2, 3, ...]
Then I need to remove a square from my VAO... then I also need to remove the indices from my EBO array and re-arrange it. Is there a better way to do this?
c++ - OpenGL - 将 VAO 定义与 VBO 和其他缓冲区创建正确分离
运行一个非常简单的绘制三角形示例,我试图找出哪些线专门引用了 VAO 定义,哪些线可以分开。
目前我正在使用这段代码:
缓冲区创建和填充:
VAO定义:
绘图循环
如果在绘图循环中我每帧都包含 VAO 定义,则该示例运行良好,但如果我在开始绘制之前只定义一次 VAO,则它不起作用,所以我猜 VAO 定义缺少一些代码。
我错过了什么?
c++ - Opengl VAO 被覆盖
我正在学习opengl,目前我正在与VAOs斗争。我想使用 VAO 绘制一个立方体和一个三角形,但不幸的是,只绘制了我稍后创建的对象。这就是我在主循环中所做的:
两者都generateCube()
做generateTriangle()
基本相同的事情:创建顶点,创建 vbo,创建 vao 并设置属性。然后他们返回 vao id。例如generateTriangle()
:
使用此代码,仅绘制立方体。此外,如果我注释掉这些线条:
主要是glBindVertexArray(cube_vao);
,glDrawArrays(GL_TRIANGLES, 0, 12*3);
三角形被绘制但具有立方体的颜色和位置,这让我发疯。
如果有帮助,我将使用 OSX 和着色器版本 120。
opengl - 配置 VAO 以处理具有多个网格的 VBO
我正在尝试使用单个 VAO 来表示包含多个网格的单个 VBO。现在我有:
更多来源:http: //pastebin.com/PDuk3fDu
我认为我的问题主要存在于代码段的最后一行。
我以为我可以在同一个 VBO 中填充两个不同的网格?如果我在设置缓冲源时只能设置看似一个的状态,这怎么可能?
我遇到了这个麻烦,因为我读到每个 VBO 都有一个 VAO 效率非常低,因为绑定是一件相对昂贵的事情。我还读到在同一个 VBO 中存储具有相似需求的网格是个好主意。
c++ - C++/OpenGL:VAO 单独工作,但不能一起工作
尝试使用 C++/OpenGL 实现 VAO 的基本示例,我遇到了一个特殊的问题,在搜索了一段时间后我还没有找到解决方案。我的程序应该将纹理(CT 图像)渲染为正方形,然后在顶部绘制多边形(使用 GL_LINE_LOOP)以勾勒出特定器官的轮廓。首先,我在初始化时为 CT 图像创建一个 VAO:
接下来,我在初始化时为特定轮廓集创建一个 VAO:
这就是事情变得不稳定的地方。我的渲染代码如下:
当我只注释掉轮廓的 glDraw 命令时,CT 图像绘制得很好。同样,当我仅注释掉 CT 图像的 glDraw 命令时,轮廓绘制得很好。但是,当我尝试在同一个函数调用中渲染它们时,轮廓 VAO 会从 CT 图像 VAO 中抓取顶点缓冲区并进行渲染。
我希望我可以插入图片,但我的代表。还不够高……
在查看了几个地方并阅读了 VAO 之后,我很困惑。任何帮助将不胜感激。这是我的比赛。信息:Ubuntu 14.04,Intel i5 CPU,ATI Radeon 显卡,运行 OpenGL 4.3。谢谢!
opengl - 加载多个索引 VAO 时,它们的几何形状似乎合并
我编写了一个非常基本的 .obj 文件加载器(只加载顶点坐标和三角形面索引)和渲染器。当我一次只加载一个模型时,效果很好。当我加载第二个模型(或更多)时,每个模型都会绘制自己和其他模型的一部分,我绞尽脑汁想弄清楚为什么会这样。
一些相关的代码片段:
这是我打开 .obj 文件并从文件中读取顶点坐标和三角形面索引的地方。
在 loadFromFile 方法结束时,我们将索引和顶点向量传递给 model::load() 方法,该方法创建并绑定 VAO、VBO 和 IBO。
加载模型后,它的 VAO id 将存储在类变量中。VAO 在 model::bind() 方法中加载。
并通过调用 glDrawElements() 进行绘制
模型在 level::draw() 方法中绘制:
没有 OpenGL 错误,当我将其打印到控制台时,文件解析会生成正确的值。
如果有人能指出发生这种情况的方式/原因,我将不胜感激。