问题标签 [opengl-2.0]

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

java - OpenGL GLfloat 无法识别 Java

我试图创建一个 GLfloat 缓冲区数组

GLfloat mat_diffuse[] = { .2f, .2f, .6f, 1f };

但是java找不到类GLfloat,当我尝试使用普通的浮点数组时,这一行出现错误

gl.glMaterialfv(gl.GL_FRONT, gl.GL_DIFFUSE, mat_diffuse);

错误读取incompatible types: float[] cannot be converted to FloatBuffer

有没有一种特殊的方法来创建一个GLfloat或者我需要从 openGL 导入一些东西来完成这项工作?

0 投票
1 回答
1369 浏览

opengl - 使用 SDL 和 OpenGL 调整窗口大小

在写这个问题之前,我已经阅读了这个问题:使用 OpenGL 和 SDL 处理窗口大小调整。然而,这个问题并没有解决我的问题,因为我使用的是 SDL2 而不是 SDL1.2。但我确实使用 OpenGL2。我的完整源代码位于:http: //dpaste.com/17BVBP6

我正在编写一个在窗口中显示一个白色方块的程序。但是我在处理窗口调整大小事件时遇到了麻烦。这是我的调整大小函数:

我的主事件循环:

这是未调整大小时的窗口: 未调整大小时渲染正确完成

这是我调整大小时的窗口: 调整大小时渲染未正确完成

是什么导致了这里的问题?

0 投票
1 回答
1333 浏览

opengl - GLSL - 高斯模糊伪影问题

首先,由于需求限制,我在 OpenGL v. 2.1 和 GLSL 120 中工作。我已经实现了一个简单的片段着色器,它应用从帕斯卡三角形获得的 n 核权重的两遍(水平和垂直)高斯模糊. 对于下面的图像,我决定使用 32 的内核大小,只是为了好玩:

高斯内核大小:32,偏移量:3

正如所观察到的,过滤后的 blob 的边缘似乎有一些奇怪的伪影,以及其边缘的振铃效应。作为参考,这是我应用模糊的方式:

此外,我正在使用两个帧缓冲区。首先,我将白色斑点绘制到绑定到第一个帧缓冲区的纹理上,然后将模糊着色器应用到第二个帧缓冲区以进行水平传递,然后返回到第一个以进行垂直传递。我已经实现了一个重复这个过程的滑块,见下面的片段:

随着我增加模糊的偏移量/半径,以及增加 for 循环运行的次数,条带/振铃/伪影变得更加明显。本练习的目的是简单地对 blob 的边缘应用“软化”效果,在能够操纵偏移的同时,内核不可见。任何人都可以对这个问题有所了解吗?谢谢你。

0 投票
0 回答
258 浏览

opengl - OpenGL - 将多个图像加载到纹理

我有一个 OpenGL 2.1 应用程序,其中用户可以加载多个图像,这些图像的宽度和高度可以不同,作为纹理,以便在屏幕上它们各自的四边形对象上呈现。

我最初是在渲染它们之前立即预加载所有图像,但是当用户决定加载数百个,在极少数情况下加载数千个时,就会出现问题,这会导致 RAM 的使用率非常高。我还在将位图容器转换为纹理后立即取消分配,仅供参考。此外,我尝试根据要渲染到的各自四边形的大小来减小图像的大小。但这似乎只是用绷带解决问题,因为用户有可能加载更多图像并加载更多四边形对象;因此更多的内存。

Sans限制了他们可以上传多少图像,我不知道如何正确管理纹理。我还阅读了有关使用像素缓冲区对象的技术:将图像数据传输到缓冲区-> 在一个可重复使用的纹理上渲染,重复过程。但是我对如何从那里开始有点困惑,因为似乎有一个假设,即所有图像在更新纹理之前必须具有相同的大小。还有性能损失的可能性,例如在将图像作为纹理上传到 OpenGL 的过程中帧速率急剧下降。不过,我非常愿意被证明是错误的。

任何人都可以阐明这个问题或指出我正确的方向吗?

0 投票
0 回答
404 浏览

c++ - 同时绘制到多个缓冲区并单独渲染每个缓冲区以显示

我的想法和要求是允许在程序执行期间最多创建“n”个缓冲区(其中 n<7)。因此,理想情况下,我正在寻找一种方法,在这种方法中,我可以将不同的东西绘制到不同的缓冲区,并在需要时渲染每个缓冲区。

喜欢:

Buffer1 - 画一个矩形

Buffer2 - 绘制一些纹理(字体/文本)“欢迎”

Buffer3 - 绘制一些多边形

Buffer4 - 绘制一些纹理(字体/文本)“堆栈溢出支持者”

... 等等。

