问题标签 [opengl-3]

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

c++ - 带有纹理的卡通着色器

我正在尝试在opengl 3+上使用C++实现一个带有纹理的卡通着色器,但一周后我只得到了一个没有纹理的卡通着色器。

顶点文件:

片段文件:

谁能帮我让这个着色器处理纹理?

谢谢

0 投票
2 回答
3892 浏览

c++ - 了解用于在 OpenGL 3.3+ 核心中使用三角形绘制四边形的代码

我正在尝试使用 OpenGL 3.x+ 为背景(2D)绘制一个四边形。不推荐使用四边形,因此目标是使用两个三角形来制作一个填充屏幕的矩形。它正在工作,但我对这里的所有内容都不是 100% 清楚。

  1. 设置

    • 我理解vertexPositions,它是一个顶点数组。
    • glGenBuffers()是说,我想要 1 个缓冲区并将 id 分配给&positionBufferObject
    • glBufferData()上传vertexPositions到 GPU 的内存;但是由于我没有给它一个ID,它怎么知道要上传它?
    • glEnableVertexAttribArray()只是说我要用数组 0 绘图?
    • glDrawArrays()- 如果我想绘制两个顶点数组怎么办?它如何知道要渲染哪些?它从上面的命令中知道吗?
    • 不知道做什么glVertexAttribPointer()
    • glDrawArrays()清楚了。
  2. 清理一下,我觉得这样对吗?

    我只进行一次设置/清理。

奖励积分:

  • 这是呈现这个的最有效方法吗?我读到我假设要提交并“批量”渲染[?],因为 3.x+ 不再执行即时模式。也只有一个数组,所以在这种情况下,批次对性能没有帮助,但是如果我说要绘制“非常大量”的 vertxArrays,它会是相同的过程吗?
  • 在设置中,他们将数组 id 存储为 positionBufferObject,但在渲染循环中对其进行了硬编码。似乎在十几个数组之后会变得混乱,为什么使用变量而不是硬编码它不是一个好习惯?
0 投票
3 回答
19156 浏览

c++ - 了解顶点数组对象 (glGenVertexArrays)

我对生成/创建顶点数组对象(VAO)的观点感到困惑:

因为我仍然可以创建一个缓冲区对象,比如顶点,并在创建glVertexAttribPointerglEnableVertexAttribArray不创建 VAO 的情况下描述该缓冲区对象。

我的问题是,如果您不必实际创建 VAO 来描述缓冲区对象中的数据,为什么像 OpenGL SuperBible 5ed 这样的源会在创建 VBO 时包含创建 VAO 的调用?它们是否仅用于我尚未发现的更高级的主题,我是否完全糊涂了?

此外,我在阅读关于 VBO 的维基百科条目时第一次遇到这个问题,他们的示例代码不包括对的调用,glGenVertexArrays()但他们仍然用glVertexAttribPointer(). Wiki VBO 条目—— 出于什么原因创建 VAO 的示例?

0 投票
1 回答
164 浏览

opengl-3 - 如何启动 GL_Painter

我希望任何人都可以帮助我开始在OpenGl中做这个程序编写一个OpenGL程序(交互式程序),通过单击起点然后在显示窗口绘图区域上拖动来绘制线条。给用户一个菜单,供他选择。该菜单包含以下选项: 1- 清除显示窗口。2- 选择至少包括颜色(红色、绿色、蓝色、黑色)的线条绘制颜色。3- 选择包括(破折号、点、点划线、实线)的线条图案。4- 选择线条粗细。(线宽从 1 到 4)。5- 退出程序。

0 投票
2 回答
3034 浏览

opengl - glDrawElements 和平面着色

使用 glDrawElements 绘制对象时,是否可以在 OpenGL 中实现平面着色,如果可以,如何实现?如果可能的话,理想的方法是只为每个三角形计算一次法线。

该解决方案只能使用可编程流水线(核心配置文件)。

