mousePressed 中的 glReadPixels

2023-12-09

我试图在用户单击 JOGL 时获取像素的颜色。如果我将以下代码放入显示方法中(来自GLEventListener),效果很好。

FloatBuffer buffer = FloatBuffer.allocate(4);

gl.glReadBuffer(GL3.GL_FRONT);
gl.glReadPixels(10, 10, 1, 1, GL3.GL_RGBA, GL3.GL_FLOAT, buffer);
float[] pixels = new float[3];
pixels = buffer.array();
float red = pixels[0];
float green = pixels[1];
float blue = pixels[2];
System.out.println(red + ", " + green + ", " + blue);

但是,如果我将代码放入 mousePressed 方法中,则在检查是否成功时会收到无效操作错误,并且颜色返回黑色 (0, 0, 0)。

有没有办法让它在我的 mousePressed 方法中工作,或者我必须存储选定的像素以及一个布尔值来指示选择(这样我就不会每帧调用 glReadPixels )并在显示中进行选择方法?

附注(x,y) 坐标 = (10,10) 只是为了确保选择确实在我的窗口内(确实如此,因为像素颜色在显示方法中正确显示)。


OpenGL 上下文一次只能在一个线程中处于活动状态,如果鼠标按下的事件处理出现在不同的线程上,那么此时您将无法正确地从 OpenGL 查询信息。一般来说,我会错误地在显示函数中读取像素值。如果您想避免每帧读取像素,您可以跟踪您读取的最后位置,并且只调用glReadPixels如果读取位置已更改。

