问题标签 [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.
ruby - 如何在 Ruby 中创建 OpenGL 3.x 或 4.x 上下文?
我到处找,但没有红宝石绑定允许创建 OpenGL 3/4 上下文。
它不必是完整的 OpenGL 绑定库,只是创建 OpenGL 上下文的部分。
更新:如果我足够绝望,我会用 ruby ffi 进行部分 glfw ruby 绑定。所以请救我;)
opengl - 矩阵组件和点积
我有以下 GLSL 代码:
例程RGBtoXYZ具有三个代码块(最后两个已注释)。第一个按预期工作,而其他评论的则不起作用。
问题是我认为它们是等价的。为什么他们不是?
c++ - 从固定流水线迁移到现代 OpenGL
我已经做了一些简单的 OpenGL(旧的固定管道,没有着色器 ..etc),并想开始一些严肃的“现代”OpenGL 编程。(应该在 Windows 和 Linux 上编译)
我有几个问题。
1) 在 Windows 中,“gl.h”没有声明 OpenGL2.0+ 相关的 API 调用。(例如 glShaderSource())。如何访问这些 API 调用?我不想安装显卡特定的头文件,因为我想在其他机器上编译这个应用程序。
2) 在 Linux 中,如果我安装 Mesa 库,我可以访问上面的 OpenGL2+ API 函数吗?
performance - 使用 OpenGL 提高轮廓渲染的性能?
请参阅视频。
在我的应用程序中,我使用使用 GL_LINE_STRIP 创建的 DisplayList 显示轮廓堆栈。
用户可以使用鼠标选择轮廓线。为此,在渲染 DisplayList 之前,我使用独特的颜色渲染所有轮廓并读取鼠标下的像素颜色。(如此处所述)。此渲染是使用“立即模式”完成的。
用户还可以移动、删除选定的轮廓。在这种情况下,我会重新生成 DisplayList。
我的问题是:
1)我正在使用旧的 OpenGL 技术。(固定管道架构。)有没有办法使用新的 OpenGL 技术来提高性能?(使用GPU,着色器...等)因为对于大量的轮廓,操作并不流畅。
2)我认为为轮廓选择完成的“立即模式”渲染也是一个性能面板。有没有更好的方法来做到这一点?
3) 我需要将轮廓节点显示为点云,使用 GL_POINTS。在此,我应该使用 GL_POINTS 创建另一个 DisplayList?(这意味着有两个 DisplayLists;一个用于显示线,另一个用于显示点)?
opengl - glPushName和glPopName的功能如何实现
如何在 openGL 3.x 中实现 glPopName 和 glPopName 的功能?
opengl - 如何在 openGL 3.1 中使用 glPixelTransfer、glTexEnv 和 glRasterPos?
glPixelTransfer
,glTexEnv
并且glRasterPos
在 OpenGL 3.1 中已被弃用。它用什么代替?如果不更换,如何获得类似的效果?我想使用这些功能。
c++ - 绑定到 OpenGL 3.x VBO
我正在尝试更新我曾经使用 OpenGL 2.x 样式顶点数组的引擎以使用 OpenGL 3.x,这意味着更新到 VAO/VBO。我认为我没有正确绑定 VBO。阅读下面的更多信息或跳到代码并找出我做错了什么。
我的网格类的快速概览如下所示:
网
- 根网格节点
网格节点
- 转换
- VAO指数
- 指数 VBO 指数
- 子网格节点数组
- 网格对象数组
网格对象
- 从文件中加载的所有顶点和索引数据,用于单个总网格
- 顶点 VBO 索引
如果我只用一个 MeshObject 绘制一个 MeshNode,它似乎画得很好。当我用多个 MeshObject 绘制一个 MeshNode 时,我得到的东西是我试图绘制的模型的一般形状,但有点乱码。
我已经检查了 Visual Studio 调试器中的顶点数据和通过 gDEbugger 的 VBO 数据,一切看起来都很好,所以我很确定从文件加载并加载到 VBO 中是有效的。
我使用 gDEbugger 强制它为所有顶点而不是三角形绘制点,并且它具有单个 MeshObject 的形状,这让我相信我只是没有正确绑定到不同的 VBO。好像它试图用不同的索引绘制,但每次都使用相同的顶点。
顶点数据看起来像这样:
相关MeshNode代码:
相关MeshObject代码:
opengl - 在OpenGL中将顶点数组与纹理相结合
我正在尝试使用顶点数组来绘制一个相当大的网格,其中包含大量顶点。纹理已经从这些中确定,并且很容易在立即模式下沿着以下线绘制:
然而,为了可读性、速度和其他方面,我想使用顶点数组(以期转向 VBO)。有没有办法绕过将单个顶点多次放入数组中?
据我目前了解,有必要指定网格的每个顶点,因为它出现在网格的面上,因为每个顶点都标识多个纹理坐标(纹理是从真实世界的图像中捕获的)对象网格近似),即我的顶点/ tex 坐标数组读起来就像我在立即模式下填充它一样。
有没有办法使用顶点数组,同时指定纹理坐标,而不使用冗余(我的意思是重复)顶点?
semantics - 使用 OpenGL 3.x 的 CG 着色器语义?
我曾经让 CG 着色器在 OpenGL 2.x 中使用顶点数组,但我已经更新为在 OpenGL 3.x 中使用 VBO 和 VAO,现在语义似乎不起作用,除了 POSITION。CG 不会抛出任何编译错误,但如果我将片段着色器中的输出颜色设置为输入正常值,我只会得到纯黑色。还有另一个答案链接到一个说要使用的页面cgGLEnableClientState
(它本身什么也没做)和cgGLSetParameterPointer
(这似乎很疯狂,因为我已经将数据发送到 OpenGL,为什么要通过 CG 发送另一个副本)。那么我错过了什么?
顶点着色器:
片段着色器:
我发现某个地方将这些列为 的索引glVertexAttribPointer
,但它们很容易出错(这些是VBO 设置函数中的 、 等)Shader::POSITION
:Shader::NORMAL
VBO设置功能如下:
着色器绑定函数如下:
opengl - 为什么 glGetUniformLocation 让我失望了?
几天前我找到了 Gwen,并认为它看起来是我项目的完美 GUI 工具包。但是哦,亲爱的,看看渲染器中的所有 OpenGL 2 代码。所以我想我会写一个 OpenGL 3 渲染器,这样我就可以实际使用它了,但我对 CG 比对 GLSL 更熟悉,而且我一直在编写示例。我想如果我可以设置这些统一变量,它应该基本上完成了。
着色器编译和链接没有问题。我将其缩小到 glGetUniformLocation 返回 -1 的正交矩阵和纹理采样器,但我不知道它为什么会这样做。典型的问题似乎是,如果您实际上没有使用它们,它们会被优化,但我已经使用了它们。
如果有人有任何想法,我会全力以赴。一旦它正常工作,将非常乐意发布/链接完整的东西。这是我第一次尝试 GLSL,所以我很容易做一些愚蠢的事情。我刚刚完成了另一个项目的 CG 设置,所以我并不是完全一无所知。
设置 OpenGL 上下文后调用的着色器初始化代码:
着色器作为字符串存储在头文件中,但我删除了所有换行符和反斜杠,因此它们看起来不那么痛苦。
顶点着色器:
片段着色器: