问题标签 [opengl-4]
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.
opengl - glDrawElement 使用 GLSL 着色器崩溃
我使用 GLSL 编写了一个简单的程序,它必须显示一个简单的纹理框。为此,我加载了一个名为“Box.mesh”的 OBJ 文件,然后为顶点、法线、纹理和索引缓冲区初始化 VBO。
这是 Box.mesh 文件的内容:
还有我程序的一段代码:
我检查了所有缓冲区的内容和大小,它们是正确的。所以我不明白为什么我在第一次调用 glDrawElements 时就崩溃了。我真的迷路了。有人可以帮助我吗?非常感谢您的帮助。
python - 像我 5 岁一样向我解释:OpenGL 4.x 渲染管道
在过去的几周里,我在业余时间都在研究 openGL。虽然我遵循一些较旧的 NeHe 示例没有问题,但从我所阅读的所有内容来看,OpenGL4 是一个完全不同的过程。我可以访问红皮书和超级圣经,但前者仍然提供遗留的 opengl 调用,而后者使用他们自己的库。两者对于理解如何在项目中组合代码都没有特别的帮助。例如,我目前的理解是 glu 和 glut 是遗留的,不应该用于 opengl 4。
我可以很容易地为假设的模型空间生成顶点。我很难理解一个模型最终是如何出现在我的屏幕上的。我大约 95% 的尝试都以黑屏告终。
提前致谢。
这是一些代码:
还有一个:
opengl - OpenGL 计算着色器扩展
我在创建计算着色器时遇到问题。
我的程序似乎不知道GLenum type GL_COMPUTE_SHADER
我何时尝试使用glCreateShader() func
.
我的显卡有点低端,但是当我检查GL_ARB_compute_shader
扩展时它存在,所以我猜这应该不是问题。
我必须做些什么来启用这个扩展,还是有其他问题我必须使用 OpenCL?
opengl - opengl中瓷砖的最小/最大深度
我正在尝试实现平铺延迟渲染,但我坚持计算每个平铺的最小/最大深度。我为此使用计算着色器。这是它的完整代码:
当我尝试运行程序时,它会在计算着色器编译中无限循环。知道为什么会出现这种情况以及如何解决吗?
编辑:所以当我尝试检查我正在使用此代码执行的计算着色器的链接状态时,我发现问题是由glGetProgramiv()函数引起的:
但是,如果我从我的着色器中删除atomicMin()一切正常。
c++ - 平铺渲染计算着色器灯光剔除和着色
我正在尝试在 OpenGL/GLSL 中实现平铺延迟渲染,但我被困在灯光剔除上。
我的 GPU 有点旧(AMD Radeon 6490m),由于奇怪的原因,当在共享变量上调用原子操作时,计算着色器以无限循环运行,因此我无法使用计算着色器计算最小和最大深度。无论如何,这不是很耗时的操作,所以我在片段着色器中进行。
然后对于每个可见点光(在视图空间中),我计算屏幕空间边界四边形。现在我想使用单个计算着色器进行灯光剔除和着色。问题是,如上所述,我无法对共享变量使用原子操作,因此我无法构建平铺灯光列表并存储平铺的灯光计数。
问题是我找不到任何其他方法来做到这一点。知道如何使用非原子来剔除和构建平铺灯列表吗?
这是我的计算着色器的伪代码:
c++ - 为阴影贴图计算的纹理坐标不正确
我在获取正确的纹理坐标以对我的阴影贴图进行采样时遇到问题。查看我的代码,问题似乎来自不正确的矩阵。这是我做阴影的渲染通道的片段着色器:
我已经从这个着色器中删除了所有与阴影无关的代码(照明等)。这是我用来渲染最终通道的代码:
如果它与我的问题相关,这里是我如何为深度和阴影贴图生成深度帧缓冲区附件:
我的数学或代码中的问题在哪里,我能做些什么来解决它?
opengl - 在阴影贴图之外进行采样会导致异常行为
当在我的灯光视图之外采样点以及因此我的阴影贴图时,我遇到了问题。每当我的阴影贴图创建时,GL_TEXTURE_WRAP 的纹理参数设置为 GL_CLAMP 或 GL_CLAMP_TO_EDGE,这就是我得到的结果:
我已经确定在这里发生的是,地图一侧有阴影的阴影贴图之外的每个点都被认为是阴影,而地图外没有阴影的一侧的每个点也被认为是无阴影的。我认为这是 GL_CLAMP 和 GL_CLAMP_TO_EDGE 的预期行为,但我在网上找到的各种阴影映射示例中没有看到这个问题。通过使用 GL_CLAMP_TO_BORDER 并设置边框颜色可以消除其中的一些问题,但这又不是我在我看过的任何示例中看到的修复。这是遮蔽聚光灯时的预期问题吗?如果是,通常的解决方法是什么?
c++ - 如何渲染多个纹理?
我试图了解如何在 OpenGL 中为不同的对象渲染多个纹理。我决定简单地尝试一下,据我所知 glActivate 用于选择正确的纹理,但它并没有像我预期的那样工作。在我的代码中,显示了两个对象(依次),但它们具有相同的纹理。这是代码的纹理初始化部分:
对于第一个纹理,textureUnit 为 0,对于第二个纹理为 1。模型渲染代码:
将 glActive 放在该部分之间,或在该部分之前不会改变任何事情。所以我的问题是,如何渲染多个纹理?我应该将 glActivate 放在其他地方还是需要更改其他内容。
opengl - 我们可以创建一个比基础纹理更小的暗淡(宽度/高度/深度)但具有相同数量的 mipmap 级别和层数的纹理视图吗?
我知道我们可以使用某些 mipmap 级别和/或纹理层作为视图。
例如,如果我们有一个大小为 64x64 的纹理二维数组,具有 12 层和 7 个 mipmpap 级别,我可以创建如下视图:
- 纹理 2d,大小为 64x64,具有 n 个 mipmap 级别(n = 0 到 6)。
- 大小为 16x16 的纹理 2d,具有 n 个 mipmap 级别(n = 0 到 4)。
等等..
大小为 64x64 的纹理二维数组,具有 n 个 mipmap 级别(n = 0 到 6)和 x 层(x = 0 到 11)
- 大小为 32x32 的纹理二维数组,具有 n 个 mipmap 级别(n = 0 到 5)和 x 层(x = 0 到 11)
- 等等..
但是 glTextureView 命令不会询问必须创建的视图的各个维度。是从我们选择的mipmap级别理解的吗?以上面的例子,我们不能创建一个大小为 64x32 和 7 个 mipmap 级别和 12 层的纹理 2D 视图吗?即它将为所有mipmap级别和层使用原始纹理的一半子图像..?
python - 用于 3D 纹理的 OpenGL 4.2+ 和 shader_image_load_store 不起作用?
我试图弄清楚为什么我不能使用(现在内置的)shader_image_load_store 扩展写入 3D 纹理。
我创建了两个简单的示例(在 python 中使其更容易):一个写入 2D 纹理,可以工作,另一个写入 3D 纹理,但不工作
(工作)2D版本如下:
而非工作 3D 版本如下:
代码不是特别整洁,也是因为我复制/粘贴/修改了一些旧的 pyopengl 代码。问题是写在 3D 纹理中的值绝对没有意义。我使用最新版本的 PyOpenGL(实验版)、Quadro K5000 和最新的驱动程序 (332.76) 运行它,它们也提供对 OpenGL 4.4 的支持。
我不确定我可能做错了什么,也是因为我没有找到很多写入 3D 纹理的示例(实际上没有,我还查看了最新版本的红皮书)
有人可以启发我吗?