正如 datenwolf 提到的,如果需要的话,可以停用和激活上下文以跨多个线程访问它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mousePressed 中的 glReadPixels 的相关文章

  • glDrawElements 在 PyOpenGL 中绘制立方体

    我最近开始通过 Python 学习 OpenGL 这要归功于几个教程 尤其是 Nicolas P Rougier 的教程 http www labri fr perso nrougier teaching opengl http www l
  • 计算边界球体半径时遇到一些问题

    我已经设法用两种方法计算边界球体半径 但没有一种方法能够准确地满足我的要求 我不需要 像素 完美边界球 但我想要比我目前拥有的更好的东西 我正在使用 Wavefront obj 模型并计算这些模型的边界球半径 我提取当前模型尺寸 我使用 N
  • 着色器/矩阵问题 - 看不到对象

    我试图在屏幕上放置一个立方体并点亮它 我想要在立方体上添加 phong 阴影 当我运行代码时 我可以看到背景图像 但看不到立方体 我相当确定立方体本身是正确的 因为我已经设法用纯色着色器显示它 我已经设法编译着色器程序 但我根本看不到立方体
  • OpenGL 将着色器附加到程序

    有没有办法访问附加到程序的着色器 也就是说 给定一个程序 我可以做类似的事情 vertexShader getVertexShaderFromProgram program 我想在验证我的程序的函数中记录着色器编译状态 但我只保留对程序的引
  • Opengl 非同步/非阻塞地图

    我刚刚找到以下内容OpenGL 规范ARB map buffer range http www opengl org registry specs ARB map buffer range txt 我想知道是否可以使用此扩展进行非阻塞地图调
  • 交错顶点提交如何提高性能?

    我已经阅读并看到了其他问题 这些问题通常都指向将顶点位置和颜色等交错到一个数组中的建议 因为这可以最大限度地减少从 cpu 发送到 gpu 的数据 我不清楚的是 即使使用交错数组 您仍然必须对位置和颜色指针进行单独的 GL 调用 OpenG
  • 没有着色器的 OpenGL

    我已经阅读了一些教程来编写以下代码 唯一的区别是原始教程使用 SDL 而不是 GLEW 我不明白这段代码有什么问题 它可以编译 但我没有看到三角形 教程也没有使用着色器 include
  • OpenGL 说“from_param 收到了一个不连续的数组”

    安装 Yosemite 后 我必须升级 numpy PyOpenGL 等 现在 以前运行的程序给了我以下堆栈跟踪 file latebind pyx line 44 in OpenGL accelerate latebind Curry c
  • CPU 到 GPU 法线映射

    我正在创建一个地形网格 然后这个答案 https stackoverflow com a 5284527 1356106我正在尝试将 CPU 计算法线迁移到基于着色器的版本 以便通过降低网格分辨率并使用在片段着色器中计算的法线贴图来提高性能
  • 法线在 openGL 中表现得很奇怪

    我一直在为 openGl 编写一个 obj 加载器 几何体加载得很好 但法线总是混乱的 我尝试在两个不同的程序中导出模型 但似乎没有任何效果 据我所知 这就是将法线放入 GL TRIANGLES 的方法 glNormal3fv norm1
  • OpenGL:调试“单通道线框渲染”

    我正在尝试实现论文 单通道线框渲染 它看起来很简单 但它给了我所期望的厚暗值 论文没有给出计算海拔高度的确切代码 所以我按照自己认为合适的方式进行了操作 代码应该将三个顶点投影到视口空间中 获取它们的 高度 并将它们发送到片段着色器 片段着
  • lnk1104:无法打开“LIBC.lib”链接

    使用 GLee 将着色器写入我的 OpenGL 项目并编译后 我收到了错误LNK1104 cannot open file LIBC lib 我尝试按照其他人的建议添加它并忽略它 但没有解决问题 有没有其他方法可以解决我错过的这个问题 以下
  • 使用 GLSL 着色器在同一片段着色器中定义的多个子例程类型无法正常工作

    我正在开发一个使用 GLSL 着色器的程序 我编写了 2 种不同的方法来用 2 种不同的方法计算 ADS 环境光 漫反射 镜面反射 着色 为了正确完成这项工作 我使用子例程来使用一种或另一种方法来计算 ADS 着色 这是片段着色器代码的一部
  • 将像素传递给 glTexImage2D() 后会发生什么?

    例如 如果我创建一个像素数组 如下所示 int getPixels int pixels new int 10 pixels 0 1 pixels 1 0 pixels 1 1 etc glTexImage2D getPixels glTe
  • OpenGL 与 Eclipse CDT + MinGW + GLEW + GLFW:未定义的参考

    Edit 与此同时 我已经弄清楚了这一点 并在下面写了详细的答案 我刚刚尝试在 Win7 上从 Express 版本的 MSVC 10 切换到 Eclipse CDT 在配置时遇到了以下简单 OpenGL 代码的问题 在 Visual St
  • glBlitFramebuffer 渲染缓冲区和渲染全屏纹理哪个更快?

    哪个更快更高效 使用 OpenGL 纹理作为 CUDA 表面并在四边形上渲染 新样式 使用渲染缓冲区作为 CUDA 表面并使用 glBlitFramebuffer 进行渲染 None
  • NV_path_rendering替代方案[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我刚刚观看了 Siggraph 2012 的一个非常令人印象深刻的演示 http nvidia fullviewmedia com sig
  • 如何在 GTX 560 及更高版本上使用 OpenGL 进行立体 3D?

    我正在使用在 Windows 7 上运行的开源触觉和 3D 图形库 Chai3D 我重写了该库以使用 Nvidia nvision 执行立体 3D 我将 OpenGL 与 GLUT 一起使用 并使用 glutInitDisplayMode
  • 无法在 WSL2 上运行 OpenGL

    我尝试在 WSL2 上运行 OpenGL 代码 但在尝试运行可执行文件时出现以下错误 GLFW error 65543 GLX Failed to create context GLXBadFBConfig Unable to create
  • 将带有 glut 的点击坐标添加到向量链接列表中

    我想创建一个向量链接列表 并在 GLUT 库的帮助下获取点击的位置并将它们附加到链接列表中 这些是我写的结构 typedef struct vector int x int y Vector typedef struct VectorLis

随机推荐

  • 在 Crystal Report 末尾添加附加页面

    我有一份订单报告 我想在末尾添加一个附加页面 说明订单的条款和条件 有人能帮我吗 在报表页脚中 将其设置为在打印之前创建一个新页面 在 部分专家 中 选择 报表页脚 gt 分页 选项卡 gt 选中 之前新建页面 复选框 将您的条款和条件放入
  • Plotly Dash - 渐变线

    是否可以使用 Plotly Dash 创建线条颜色渐变的折线图 纯粹为了美观 我尝试使用类似的东西 line color linear gradient 90deg red red 60 white 绘图破折号中的整个图形代码示例 dcc
  • 单击时更改 javafx 按钮颜色?

    我知道我可以使用按下的伪选择器来设置颜色 myButton pressed 问题是 我尝试通过以下方式在代码中覆盖样式表中的 css 背景颜色来做到这一点 myButton setStyle fx background color FFF
  • 如何按顺序迭代Golang中的地图?

    请看下面我的地图 var romanNumeralDict map int string map int string 1000 M 900 CM 500 D 400 CD 100 C 90 XC 50 L 40 XL 10 X 9 IX
  • Facebook getUser() 始终返回 0 [PHP SDK 3.1.1] [重复]

    这个问题在这里已经有答案了 fb php ini set display errors On error reporting E ALL require once facebook src facebook php facebook new
  • 禁用用户主文件夹创建

    当admin用户创建用户时 我自定义代码来打开和关闭 homeFolderCreationEager 但它只能延迟文件夹的创建 当相应的用户登录时 会自动创建该用户的文件夹 我怎样才能防止这种情况发生 任何善意的帮助将不胜感激 如中所述wi
  • 如何解决 java.lang.ClassNotFoundException: org.aspectj.lang.ProceedingJoinPoint 异常?

    大家好 我在运行我的应用程序时在 Spring Boot 上收到以下错误 java lang IllegalStateException Failed to load ApplicationContext at org springfram
  • 如何为jtable固定列设置图像,当我运行时,它仅获取图像路径

    我创建了一个程序来在 jtable 固定列中设置 imageIcon 我创建了一个 jtable 并获取数据库记录 然后将第一列设置为固定列 我在固定列中设置了一个图像图标 当我编译这个程序时 我只得到 imageicon 的路径 而不得到
  • Java 扫描器“倒带”

    我正在使用 Java Scanner 对象来解析文本文件 我需要扫描文件的一部分两次 出于性能原因 这样我就不必暂时存储其内容 因此 是否有一种方法可以将扫描仪 倒回 到特定的文件位置 或者 有没有办法克隆扫描仪 以便我可以独立使用每个实例
  • Haskell Double 除以 Int

    我有下面的代码 问题是我尝试划分Double by an Int factorial Int gt Int factorial 0 1 factorial e e factorial e 1 sumX Double gt Int gt Do
  • 在目标视图控制器 viewWillAppear 中检测向后/弹出导航[重复]

    这个问题在这里已经有答案了 有许多众所周知的解决方案用于检测视图控制器在向后导航过程中何时从屏幕上消失 由UINavigationController 即当视图控制器从导航堆栈中弹出时 换句话说 检测源视图控制器内的向后导航 相反 我需要检
  • 整数问题 Flex

    我对这段代码有疑问
  • 4xN 多米诺骨牌的组合数量

    我想找到 4 x N 区域 4 个单位宽度和 N 个单位高度 N 1 多米诺骨牌砖的可能不同组合的数量使用动态规划 多米诺骨牌的尺寸为 2x1 例如 对于水平和 对于垂直砖 Now 示例 4x1 两块多米诺骨牌叠在一起 4x2 砖块配置示例
  • 强制横向应用程序遇到困难

    我有两个应用程序 它们都强制用户在横向模式下使用 iPhone 以获得更宽的屏幕 而不是更高的屏幕 我发现的一件事是 我的第一个视图看起来不错 但所有其他视图都会将其子视图 UIButtons UIPicker UIViews 挤压到一侧或
  • 如何覆盖宽度属性?

    我怎样才能覆盖CSSwidth以便竞争widthHTML 属性定义了计算的大小 下面的示例以 500px 的宽度渲染 但我想要 100px 假设 css 规则无法更改 只是被更强的规则掩盖 编辑以澄清 我不想在内联或其他地方设置显式大小 i
  • 如何在 css 中使用@keyframes 进行交叉淡入淡出图像库?

    我有一个fiddle 小提琴A 其中 2 个图像 2 个图块 发生图像交叉淡入淡出图库 这是我使用过的 html css 片段 div class featured block style display flex a href https
  • 普通类型和匿名类型有什么区别?

    C 中的普通类型和匿名类型在编译过程和运行时内存管理方面有什么区别 匿名类型在某些方面是否比普通类型更加低效 From MSDN 匿名类型提供一种方便的方法来封装一组 将只读属性放入单个对象中 而无需首先 明确定义一个类型 类型名称由编译器
  • 使用 jQuery Validate 插件确保至少选中三个复选框之一

    使用 jQuery Validate 插件 我如何确保至少三个复选框之一已被选中 到目前为止 我能做的最好的事情就是使所有三个复选框成为必需的 这不是我想要的 我的代码如下 我尝试使用这个例子在 jQuery Validate 演示页面上
  • httr POST 请求正文中的数组

    这个curl调用可以在Digital Ocean上创建一个新的droplet curl X POST https api digitalocean com v2 droplets d name test3 region nyc2 size
  • mousePressed 中的 glReadPixels

    我试图在用户单击 JOGL 时获取像素的颜色 如果我将以下代码放入显示方法中 来自GLEventListener 效果很好 FloatBuffer buffer FloatBuffer allocate 4 gl glReadBuffer