同时,我想将不同的东西写入不同的缓冲区。然后我可能只想渲染 Buffer2 的内容,然后在一段时间后刷新显示并渲染 Buffer4。

我不工作的代码:

当我说 eglSwapBuffer 时,这会渲染 VB1 和 VB2 的所有内容。我怎样才能只渲染一个缓冲区。

我在做

在 DrawRect() 和 TextDraw() 定义中,我认为不应该这样做。

需要帮助来确定如何分别写入每个缓冲区以及如何在显示器上绑定所需的缓冲区内容。(需要的时候)。

DrawRect 实现

0 投票
0 回答
123 浏览

glsl - 帧缓冲区和纹理非二的幂

我看过一些教程,它们附加到帧缓冲区,这是一个二的幂的纹理。在其他教程中,我看到纹理不是 2 的幂。

我的问题是:当我将不是 2 的幂的纹理附加到帧缓冲区时会影响性能,还是可以使用任何大小的纹理?

在函数 glRenderbufferStorage 中也是如此,如果我的纹理不是 2 的幂,它会影响吗?

0 投票
1 回答
1193 浏览

opengl - 顶点着色器中从相机到对象的 XY 距离

我想在我的应用程序中显示一些雾/鸟瞰图。但我只想使用从相机到模型的 x,y 世界距离来确定外观。

我已经设法通过这个计算得到了从相机到模型的有符号 z 距离。

VTM 深度

红色对象与相机的 z 距离为正,蓝色对象与此实现相反,其中所有值似乎都是正的。

顶点着色器:

片段着色器:

  • 为什么可能有负 z 值?还是很常见?
  • 如何计算到相机的 x,y 世界距离?
0 投票
1 回答
1035 浏览

c++ - OpenGL 纹理导致 ImGUI 窗口永久失焦

我正在关注 TheCherno 的关于 OpenGL 的教程(不过我已经进行了一些修改)。我在 MacOS mojave 上并且有 OpenGL 2.1。然而,当我进入教程的 ImGui 部分时,事情开始变得很奇怪。

由于我有旧版本的 OpenGL,我使用的是 ImGui 的 glfw_opengl2_impl,并且https://github.com/ocornut/imgui/blob/master/examples/example_glfw_opengl2/main.cpp上的示例代码有效,但我除了 .h 文件(见我的代码顶部)之外,还必须包含一些其他 cpp 文件。

当我用自己的代码尝试这个时,我发现我必须在调用之前取消绑定着色器、顶点缓冲区/索引缓冲区和顶点数组ImGui_ImplOpenGL2_RenderDrawData(ImGui::GetDrawData());这实际上按预期工作了一次,但是在关闭并重新启动程序时,窗口拒绝了聚焦,文本显示为矩形。像 这样

我的代码:

编辑:我刚刚发现完全删除所有纹理可以解决问题。在绘制之前取消绑定纹理什么都不做。

编辑 2:显然有多个纹理是问题?!有一个纹理很好,但有多个会导致这个问题。同样,解除绑定什么也不做。

0 投票
1 回答
588 浏览

opengl - glAlphaFunc 发生了什么?为什么它被弃用了?

我正在阅读有关在 OpenGL 的片段着色器中使用“丢弃”的副作用,例如禁用早期测试。但是直到我偶然发现 glAlphaFunc 之前,我找不到任何 alpha 测试的替代方法,自 OpenGL 3.0 以来它似乎已被弃用。但是我找不到任何关于它为什么被删除的文档,而且似乎没有“丢弃”的替代方法。

0 投票
1 回答
81 浏览

opengl - 是否可以编写在 OpenGL 2.x 和 3.x 之间可移植的顶点数组代码?

OpenGL 3.0 规范说:

E.1 OpenGL 3.0 的配置文件和不推荐使用的功能

...

客户端顶点数组 - 所有顶点数组属性指针必须引用缓冲区对象(第 2.9.2 节)。默认的顶点数组对象(名称为零)也已弃用。在未绑定缓冲区对象或未绑定顶点数组对象时调用VertexAttribPointer会产生 INVALID_OPERATION错误,当未绑定顶点数组对象时调用任何数组绘制命令也会产生错误。

glEnableVertexAttribArray参考页面说:

GL_INVALID_OPERATION如果没有绑定顶点数组对象,则由glEnableVertexAttribArrayglDisableVertexAttribArray生成。

我听到的消息是,在 OpenGL 2.x 和 OpenGL 3.x/3.2+ 之间完全可移植的综合顶点数组代码是不可能的,因为 2.x 不能使用 VAO(API 表面可以严格执行——感谢 GLAD!),并且 3.x 必须使用 VAO(这...某些驱动程序可能会强制执行?)

在我看来,健壮的代码必须在某些时候在专用的 2.x 和 3.x 代码路径(在运行时检测到)之间分支。这是真的?