0 投票
1 回答
3661 浏览

opengl - 使用 glDrawArrays 绘制 VBO 在 OpenGL 2.1 中有效,但在 OpenGL 3.x 中无效

代码核心(显示红色矩形):

当我将上下文切换到 OpenGL 3.x 时,此代码停止工作(我只能看到背景颜色),但是当我以与上面代码相​​同的方式初始化 VAO 然后我绑定 VAO 并调用 glDrawArrays 时,然后它工作。

可能是什么问题呢?如何在不使用 VAO 的情况下绘制 VBO?

(着色器非常简单,与仅乘矩阵和 ps 输出红色相比)

0 投票
1 回答
204 浏览

c++ - OGL ESv2 中的相同游戏不适用于 OGL3

我编写了一个能够使用 OpenGL ESv2 或 OpenGL 3 Core Profile API 进行绘图的引擎。但是最近 OpenGL 3 部分坏了,我不记得我改变了什么,也不能查看 svn commitlog,因为我确实将它托管在 bountysource 现在已经关闭,我把它带到了谷歌(但 OGL3 端口坏了)。

使用 OpenGL ESv2 一切正常,但使用 OpenGL 3 一切都被水平拉伸和镜像。两者甚至使用相同的矩阵和顶点。

不要混淆。OpenGL ESv2 和 OpenGL 3 渲染器使用不同的方式来渲染它。

OpenGL ESv2 使用 VBO。OpenGL 3 使用 VAO 和 VBO。

我的引擎是开源的,所以,你可以在这里查看它:源代码

这些应该是重要的部分:Sprite ClassBase Window ClassGL3 Window ClassGL ESv2 Window Class

着色器:

GLv2:片段垂直

GL3:片段垂直

以下是一些示例图片: OpenGL 3 - 菜单 OpenGL 3 - 游戏内 OpenGL ESv2 - 菜单 OpenGL ESv2 - 游戏内

如果有人能给我解决这个问题,我会非常非常高兴和感激,也许我会为此给予一点奖励。

编辑:使用 480x800 窗口,gldebugger 显示此矩阵:
modviewmat
{1, -0, 0, 0}
{0, 1, 0, 0}
{0, 0, 1, 0}
{5, 770, 0, 1}

项目
{2, 0, 0, 0}
{0, 2, 0, 0}
{0, 0, -1, 0}
{-1, -1, -0, 1}

0 投票
1 回答
781 浏览

vbo - OpenGL 3.0:由 VBO 引起的访问冲突异常

我正在更新一个相当过时的 OpenGL 项目。所以我试图从顶点数组移动到 VBO,但是我有一个无法跟踪的访问冲突异常。

所以我正在使用我在类构造函数中生成的 VBO 和 IBO:

(glewInit() 已经被调用)

各种渲染对象定义为:

然后在我的绘图功能中我做:

对 glVertexPointer 的旧式调用一切正常……但现在我的程序因访问冲突异常而崩溃。知道这可能来自哪里吗?

谢谢

0 投票
1 回答
289 浏览

c++ - 完全支持OpenGL3的GUI-Toolkit

我需要一个正确支持 OpenGL3 并允许创建前向兼容配置文件的 GUI-Toolkit。

通常我使用 wxWidgets。但是当我尝试在 wxWindow 或 wxPanel 上创建我在引擎中使用的上下文时,GetDC() 失败,因为 Window 缺少 CS_OWNDC。我真的不想学习 QT,但从我的第一眼看它也不支持它。

那么,我怎样才能在 wxWindow 上创建合适的 Canvas 或 Toolkit 支持我的需求呢?感谢您的任何意见。

0 投票
1 回答
2252 浏览

opengl - opengl - 点精灵渲染问题

我正在尝试渲染点精灵,但我得到了分数。问题出在哪里 ?(通过 glUniform3f 改变颜色有效)

顶点着色器:

片段着色器:

渲染: