问题标签 [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.
c++ - 在 SDL 1.3 中创建 OpenGL 3.2/3.x 上下文
我遇到了一个问题,SDL 说它不支持 OpenGL 3.x 上下文。我正在尝试遵循本教程:Creating a Cross Platform OpenGL 3.2 Context in SDL (C / SDL)。在这种情况下,我使用的是 GLEW,但我也无法让 gl3.h 使用它。这是我最终得到的代码:
报告的唯一问题是在尝试调用后SDL_GL_CreateContext(window)
,SDL 报告“不支持 GL 3.x”。但是,本教程和这个示例包(我没有费心测试)都报告说成功地结合了 SDL 1.3 和 OpenGL 3.2。我知道 SDL 1.3 正在开发中,但我有点怀疑即使是无意的支持也会被删除。
仍然会创建一个上下文,并且 GLEW 能够很好地初始化。(我一生无法弄清楚如何查看创建的上下文版本,因为它应该是核心配置文件,我也不知道如何找到它。根据教程,SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3)
实际上并没有做任何事情,在这种情况下,我不知道如何创建适当的上下文或更改默认上下文。)
编辑:感谢 Nicol 给我的有用功能,经过一些测试后,我发现,无论我传递给什么参数SDL_GL_SetAttribute
,上下文始终是 1.1 版。但是,放入低于 3.0 的任何版本都不会显示不支持的错误。所以问题是SDL看到的“核心”版本只有1.1。
作为记录,我使用的是 Visual C++ 2010 express、GLEW 1.7.0 和最新的 SDL 1.3 修订版。我对使用所有这三个都相当陌生,我必须为 32 位和 64 位版本手动构建 SDL 库,所以有很多可能出错的地方。然而,到目前为止,32 位和 64 位版本的功能完全相同。
编辑:我正在使用带有最新驱动程序的 nVidia 360M GPU,OpenGL Extension Viewer 4.04 报告它与 OpenGL 3.3 完全兼容。
任何帮助表示赞赏。
更新:我已经设法让 SDL 停止对我大喊大叫,说它不支持 3.x 上下文。问题是SDL_GL_SetAttribute
必须设置BEFORE SDL_Init
的称为:
不幸的是,GLEW 仍然拒绝承认高于 OpenGL 1.1 的任何东西(只有 GLEW_VERSION_1_1 返回 true),这仍然让我感到困惑。glGetString(GL_VERSION)
还报告 1.1.0。似乎我的程序根本不知道任何更高版本,就好像我根本没有安装它们一样。
vbo - How to set up vertex attributes in OpenGL?
I am trying to create a VBO for a simple rectangle. The GL is set up to use the core profile (GL: 3.2, GLSL: 1.5, inside an NSView in Cocoa).
I spent hours trying to figure out how to draw a simple rectangle in OpenGL. It seems really hard to find any decent tutorials on the core profile. The best I could find was this tutorial.
I adapted it to my needs and came up with the following code:
However, this is throwing an error when calling glEnableVertexAttribArray
: INVALID_OPERATION
. The documentation suggests that this error is produced if the aforementioned call is made between a glBegin
and glEnd
. This is not the case. I mean, as far as I know, glBegin
and glEnd
are not even supported in the core profile.
Thus, I am at a loss. How can I draw this stupid rectangle (or at least initialize it)?
opengl - GL_ALPHA8 已从 OpenGL 3.1 中删除,有哪些替代方案?
据我所知,GL_ALPHA8
内部像素格式已从 OpenGL 3.1 中的 OpenGL 核心规范中删除。似乎没有更多具有 Alpha 通道但没有 RGB 通道的像素格式。这是否意味着唯一的选择是创建GL_RGBA8
纹理并将 RGB 分量设置为 255,因此浪费了 75% 的内存?
opengl - 在单个 VAO 中使用多个索引列表
我可能在这一切都错了,但是,嘿。
我正在渲染大量的墙段(为了论证,假设为 200)。每个部分都是一个单位高,均匀且笔直,没有对角线。所有方向的变化都是90度的变化。
我将每个都表示为一个四尖三角形风扇,也就是一个四边形。每个顶点都有一个与之关联的三维纹理坐标,例如 0,0,0,0,1,7 或 10,1,129。
这一切都很好,但我不禁认为它可以更好。例如,每个点至少重复两次(每面墙都是连续的线段,并且有一些三和四路交叉点)并且起始角纹理坐标(0,0,X 和 0,1,X)正在为每个纹理编号为 X 的墙壁复制。这可以通过将 O 坐标移动到第三个属性并分别索引 S 和 T 坐标来进一步压缩。
问题是,我似乎无法弄清楚如何做到这一点。VAOs似乎只允许一个索引,并且作为一个整体,每个位置和纹理坐标形成一个独特的雪花,永不重复。(诚然,这在某些角落可能不是真的,但这是一个非常边缘的情况)
我想做的事情是可能的,还是我必须坚持我目前使用的(公认很好)方法?
opengl-3 - 任何想法如何使用顶点着色器实现 Sigma 镜头
我正在尝试使用着色器在 OpenGL 中实现Sigma 镜头,但遇到了一些问题。
我将纹理坐标传递给顶点着色器,并尝试对焦点区域和过渡区域进行空间变换。但这不起作用,我只得到原始图像。
这是顶点着色器的代码。
有什么我遗漏的吗,我刚刚开始学习 Opengl 和 GLSL,所以请任何想法表示赞赏。
谢谢
qt - 无法使用 QGLShaderProgram 在 Qt 4.7 应用程序中使用组数组编译 GLSL 3.30 着色器
我正在开发一个使用 Qt 4.7 的应用程序,目的是创建一个简单的 3D OpenGL 查看器。我想使用 GLSL 3.30 着色器。我使用 Linux Ubutu 11.10,我的 CG 是带有 NVS 3100M GPU 的 NVIDIA,NVIDIA 驱动程序版本是 280.13,OpenGL 版本是 3.3.0
我有一个工作的基本着色器,它不计算任何照明。这是接下来要做的,但我遇到了一个问题。
这是我不工作的修改顶点着色器。
GLSL 3.30 的 OpenGL 着色语言参考指出:
所以如果我没记错的话,代码是正确的。但是,它甚至没有编译。抛出以下错误:
如果我删除对lights[0].ambient 的调用,着色器会编译,但是当我尝试获取统一位置时,它不起作用:
我也试过用“Light”、“lights”、“lights[0]”、“lights[0].ambient”作为统一名称,但没有成功。
经过一番搜索,我找到了这篇文章:Setting the values of a struct array from JS to GLSL,因此尝试使用显示的结构,但这也不起作用。
后续问题
如果我可以通过一些答案来实现它,我不知道我应该使用哪种 QGLShaderProgram 方法来上传数据。
tl;博士
1)为什么下面的代码不能编译?出 vec4 exColor;
2) 应该使用什么统一名称作为 QGLShaderProgam::uniformLocation() 的参数来获取 auniform Light { ... } lights[4];
或的位置struct Light { ... }; uniform Light lights[4];
?
3) 一旦获取到位置,应该使用 QGLShaderProgram 的什么函数将数据上传到 GPU?
非常感谢!
opengl - 帧缓冲区对象创建错误
编辑:已解决
我在尝试渲染到纹理时遇到了问题。我像这样创建一个帧缓冲区对象:
但是 的返回值glCheckFrambufferStatus
始终是GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT
。
问题似乎出在纹理上,因为没有 Renderbuffer 附件也是如此。绘制到帧缓冲区本身应该不是问题。
有人可以指出我在这里缺少什么吗?
c++ - 根据与相机的距离调整点精灵的大小
我正在为大学使用仅核心 OpenGL 3.3 编写 Wolfenstein 3D 的克隆,我遇到了精灵的一些问题,即让它们根据距离正确缩放。
据我所知,以前版本的 OGL 实际上会为您执行此操作,但该功能已被删除,并且我所有重新实现它的尝试都导致完全失败。
我目前的实现在远处是可以通过的,在中距离不是太破旧,在近距离是奇怪的。
主要问题(我认为)是我不了解我正在使用的数学。
精灵的目标尺寸略大于视口,所以当你接近它时它应该“走出图片”,但事实并非如此。它变小了,这让我很困惑。
我录制了一个小视频,以防文字不够。(我的在右边)
谁能指导我到哪里出错,并解释原因?
代码:
C++
顶点着色器
片段着色器
opengl - 是什么导致我的立方体面之间出现这种撕裂?
有点难看,但看起来那两张脸之间有黑白点。我怀疑这是 OpenGL 的质量设置之一,但我不知道是哪个。或者是纹理最小/放大过滤器(我将它们都设置为线性)?还是我需要 mipmapping 来解决这个问题?不太确定我应该寻找什么。
想出了如何做 mimapping....但这似乎使问题变得更糟。
这是我的一些设置(它在 C# 中,但它只是 C API 的一个薄包装器)
我无法注意到其他纹理:
所以也许我不会担心它......我们去照明吧!
c++ - glGetUniformIndices 没有返回正确的索引
我正在尝试学习如何使用统一缓冲区对象,阅读 OpenGL Superbible 5。我的着色器中有一个统一块:
现在我获取索引的代码是:
出于某种原因,这个电话给了我一个非常高的指数(4294967295,始终如一),我不知道为什么。我觉得我错过了一些明显的东西。OpenGL 正在报告一个活动的统一块,这是正确的,最多允许 15 个。在这部分代码之前或之后也没有错误标志处于活动状态。有什么建议可能会出错吗?