问题标签 [gldrawarrays]

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

c++ - 使用一个 glDrawArrays 命令绘制多个不同颜色的三角形

我正在尝试在 OpenGL 中编写一些东西,我是一个初学者,对我犯的任何错误感到抱歉。

一般来说,我只想绘制两个不同颜色的三角形,我使用以下代码:

现在..如果我. 想用我可以做的同一个命令绘制两个三角形

但随后它以相同的颜色绘制两个三角形。

有没有办法通过仍然只使用一个glDrawArrays()命令以不同的颜色绘制每个三角形?

如果没有..还有其他命令我应该去吗?

谢谢你

0 投票
1 回答
284 浏览

webgl2 - Webgl gl_VertexID 受drawArrays偏移影响?

当使用偏移量调用 drawArrays 时(“第一个”参数不为零),第一个 gl_VertexID 是否仍然从 0 开始,还是从偏移值开始?

0 投票
1 回答
997 浏览

opengl - 如何使用 vbo 为每个三角形着色

我已经glDrawArrays用 vbo 绘制了我的三角形。现在我想用不同的颜色为每个三角形着色。我试图按照我用来制作顶点的方式进行操作,但徒劳无功。我需要你的帮助。

这是我尝试绘制没有颜色的三角形的方法:

正如我所说,我尝试为颜色复制同一行,但没有奏效。

0 投票
1 回答
184 浏览

opengl-es - 如何将纹理仅绑定到 OpenGLES 中的一个对象?

我在要绘制的对象之前激活纹理。但是纹理显示在两个对象上。为什么呢?我应该在第一个要绘制的对象之前取消绑定纹理吗?- 我尝试使用 glDisable 和 glBindTexture 但没有帮助。这是我的代码:

更新 这是我的着色器程序:

0 投票
2 回答
210 浏览

opengl - QOpenGLWidget,QOpenGLWindow的问题

谁能告诉我为什么我的paintGL中的以下代码在使用DrawArrays函数时不绘制?我在最后一个 Windows 10 上的 Qt Creator 中使用 Qt 5.14.2。

一些评论;

我正在尝试使用以下声明来了解 Qt 中 OpenGL 实现之间的差异。随着时间的推移,我将使用我最喜欢的实现来编写我的应用程序。

  1. 类 OpenGLWindow:公共 QWindow,公共 QOpenGLFunctions

当我将以下代码放在 render() 函数中时,这工作正常,完全没有问题,非常好!!

  1. 类 myOpenGLWidget:公共 QOpenGLWidget,公共 QOpenGLFunctions

我将代码放在paintGL 函数中。我可以为背景着色,但 glDrawArrays() 什么也不做。但是,我可以画一个三角形,glBegin 和 glEnd 语句之间的代码是成功的。我没有收到任何错误。我测试 m_program->bind() 调用的结果,结果返回 true。

  1. 类 myQOpenGLWindow:公共 QOpenGLWindow,受保护的 QOpenGLFunctions

与 #2 相同,只是我将代码放在 render() 函数中。我可以为背景着色,但 glDrawArrays() 什么也不做。但是,我可以画一个三角形,glBegin 和 glEnd 语句之间的代码是成功的。我测试 m_program->bind() 调用的结果,结果返回 true。

如果有人需要问,我是在阅读了几十个不同的教程之后这样做的,这是我能找到的最好的信息。

谢谢你!!

{ // 绘制场景:

}

0 投票
0 回答
60 浏览

opengl - glDrawArrays - 获取 GL_INVALID_OPERATION 和 GL_INVALID_VALUE

我正在将一些遗留的 OpenGL 代码移植到 Web 程序集(使用 emscripten)。这是使用 OpenGL 1.1

我有两种顶点格式,我在它们之间交换(取决于我是在做 2D 绘图还是 3D 绘图)。以下是两种格式:

这是旧的遗留代码,所以我只是直接从内存缓冲区中提取。当我绘制 2D 时,我会这样做(不要介意 XGL 包装,它只是一个定义来报告调用是否产生错误):

所以上面的工作......我得到我的渲染完全符合我的预期。

但是:当我尝试绘制另一种顶点格式时,带有法线但没有漫反射的格式:

现在,我什么都得不到。该 glDrawArrays 行删除了两个错误——GL_INVALID_OPERATION 和 GL_INVALID_VALUE。文档列出的这些可能错误的原因甚至不适用(确认 theTriangleCount 不是负数,并且我根本不在程序中的任何地方使用 glBegin 或 glEnd。

任何人都可以帮忙吗?

0 投票
1 回答
50 浏览

java - glDrawElementsInstanced: VertexAttribute mat4 not applied per instance

I have a problem with rendering multiple instances of an object, using one VertexArrayObject and four VertexBufferObjects.

I cannot get my head around what's wrong with my approach. Here are the basics:

My relatively simple Vertex-Shader-code:

As you can see, I try to pass the model view matrix (model and camera_view combined) as an VertexAttribute.

As far as I know, a VertexAttribute is limited to a max of vec4, which means my mat4 will actually take up 4 * vec4 locations.

Each VAO and VBO exists only once. I do not use a separate one for each "gameobject", as some online-tutorials do. Therefore I update each of the Buffers at specific positions. Buf first, let me show you the following code, which initializes them:

As far as I'm aware, this initialization should correspond to the 4 VertexAttributes, defined in the Vertex-Shader.

For test purposes, I initialize 4 gameobjects (A1, A2, B1, B2), each with:

  • 4 x vec3 points for the position-attribute, resulting in 4 * 3 = 12 floating-points pushed to the positionVBO
  • 4 x vec2 points for the texture-attribute, resulting in 4 * 2 = 8 floating-points pushed to the textureVBO
  • 6 x int points for the indices to draw (0, 1, 2, 2, 3, 0), pushed to the indicesVBO
  • 1 x mat4 for the modelViewMatrix-attribute, resulting in 4 * vec4 = 4 * 4 = 16 floating-points pushed to the matricesVBO

for each gameobject I push its data to the VBOs, using the following logic:

Now to the actual rendering:

I want to draw element A 2 times and after that, element B 2 times. for the instanced rendering, I group together the gameobjects, I knew i could render in one call, inside lists.

I now have two lists, each with two elements in them:

  • List1[A1, A2]
  • List2[B1, B2]

Once per list I now do:

The Problem:

This results in the first two elements being rendered correctly, but the second two (from the second list / glDrawElementsInstanced() call) are rendered with the transformation matrices of the first two elements.

It does not matter, which list of objects are rendered first. The second iteration always seems to use the modelViewMatrix attributes from the first ones.

As far as I understood, the glVertexAttribDivisor() call should limit the iteration of the matrices per instance instead of per vertex.

What am I missing here?